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 | Responder

Puertas deslizantes con CSS

Una ventaja de CSS que rara vez se mencióna es la habilidad de poner las imágenes de fondo en capas, permitiendo que se deslicen para crear ciertos efectos. CSS2 requiere elementos HTML distintos para cada imagen de fondo. En muchos casos código semánticamente correcto ya provee estos distintos elementos, suficientes por lo tanto para aplicar este truco.

Uno de estos casos es la navegación con pestañas. Es hora de retomar el control sobre las pestañas cuya popularidad para la navegación primaria en muchos sitios esta creciendo. Ahora que CSS es aceptado ampliamente, podemos subir la calidad y el aspecto de las pestañas de nuestros sitios. Probablemente estén al tanto de que se puede usar CSS para dominar simples listas desordenadas. Quizás hasta hayan visto listas estilizadas como pestañas de una manera similar a esta:

Esquinas Cuadradas

Que dirían si les dijese que con el mismo código HTML de las pestañas de arriba, podemos hacer algo así:

Esquinas Redondeadas

Con estilos simples, podemos.

¿Dónde esta la innovación?

Muchas de la pestañas estilizadas con CSS que he visto tienen el mismo aspecto general: rectangulos cuadrados de color, quiza con un borde, quiza con un recuadro, un borde desaparece para la pestaña activa, el color cambia en el estado :hover. ¿Esto es todo lo que CSS nos puede brindar? ¿Un puñado de cajas de colores?

Antes de la expansión de CSS, comenzamos a ver un montón de innovación en el diseño de navegación. Formas creativas, fusion de colores e imitaciónes de interfaces físicas del mundo real. Pero estos diseños dependían de una construcción compleja de imágenes mezcladas con tablas. Modificando el texto o el orden de las pestañas requerían un gran esfuerzo. Cambiar el tamaño de letra era imposible o causaba grandes desperfectos en el diseño de la página.

Navegación por texto puro es mucho más simple y carga mas rápido que usando imágenes. Ademas, aunque podemos poner atributos alt a cada imagen, texto puro es mucho más accesible ya que se puede agrandar el tamaño de letra para gente con problemas de vista. No es ningún misterio porque la navegación hecha con texto esta volviendo a la escena. Pero la mayoría de estas pestañas estilizadas con CSS siguen estando un nivel por debajo de lo que antes se podía conseguir, obviamente nada que se pueda incluir en un portfolio. Una nueva tecnología (como CSS) debería permitirnos crear algo mejor, sin perder la calidad gráfica de los modelos antiguos con tablas e imágenes incorporadas.

La técnica de puertas deslizantes

Hermosuras, componentes de interfaz verdaderamente flexibles que se expanden y contraen con el tamaño del texto son posible con dos imágenes de fondo. Una para la izquierda y otra para la derecha. Piensen que estas imágenes son como dos puertas deslizantes que completan una entrada. Las imágenes se acercan y se superponen para llenar un espacio poco ancho, o se separan para llenar un espacio mas ancho, como muestra el siguiente diagrama:

Diagrama

Con este modelo, una imagen cubre una porción de la otra. Asumiendo que queremos algo especial en la parte exterior de cada imagen, como una esquina redondeada, no queremos que la imagen superior cubra complemtamente a la inferior. Para evitar esto hacemos que la imagen de la izquierda sea lo mas fina posible. Pero lo suficientemente ancha como para que se vea el detalle especial:

Diagrama

Si el objeto se hace más grande que la anchura de las imágenes, por culpa de cambio de fuente o tamaño del texto, las imágenes se separaran y quedará un vacio feo. Tenemos que hacer una estimación de cual es la cantidad de amuento que tendrá que soportar la pestaña. ¿Cuanto creemos que podrá crecer el texto si se aumenta el tamaño? Realísticamente, debemos tener en cuenta de que el texto puede aumentar un 300%. Debemos, por lo tanto, hacer las imágenes de fondo más grandes para poder soportar ese incremento. Para nuestro ejemplo, haremos que la imagen de la derecha sea de 400×150px y la imagen de la izquierda sera de 9×150px.

Tengan en cuenta que las imágenes solo se ven en la zona delimitada por nuestra “puerta”. Las dos imágenes estan fijadas a sus respectivas esquinas. Las partes visible encajan dentro de la puerta para formar una pestaña redondeada:Diagrama

Si la pestaña se agranda, las imágenes se separan, llenando una puerta más grande, revelando más de cada imagen:

Diagrama

Para este ejemplo, use Photoshop para crear dos pestañas tri-dimensionales que use más arriba. Para una use un relleno clarito y para la segunda lo hize más oscuro, la versión “light” será la usada para la pestaña activa. Usando esta técnica, necesitamos expandir el area de la imagen y cortarla en dos pedazos:

Diagrama

Lo mismo debemos hacer para la version “light”. Una vez que tengamos las cuatro imágenes, (1, 2, 3, 4) podemos pasar al código y el CSS de las pestañas.

Creación de pestañas

A medida que vayan explorando la creación de listas horizontales con CSS, se darán cuenta de que existen dos métodos para acomodarlos en una fila. Ambos tienen sus ventajas y desventajas. Ambos métodos son confusos y requieren un poco de paciencia. Uno usa display:inline y el otro usa position:float

El primer método, y el mas común, consiste en cambiar el display de cada item a inline. Este método es interesante por su simplicidad. Sin embargo, este método causa algunos problemas en ciertos navegadores. El segundo método es el que vamos a usar, usa float para poner cada elemento en su lugar, en una fila. Este método puede ser igual de frustrante. Su comportamiento aparentemente irregular no sigue ninguna lógica. De todas maneras, con una comprension básica de como usar multiples floats puede lograr maravillas.

Vamos a anidar varios elementos dentro del float. Hacemos esto para que los elementos esten limitados por el float, de esta manera podemos poner las imágenes de fondo en estos elementos y por lo tanto hacer que tengan las medidas de la pestaña. Es importante recordar que el siguiente elemento despues de la lista debe restaurar su posición usando la propiedad de clear. Esto evita que las pestañas afecten a la colocación de otros elementos en la pagina.

Comenzamos con el siguiente código:
<div id=”header”>
<ul>
<li><a href=”#”>Home</a></li>
<li id=”current”><a href=”#”>News</a></li>
<li><a href=”#”>Products</a></li>
<li><a href=”#”>About</a></li>
<li><a href=”#”>Contact</a></li>
</ul>
</div>

En realidad, la div #header puede contener un logo y un formulario de busqueda. Para nuestro ejemplo, vamos a acortar el valor de href de cada link. Obviamente, estos valores serían de direcciónes normales.

Empezamos por estilizar nuestra lista por hacer que el #header flote. Esto ayuda a asegurar que el contenedor contenga la lista que también estara flotante. Ya que el elemento esta flotando, le ponemos una anchura de 100%. El fondo temporal amarillo es para asegurar que el #header se expanda para llenar el espacio detrás de las pestañas. Tambien agregamos unas propiedades para el texto, asegurandonos que todo quede igual:
#header {
float:left;
width:100%;
background:yellow;
font-size:93%;
line-height:normal;
}

Por el momento, le asignaremos “0″ a todos los valores de margin y padding de la lista y sus items, también eliminamos el marcador de lista. Cada elemento se flota a la izquierda:
#header ul {
margin:0;
padding:0;
list-style:none;
}
#header li {
float:left;
margin:0;
padding:0;
}

Hacemos que todos los enlaces sean bloques para poder controlar todos los aspectos con mayora facilidad:
#header a {
display:block;
}

Luego, añadimos la imagen derecha al elemento de lista (los cambios estan en negrita):
#header li {
float:left;
background:url(“norm_right.gif”) no-repeat right top;
margin:0;
padding:0;
}

Ahora podemos colocar la imagen de la izquierda en frente de la imagen de la derecha, aplicandola al enlace. Asimismo añadimos padding, para expandir la pestaña y alejando el texto de los bordes:
#header a {
display:block;
background:url(“norm_left.gif”) no-repeat left top;
padding:5px 15px;
}

Una nota para los confundidos usuarios de IE5/Mac que se estarán preguntando “¿Qué esta pasando? Las pestañas estan apiladas y se expanden por toda la pantalla”. No se preocupen, ya llegaremos a ese punto. Por el momento, intenten seguir o cambien temporalmente de navegador si es posible.

Ahora tenemos las imágenes de fondo en lugar de las pestañas normales, tenemos que cambiar las imágenes usadas para la pestaña activa. Hacemos esto con un nuevo elemento id=”current” y le ponemos el link dentro. Ya que no tenemos que alterar nada mas que las imágenes de fondo usamos la propiedad de background-image:
#header #current {
background-image:url(“norm_right_on.gif”);
}
#header #current a {
background-image:url(“norm_left_on.gif”);
}

Necesitamos algún tipo de borde en la parte inferior de las pestañs. Pero aplicando border a #header no permitirá que la pestaña activa se posicione encima del borde. En cambio, creamos una imagen con el borde que queremos incluir en la parte inferior de la imagen. Ya que estamos, le ponemos un gradiente suave:

Fondo

Aplicamos esa imagen como fondo de #header (en reemplazo del amarillo que habia previamente), empujamos la imagen contra el borde inferior y usamos el color que tenga dicha imagen arriba. Tambien, le sacamos el padding al elemento body que teniamos incialmente, y aplicamos 10px de padding arriba, a la derecha y a la izquierda de la lista:
#header {
float:left;
width:100%;
background:#DAE0D2 url(“bg.gif”) repeat-x bottom;
font-size:93%;
line-height:normal;
}
#header ul {
margin:0;
padding:10px 10px 0;
list-style:none;
}

Para completar el effecto de pestaña, necesitamos que la pestaña activa este por encima del borde. Lo lógico sería aplicar un borde inferior con el mismo color del borde de #header y luego cambiarlo para la pestaña activa. Pero si hacemos esto nos quedara un escalón de un píxel. En cambio, si cambiamos el padding dentro de la pestaña activa:

Diagrama

Hacemos esto decrementando el padding del enlace por un píxel (5px – 1px = 4px), y luego se lo sumamos a la pestaña activa:
#header a {
display:block;
background:url(“norm_left.gif”) no-repeat left top;
padding:5px 15px 4px;
}
#header #current a {
background-image:url(“norm_left_on.gif”);
padding-bottom:5px;
}

Toques finales

Aquellos que tengan buena vista habrán notado que se ven las esquinas blancas de las pestañas. Estas esquinas opacas impiden que se vea el fondo. En teoría podriamos hacer que ese color fuese similar a la zona de la imagen de fondo, para que se disimule. Pero como queremos que nuestras pestañas puedan cambiar de tamaño esto seria imposible. Para soluciónar este problema hacemos que las esquinas de las pestañas sean transparentes. Si las curvas tienen anti-alising, las combinamos con un color de fondo similar al de la imagen de fondo.

Ahora que las esquinas son transparentes, un pedazo de la imagen de fondo de la derecha se ve a traves de la zona transparente de la imagen de la izquierda. Para evitar esto le ponemos un poco de padding izquierdo al elemento de lista equivalente a la anchura de la imagen de la izquierda (9px). Como ya teníamos un padding, tendremos que eliminar otra tanto al enlance para que quede centrado (15px – 9px = 6px):

#header li {
float:left;
background:url(“right.gif”) no-repeat right top;
margin:0;
padding:0 0 0 9px;
}
#header a {
display:block;
background:url(“left.gif”) no-repeat left top;
padding:5px 15px 4px 6px;
}

Sin embargo, no lo podemos dejar así tampoco, porque ahora nuestra imagen de fondo izquierda se aleja del borde de la pestaña unos 9px. Ahora que los lados interiores de ambas imágenes están juntas, no necesitamos que la imagen de fondo izquierda este arriba. Asi que podemos intercambiarlas, aplicandolas a los elementos opuestos. Necesitamos intercambiar las imágenes de la pestaña activa también:
#header li {
float:left;
background:url(“left.gif”) no-repeat left top;
margin:0;
padding:0 0 0 9px;
}
#header a, #header strong, #header span {
display:block;
background:url(“right.gif”) no-repeat right top;
padding:5px 15px 4px 6px;
}
#header #current {
background-image:url(“left_on.gif”);
}
#header #current a {
background-image:url(“right_on.gif”);
padding-bottom:5px;
}

Un hack consistente

En la mayoria de los navegadores, cuando flotamos un elemento, este se achicara lo maximo posible. Si el elemento contiene una imagen entonces tendrá las dimensiones de la imagen.

Un problema se presenta para Mac cuando un elemento bloque de anchura indefinida se mete dentro del elemento flotado. Otros navegadores achicarían el elemento independientemente del tamaño de lo que hubiese dentro, pero Mac no lo hace. Lo que hace es exandir el elemento flotado lo maximo posible. Para soluciónar el problema tenemos que flotar el enlace, pero solo para Mac, para que no salten problemas en otros navegadores. Primero haremos que el enlace flote y luego usaremos el Commented Backslash Hack para esconder una nueva definición de Mac que elimina el float para los otros navegadores:
#header a {
float:left;
display:block;
background:url(“right.gif”) no-repeat right top;
padding:5px 15px 4px 6px;
text-decoration:none;
font-weight:bold;
color:#765;
}
/* Commented Backslash Hack hides rule from IE5-Mac */
#header a {float:none;}
/* End IE5-Mac hack */

No debería haber ningun diferencia entre el ejemplo 5 y 6 para los otros navegadores. Notese que IE5.0/Mac sufre de muchos problemas que se arreglaron con IE5.1./Mac Por eso, este truco no sirve en la versión 5.0. Ya que la actualización a IE5.1/Mac ha estado disponible por algún tiempo la cantidad de Macs con OS 9 y IE5.0 debería ser infima.

Título Original: Sliding Doors of CSS
Autor: Douglas Bowman
Fuente: scourdesign

Publicado en CSS | Responder