Búsqueda personalizada

CSS Diseño: Listas de Doma “CSS Design: Taming Lists”

Ya en julio de 1999 yo estaba en las listas de correo electrónico pontificar sobre las virtudes de las hojas de estilo. Algunas cosas nunca cambian.

Lo que ha cambiado es la forma en que pienso en CSS, y la estructura subyacente de (X) HTML a los que se aplica. Por ejemplo, me parece que la mayoría de las páginas en la web contiene un menú de enlaces en un área de navegación. Estos son a menudo marcado como una cadena de enlaces, a menudo en DIVs separados o párrafos. Estructuralmente, sin embargo, son una lista de enlaces, y debe ser marcado como tal.

Por supuesto, la razón de que no los marca en esa forma es que no queremos que una bala en la frente de cada eslabón de nuestra zona de navegación. En un artículo anterior señalé varias técnicas para el uso de CSS para el diseño de una página web. Una de las técnicas utilizadas para la manipulación de una lista de visualización horizontal y no vertical.

En este artículo, voy a demostrar cómo utilizar CSS para llevar listas de difícil de manejar bajo control. Es hora de que les diga a las listas de cómo comportarse, en lugar de dejar que vuele en su página web.
Preparando el escenario

Para efectos de este artículo, yo estoy usando listas desordenadas. El CSS puede aplicar el mismo, con resultados similares, así como listas ordenadas. Salvo disposición en contrario, todos los ejemplos en este artículo se utiliza el siguiente código para las listas

<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5 haremos un poco más de tiempo para wrap</li>

</ul>

Cada lista simplemente se coloca dentro de un DIV diferentes, y el CSS está escrito de modo que el comportamiento de la lista es determinada por el DIV es pulgadas cada div tiene una regla de base:

#base {
border: 1px solid #000;
margin: 2em;
width: 10em;
padding: 5px;
}

Sin ningún tipo de estilos adicionales aplicadas, la lista se representa de esta manera en la base de DIV:
*  Item 1
* Item 2
* Item 3
* Item 4
* Item 5 haremos un poco más de tiempo para wrap
Posicionamiento

A veces, el guión, por defecto de una lista es demasiado para el diseño que está trabajando. Sin embargo, simplemente cambiando el margen o el relleno de la UL no funciona para todos los navegadores. Para que la lista alineado a la izquierda, por ejemplo, tiene que cambiar tanto el margen y el relleno. Esto es porque Internet Explorer y Opera optado por crear el guión con el margen izquierdo, mientras que Mozilla / Netscape uso de relleno. Para mayor información consulte el artículo DevEdge consonancia Lista sangría.

En el siguiente ejemplo, tanto el margen izquierdo y padding-left de la UL en el DIV se ponen a cero:

*  Item 1
* Item 2
* Item 3
* Item 4
* Item 5 haremos un poco más de tiempo para wrap
Tenga en cuenta que los marcadores se encuentran fuera de la DIV. Si la caja que contenía eran el cuerpo del documento HTML, los marcadores pueden ser prestados fuera de la ventana del navegador, en efecto de fuga. Si desea que los marcadores de la línea en el interior de la DIV, pero a lo largo de su lado izquierdo, o bien establecer el relleno o el margen izquierdo a una em:
*  Item 1
* Item 2
* Item 3
* Item 4
* Item 5 haremos un poco más de tiempo para wrap
Marcadores

Tal vez usted ha tenido un proyecto que requiere una bala personalizado. Si es así, podría haber marcado en una tabla con una columna que contiene las viñetas de imagen GIF alineado arriba ya la derecha, y la otra columna con el contenido de lo que debería haber sido LI. Con CSS es posible utilizar una imagen como una bala. Si el navegador no soporta esta parte del CSS (o no hacer imágenes), la bala por defecto será usada (o puede especificar una bala HTML diferente si lo desea).

La norma se ve algo como esto:

ul {
list-style-image: url(bullet.gif);
}
Y el navegador hace es el siguiente:
*  Item 1
* Item 2
* Item 3
* Item 4
* Item 5 haremos un poco más de tiempo para wrap
Para especificar una bala de HTML para utilizar si el navegador no es compatible con esta parte de la CSS, añadir:
list-style-type: disc;
a la regla hará que el cambio. Estas tres declaraciones se pueden combinar en una sola declaración, reducida tal como se ilustra en la siguiente regla:
ul {
list-style: disc url(bullet.gif) inside;
}
que es el equivalente de:
ul {
list-style-type: disc;
list-style-image: url(bullet.gif);
list-style-position: inside;
}
Esto es lo que parece en la página web:
Sin_t__tulo_2.jpg
Puede haber ocasiones en las que tienen una lista, pero no queremos balas, o si desea utilizar algún otro carácter en lugar de la bala. Una vez más, CSS proporciona una solución sencilla. Basta con añadir list-style: none; a la regla y la fuerza de la LIS para mostrar con sangrías. La norma se verá algo como esto:
ul  {
list-style: none;
margin-left: 0;
padding-left: 1em;
text-indent: -1em;
}
Ya sea el relleno o el margen de las necesidades que se ponen a cero, con el otro de uno a 1em. Dependiendo de la “bala” que usted elija, puede ser necesario modificar este valor. El texto negativa guión hace que la primera línea que se desplaza a la izquierda por esa cantidad, la creación de una sangría francesa.

El HTML contendrá nuestro UL estándar, pero con cualquier carácter o entidad HTML que desea utilizar en lugar de la viñeta anterior, el contenido del elemento de la lista. En nuestro caso vamos a utilizar », el derecho de cita ángulo doble:».

navegadores que señalar que Netscape6/7/Mozilla (y otros basados en Gecko) y Opera puede crear contenidos generados a través de la CSS2: antes del pseudo-elemento. Podemos tomar ventaja de esto para generar automáticamente el carácter »(o de cualquier otro carácter) para las balas. Esto nos permite dejar que el contenido de la UL solo. Si usted está usando Opera o un navegador basado en Gecko, el siguiente CSS creará la misma lista que el anterior, pero utilizando el estándar UL sin contenido extra:
#custom-gen ul li:before {
content: “\00BB \0020″;
}

Listas de verdad en línea

¿Quién dice que una lista tiene que ser alineada verticalmente con balas colgando del lado izquierdo de cada tema? Tal vez desea que la estructura de una lista ordenada de enlaces, pero visualmente que desea que se vea como una barra de navegación vertical en la página web. O tal vez usted quiere que su lista de enlaces que se alineen horizontalmente en la parte superior de la página.

Esto se aplica a algo más que listas de enlaces. Hay veces en que es posible que tenga a la lista de varios elementos, en medio de un párrafo, tal vez una lista de libros que desea leer. Estructuralmente, tiene sentido para marcar esto como una lista, pero presentationally puede que no desee cortar el flujo del párrafo. CSS para el rescate de nuevo!

Dado que esta lista no será separado y en sí mismo, no voy a ponerla en el DIV de base que las listas anteriores han habitado. Esta vez, el margen de beneficio será un párrafo, seguido por la misma lista, seguido de otro párrafo.

Te oigo llorar, “Foul! Pensé que íbamos a poner una lista dentro de un párrafo, no entre dos párrafos. ”

A lo que contesto: “Bueno, sí. Pero (X) HTML no permite una lista que aparecen dentro de un párrafo. Sin embargo, con la ayuda de nuestra hoja de estilo, que es como se verá en la página web “.

Esto es lo que los estilos parecidos a estos:

#inline-list {
border: 1px solid #000;
margin: 2em;
width: 80%;
padding: 5px;
font-family: Verdana, sans-serif;
}

#inline-list p {
display: inline;
}

#inline-list ul, #inline-list li {
display: inline;
margin: 0;
padding: 0;
color: #339;
font-weight: bold;
}

El margen de beneficio consiste en una <div id=”inline-list”>. Esta DIV contiene un párrafo seguido de nuestra norma UL, y un apartado de seguimiento. La lista de UL ha sido modificado de modo que cada elemento de la lista tiene una coma después de que, con el último punto seguido de un período.

Los resultados están por debajo de (la lista aparece en negrita y azul):

Un poco de texto antes de la lista aparece. Tal vez el contexto es algo acerca de un marido que una llamada de su esposa a recoger algunas cosas en el camino a casa desde el trabajo. En realidad no importa, para nuestro propósito sólo necesitamos un poco de texto precedente antes de la lista: * Tema 1, * Artículo 2, * Artículo 3, * Artículo 4, *Tema 5  haremos un poco más de tiempo para que se ajustará. Y luego está el texto que sigue a la lista en el párrafo. Uno o dos frases es suficiente para el ejemplo.
Como en el ejemplo de bala por encima de la costumbre, se podría utilizar el CSS para generar automáticamente las comas y el período que siguen a cada elemento de la lista. Si todo lo que tenía que preocuparse por la Ópera y fueron alimentados navegadores Gecko, que es. Esta vez los estilos se vería así:
#inline-list-gen ul li:after {
content: “, “;
}

#inline-list-gen ul li.last:after {
content: “. “;
}

Aquí se utiliza el: después de pseudo-elemento para agregar una coma después de cada elemento de la lista, y un período después de que un elemento de la lista con class = “anterior”, con el siguiente resultado (recuerde, sólo será visible en Opera o Mozilla / Netscape ):
Un poco de texto antes de la lista aparece. Tal vez el contexto es algo acerca de un marido que una llamada de su esposa a recoger algunas cosas en el camino a casa desde el trabajo. Realmente no importa, para nuestro propósito sólo necesitamos un poco de texto antes de la lista anterior: punto 1, * Artículo 2, punto 3, punto 4, * Tema 5 haremos un poco más de tiempo para que bajara
Y luego está el texto que sigue a la lista en el párrafo. Uno o dos frases es suficiente para el ejemplo.

#h-contain {
padding: 5px;
border: 1px solid #000;
margin-bottom: 25px;
}

Los dos ejemplos siguientes utilizan el mismo UL como en los ejemplos anteriores, pero sin el elemento de la lista final con su texto adicional. También incluyen una clase adicional que separa una de la LIS en la lista.

Fronteras

Un carácter de canalización, |, a menudo se utiliza para diferenciar entre las opciones. Se trata de un evidente carácter de separación, y puede servir de ejemplo para agregar a la lista de artículos de las fronteras:

#pipe ul {
margin-left: 0;
padding-left: 0;
display: inline;
}
#pipe ul li {
margin-left: 0;
padding: 3px 15px;
border-left: 1px solid #000;
list-style: none;
display: inline;
}

#pipe ul li.first {
margin-left: 0;
border-left: none;
list-style: none;
display: inline;
}

Aquí agregamos class = “primero” de la LI primero para que no termine con un borde en su lado izquierdo.
Usted puede modificar estos estilos para crear un efecto de navegación con pestañas:
#tabs ul {
margin-left: 0;
padding-left: 0;
display: inline;
}

#tabs ul li {
margin-left: 0;
margin-bottom: 0;
padding: 2px 15px 5px;
border: 1px solid #000;
list-style: none;
display: inline;
}

#tabs ul li.here {
border-bottom: 1px solid #ffc;
list-style: none;
display: inline;
}

En este ejemplo añadiendo class = “aquí” para un LI crea un borde inferior que coincide con el color de fondo para indicar que la ficha se refiere a la página actual.

Nota: Esta técnica fue ofrecida por Randal Rust, y luego riffed por muchos en el css-discuss lista de correo electrónico
Senderos Breadcrumb

Otra lista de enlaces que normalmente tiene una orientación horizontal en una página web es lo que se conoce como breadcrumbing. Pan rallado mostrará dónde usted está en la jerarquía de un sitio, a partir de la página de inicio y la perforación hasta la sección actual o la página. Si usted realmente quiere hacer el marcado sentido, usted quiere crear una serie de listas anidadas, ya que cada nueva sección forma parte de la sección antes de que:

<div id=”bread”>
<ul>
<li>Home
<ul>
<li>&#187; Products
<ul>
<li>&#187; Computers
<ul>
<li>&#187; Software</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
crea lo siguiente:

* Home» Products» Computers» Software

Añadiendo las siguientes reglas a la hoja de estilo para la página:
#bread {
color: #ccc;
background-color: #006;
padding: 3px;
margin-bottom: 25px;
}

#bread ul {
margin-left: 0;
padding-left: 0;
display: inline;
border: none;
}

#bread ul li {
margin-left: 0;
padding-left: 2px;
border: none;
list-style: none;
display: inline;
}

crea esto:
Home» Products» Computers» Software
Una vez más, podemos generar el carácter »(o de cualquier otro carácter que usted podría usar como un separador) con: antes de pseudo-elemento, combinado con un class =” primero “para que la LI primero no genera un separador:
#bread-gen ul li:before {
content: “\0020 \0020 \0020 \00BB \0020″;
color: #ff9;
}

#bread-gen ul li.first:before {
content: ” “;
}

Y el resultado final:
Home» Products» Computers» Software
En el mundo real

Me gustaría terminar con una aplicación real de algunas de las técnicas que se han discutido aquí. Usaremos un UL estándar que contiene enlaces para crear un menú dinámico con efectos de la libración. Con el fin de obtener los efectos de la libración vamos a dejar que la UL proporcionan la estructura y los estilos de anclaje proporcionará la mayoría de los efectos visuales.

Este menú de enlaces es realmente una solución a una pregunta formulada por Michael esfuerzo en la CSS-discuss lista. Michael se había creado este efecto exacto mediante una tabla, las imágenes, y JavaScript. Pidió a la lista si se podía hacer con CSS. Tomé el reto, y con la ayuda de varios otros miembros que rastreó algunas cuestiones específicas del navegador, nos encontramos con una hoja de estilo que funciona en este marcado:
<div id=”button”>
<ul>
<li><a href=”#”>Home</a></li>
<li><a href=”#”>Hidden Cameras</a></li>
<li><a href=”#”>CCTV Cameras</a></li>
<li><a href=”#”>Employee Theft</a></li>
<li><a href=”#”>Helpful Hints</a></li>
<li><a href=”#”>F.A.Q</a></li>
<li><a href=”#”>About Us</a></li>
<li><a href=”#”>Contact Us</a></li>
</ul>
</div>
Echemos un vistazo a la regla de la hoja de estilo por la regla, y voy a explicar por qué cada regla se construye la forma en que lo es.
#button {
width: 12em;
border-right: 1px solid #000;
padding: 0 0 1em 0;
margin-bottom: 1em;
font-family: ‘Trebuchet MS’, ‘Lucida Grande’,
Verdana, Lucida, Geneva, Helvetica,
Arial, sans-serif;
background-color: #90bade;
color: #333;
}
La primera regla es que el botón # DIV. Se define el espacio que ocupará en el menú, y proporciona un contexto para el menú para que podamos definir la forma en la lista y los enlaces se comportan dentro de la DIV. Decidí hacer que el líquido de menú, basado en las preferencias de tamaño de fuente del navegador, así que (casi) todas las unidades están en EMS. Esto incluye a la anchura del menú. El borde negro sólido sobre el derecho se basa en el diseño original de Michael. El relleno de fondo está ahí para ampliar la DIV establecen más allá del menú de enlaces para que pueda ver el fondo de la DIV. De nuevo, esto sigue el diseño original. El margen inferior es separar la DIV de lo que sigue. Los colores vino desde el diseño original.
#button ul {
list-style: none;
margin: 0;
padding: 0;
border: none;
}

#button li {
border-bottom: 1px solid #90bade;
margin: 0;
}

Luego me definieron lo que la lista se verá así. Dado que todos los elementos de la lista iban a ser los vínculos y la funcionalidad de vuelco se construiría en el CSS para los enlaces, que esencialmente elimina todos los estilos de las listas. Hice añadir un borde único píxel en la parte inferior de cada enlace que coincidió con el fondo de la tecla # DIV, para trabajar como el separador. En el diseño original, se trataba de una imagen.
#button li a {
display: block;
padding: 5px 5px 5px 0.5em;
border-left: 10px solid #1958b7;
border-right: 10px solid #508fc4;
background-color: #2175bc;
color: #fff;
text-decoration: none;
width: 100%;
}

html>body #button li a {
width: auto;
}

#button li a:hover {
border-left: 10px solid #1c64d1;
border-right: 10px solid #5ba3e0;
background-color: #2586d7;
color: #fff;
}

Por último, se definen los vínculos. El diseño original tiene 10 píxeles de las fronteras de la derecha y la izquierda. Estas fronteras, junto con el fondo, cambian de color en el vuelco del vehículo. Esto es algo relativamente sencillo de controlar con el pseudo: hover clase en CSS, así que puse este estilo en los estilos de anclaje.

Hay una solución en esta parte de la hoja de estilo. Para establecer los vínculos activos para el ancho de la DIV, hice display: block;. Esto funciona para todo, pero IE / Windows. Si usted le da al bloque un ancho explícita del 100%, entonces IE / Windows juega a lo largo. Pero hacer esto crea problemas con IE5/Mac y Netscape / Mozilla. Así que he usado el selector de hijo “>” para redefinir el ancho de automóviles. Desde IE / Windows no entiende selectores de hijos, se ignora la regla. IE5/Mac, Opera y Netscape / Mozilla seguir la regla, y todo el mundo está feliz.

La regla para la: hover pseudo-clase crea los cambios de color en el fondo y las fronteras cuando los vínculos son moused más.

El estilo y la lista de marcado (alrededor de 1K vale la pena), sustituyó sobre 5K de JavaScript y de marcado de mesa, por no hablar de otro modo 8K o de imágenes para los efectos de vuelco. También hizo el marcado más legible y más fácil de actualizar, puesto que ya no es necesario crear nuevas imágenes, si cambia un enlace del nombre. Ahora simplemente modificar el texto. Usted puede ver el resultado final en el contexto de la página en el sitio web de Vigilancia de Activos.
Punta del Iceberg

Lo creas o no, acabamos de arañado la superficie de lo que se puede hacer para modificar las listas con las hojas de estilo. No voy a pretender que todas las técnicas presentadas aquí son la CSS más práctico que usted va a venir a través, pero espero que te hacen pensar acerca de cómo utilizar CSS puede liberar el uso de marcas más estructurada.

fuente: alistapart

Publicado en CSS | No comments

Déjanos tu comentario

Por favor, sea educado sobre el tema. Tu email no será publicado.