Beruflich Dokumente
Kultur Dokumente
http://mosaic.uoc.edu/ac/le/es/m6/ud7/index.html
Encabezamientos de las tablas. Celdas de datos de las tablas. Ttulos de las tablas.
Cuando los usuarios de vuestro sitio lean vuestra tabla, deberan poder entender y seguir fcilmente su estructura. La manera ms sencilla de conseguirlo es utilizar bordes, colores de fondo o ambos. No es necesario que sigis estas convenciones estilsticas, pero s deberais garantizar que existe una diferencia clara entre las celdas th y td; adems, el caption (ttulo) debera estar asociado claramente con la tabla y diferenciado del resto del texto de la pgina.
Compiled in 2008 by Ms Jen Mt. Lassen Mt. Hood Mt. St. Helens
Ved tambin Podis ver el mismo ejemplo en el apartado 19 del mdulo "El texto central de HTML".
Los datos son comprensibles, pero hay que esforzarse un poco para ver cmo va todo. Aadmosle unos estilos para hacer que sea ms fcil de leer.
como resultado que la tabla se extienda a lo ancho del contenido. Esto, en general, queda desordenado. Pongamos por caso que nuestra tabla debe ir en una columna de contenido de 600 pxeles de anchura. Especificamos que la tabla se ample hasta el 100% de la anchura disponible para aprovechar mejor el espacio. Como hay cuatro columnas, establezcamos tambin la anchura de las celdas de tabla en un 25% cada una.
table { width: 100%; } th, td { width: 25%; }
De hecho, podis limitaros a establecer la anchura para th y esto definir la anchura de todas las columnas; aun as, siempre va bien ser riguroso. Este estilo tan sencillo dar el resultado que se ve en la figura 1:
Ahora las celdas quedan con una anchura igualada. Ms adelante ya veremos cmo especificar anchos desiguales, pero de momento seguimos con el siguiente paso.
Ahora mismo, todas las celdas estn alineadas verticalmente en el centro. Si lo prefers, podis definir que el texto se alinee en la parte superior o inferior de la celda, o cualquier posicin de vertical-align que queris. Las siguientes reglas establecen que el texto se alinee en la parte superior.
table { width: 100%; } th, td { width: 25%; text-align: left; vertical-align: top; }
Fijaos en cmo todos los ttulos de la fila superior quedan tocando arriba aunque "Last Major Eruption" queda en dos lneas.
33.2.3. Bordes
La tabla ya queda un poco mejor, pero an cuesta un poco leer cada lnea. Ahora aplicaremos algunos bordes para hacer que todo sea ms fcil de leer. Debis establecer los bordes de manera independiente para cada parte de la tabla y despus decidir cmo se deberan combinar. Para mostraros dnde quedarn los bordes, la figura 4 muestra diferentes bordes para table (solid black, negro slido), caption (solid grey, gris slido), th (dashed blue, lnea discontinua azul) y td(dotted red, lnea de puntos roja):
Fijaos en cmo el borde de la table recorre el contorno exterior de todas las celdas de encabezamiento y de datos y despus pasa entre las celdas y el ttulo de la tabla. Tambin podis ver que, por defecto, los bordes th y td se distancian un poco el uno del otro. Pasemos ahora a otro estilo de tabla. Podis crear un borde negro sencillo para la tabla y las celdas mediante la propiedad border (borde). Esto se hace con las reglas siguientes:
table { width: 100%; border: 1px solid #000; } th, td { width: 25%; text-align: left; vertical-align: top; border: 1px solid #000; }
Esto provoca que las filas sean ms fciles de leer, pero puede que no os guste el espacio que queda entre las celdas. Hay dos maneras de cambiarlo. Primero, podis limitaros a cerrar los huecos utilizando la propiedad borderspacing (espaciado de bordes), por ejemplo as:
table { width: 100%; border: 1px solid #000; }
th, td { width: 25%; text-align: left; vertical-align: top; border: 1px solid #000; border-spacing: 0; }
De esta manera, los bordes se tocarn en lugar de quedar separados. As se cambia el borde de 1 pxel por un borde de 2 pxeles, como se ve en la figura 5:
Figura 5. Tabla sin espaciado entre bordes que produce un efecto de borde de 2 pxeles.
Tambin podis aumentar el espacio entre las celdas utilizando border-spacing, aunque hay que tener en cuenta que esta propiedad no funciona con Internet Explorer. Si queris mantener el efecto de borde de 1 pxel, necesitaris definir la tabla de manera que los bordes se "colapsen" los unos sobre los otros. Podis conseguirlo utilizando la propiedad border-collapse(superposicin de bordes) en lugar de la de borderspacing (espaciado de bordes):
table { width: 100%; border: 1px solid #000; } th, td { width: 25%; text-align: left; vertical-align: top; border: 1px solid #000; border-collapse: collapse; }
De esta manera, obtendris una tabla con un borde de 1 pxel como se observa en la figura 6:
Figura 6. Tabla con border-collapse (superposicin de bordes) definido para superponerse y as reducir el borde en 1 pxel
Cuando definis que los bordes se superpongan, debis tener en cuenta que esto os puede causar problemas si tenis estilos de bordes diferentes aplicados a celdas adyacentes. Cuando los estilos de bordes diferentes se superponen unos sobre otros, entrarn en "conflicto" entre ellos. Esto se soluciona mediante las reglas de resolucin de conflictos de bordes de tabla de la especificacin de CSS2 del W3C, que determinan qu estilo "gana" cuando se superponen.
33.2.4. Relleno
Ahora que ya habis aplicado bordes en las celdas, puede que queris aadir un poco de espacio en blanco a las celdas del ttulo y de la tabla. Para hacerlo, slo debis utilizar el padding (relleno).
table { width: 100%; border: 1px solid #000; } th, td { width: 25%; text-align: left; vertical-align: top; border: 1px solid #000; border-collapse: collapse; padding: 0.3em; } caption { padding: 0.3em; }
border: 1px solid #000; } th, td { width: 25%; text-align: left; vertical-align: top; border: 1px solid #000; border-collapse: collapse; padding: 0.3em; caption-side: bottom; } caption { padding: 0.3em; }
Si queris cambiar la posicin del caption, recordad que ningn estilo especfico de lado funcionar con IE. Por ejemplo, si queris aadir tres bordes para hacer que el ttulo "se una" a la parte inferior de la tabla, en IE no quedar as porque el ttulo seguir estando en la parte superior. Deberis utilizar comentarios condicionales para reaplicar el estilo a la tabla para IE.
Ved tambin Para saber ms, podis ver tambin el subapartado 33.2.7.
33.2.6. Fondo
Otra manera muy sencilla de aplicar estilos a las tablas es aadir colores e imgenes de fondo. Esto se hace con la propiedad background (fondo), aunque debis tener presente que las diferentes partes de la tabla actuarn como "capas" una encima de la otra. La especificacin CSS2 explica los efectos de capas de fondo bastante detalladamente, pero en pocas palabras: los fondos se taparn los unos a los otros en este orden: 1. tabla (que queda "al fondo del todo" o "detrs de todo"), 2. grupos de columnas, 3. columnas,
4. grupos de filas, 5. filas, 6. celdas (por "encima" o "delante" de todo, es decir, que su fondo tapa a todos los dems). Por lo tanto, si establecis un fondo para la tabla y un color diferente para las celdas, el fondo de la celda tapar el fondo de la tabla. Si habis establecido los bordes en collapse (superposicin), el fondo de la tabla no se ver. No obstante, si habis establecido border-collapse en separate, el fondo de la tabla se ver entre los bordes. Nota Fijaos en que el concepto de elementos diferentes uno encima del otro en la pgina es controlable; podis controlar a qu altura de la "pila" queda un elemento en relacin con los dems cambiando su propiedad z-index.
Ved tambin En el apartado 37 de este mdulo aprenderis ms cosas sobre z-index.
Imaginaos que defins la tabla de manera que tenga un fondo rojo y las celdas con fondo blanco. Entre la separacin de las celdas se ve el rojo, pero las celdas siguen siendo blancas, como se muestra en la figura 9:
Figura 9. Tabla que demuestra cmo el elemento de fondo de tabla rojo se ve entre los fondos blancos de las celdas.
Tambin podis utilizar una imagen de fondo. Por ejemplo, si queris tener una gradacin que se vea entre las celdas, podrais definir th y td con fondos blancos, pero establecer el fondo de table con una gradacin de colores:
table { border-collapse: separate; border-spacing: 5px; background: #000 url("gradient.gif") bottom left repeat-x; color: #fff; } td, th { background: #fff; color: #000; }
Fijaos en que el color de fondo se establece en negro, que llena el espacio en la parte superior donde acaba la gradacin cromtica (siempre debis tener en cuenta que la
tabla puede ser ms alta que la imagen de fondo). El color de delante del todo se establece en blanco por si en algn momento estos colores por defecto se ven a travs del contenido de las celdas. En general, los estilos de las celdas cancelarn la configuracin del color del texto del estilo de table {}, pero siempre se deberan definir colores de fondo y de primer plano que hagan contraste. Estos estilos crean una tabla que quedara como en la figura 10 en la mayora de los navegadores.
Figura 10. Tabla con una imagen de fondo con gradacin de colores que se ve entre las celdas
Por defecto, con IE no se ver tanto el fondo porque no reconoce border-spacing. Sin embargo, se consigue el mismo efecto, tal como se observa en la figura 11:
Dependiendo de las circunstancias, puede que os conformis con esta diferencia de representacin entre navegadores. Pero, lgicamente, eso no siempre es posible, por ejemplo cuando un cliente especifica que quiere que un diseo quede exactamente igual en todos los navegadores.
Este CSS slo sirve para IE, de manera que slo ste lo debe poder aplicar. La expresin tambin invalidar la hoja de estilo, de manera que los desarrolladores prefieren aislar las manipulaciones de IE en una hoja de estilo aparte que slo cargue IE. Para hacerlo, cread una hoja de estilo nuevo que se llame ie-only.css ("slo IE") y enlazadla dentro de comentarios condicionales:
<!--[if lte IE 7]><link rel="stylesheet" media="screen" href="ie-only.css" /> <![endif]-->
Fijaos en que [if lte IE 7] significa "si menos que o igual a la versin 7 de IE". Esto revela el cdigo en IE 7 y en todas las versiones anteriores de IE, pero el comentario de HTML que lo rodea oculta el cdigo a todos los dems navegadores. Podis ajustarlo a cualquier versin de IE que necesitis, por ejemplo, si se trata de la versin IE6 y anteriores, utilizad: [if lte IE 6]. En vuestra hoja de estilo principal, estableced el estilo normal:
table { border: 1px solid #000; border-collapse: separate; border-spacing: 5px; background: #000 url("gradient.gif") bottom left repeat-x; }
As, IE mostrar una tabla con espacios anchos entre las celdas. Slo debis acordaros de conservar la configuracin de anchura adicional. Si actualizis vuestra hoja de estilo principal, tambin deberis actualizarie-only.css. Como es lgico, los comentarios condicionales permiten hacer muchas cosas ms aparte de aplicar estilos a las tablas, porque la hoja de estilo extra puede incluir todo el CSS que necesitis para arreglar errores del IE.
border: 1px solid #000; border-collapse: collapse; padding: 0.3em; caption-side: bottom; } caption { padding: 0.3em; color: #fff; background: #000; } th { background: #eee; }
Figura 12. Tabla con ttulo de texto blanco sobre fondo negro y fondo gris claro en las celdas de encabezado
Figura 13. Tabla con "lneas de cebra", filas alternativas de color blanco o gris claro
La manera ms fcil de aplicar el efecto de las lneas de cebra es aadir una clase para alternar filas de la tabla y despus utilizar un selector de CSS contextual para aplicar estilos en las celdas de estas filas. Antes que nada, se aaden las clases "par" (odd) e "impar" (even) a las filas de la tabla, as:
... <tr class="odd"> ... <tr class="even"> ...
Podis saltaros la fila del ttulo porque ya tiene un estilo propio. Entonces aadid una clase contextual para definir el fondo de todas las celdas de las filas de la clase impar (odd).
.odd th, .odd td { background: #eee; }
sta es la manera ms sencilla de aadir lneas de cebra a una tabla de HTML que funcione en todos los navegadores, pero no es del todo perfecto porque, qu sucede si despus aads una fila a la tabla? Pues que deberais desplazar todos los nombres de clase odd y even para que todo quedara bien. Hay dos opciones alternativas:
Podis aadir las clases mediante JavaScript no obstrusivo como se demuestra en A List Apart: Zebra Tables. La mayora de los frameworks de JavaScript tambin tienen un mtodo adecuado: Zebra Table Showdown compara toda una gama de implementaciones. Podis utilizar el selector de CSS3 :nthchild, pero an no lo reconocen todos los navegadores. De todos modos, con el paso del tiempo eso ir mejorando.
Podis encontrar ms informacin sobre las lneas de cebra con nth-child en un apartado de dev.opera.com.
Figura 14. Tabla con bordes gris claro slo por los extremos y por debajo de cada celda
Tambin podis ir un paso ms all y eliminar todos los bordes excepto el borde superior e inferior para dar un poco ms de definicin a la tabla central. Podis ver la figura 15:
Figura 15. Tabla con bordes slo en la parte superior e inferior de la tabla central
} th.name { width: 25%; } th.location { width: 20%; } th.lasteruption { width: 30%; } th.eruptiontype { width: 25%; } tfoot { text-align: center; color: #555; font-size: 0.8em; }
Para aplicar este efecto a todos los navegadores actuales, debis aadir una clase a las celdas th y td que aparecen en el ltimo lugar de cada fila, as:
... <tr> <th <th <th <th </tr> ...
Entonces utilizamos la clase para eliminar el borde derecho de estas celdas. El CSS completo es el siguiente:
table { width: 100%; text-align: left;
border-collapse: collapse; margin: 0 0 1em 0; caption-side: top; } caption, td, th { padding: 0.3em; } th, td { border-bottom: 1px solid #000; border-right: 1px solid #000; } th.last, td.last { border-right: 0; } tfoot th, tfoot td { border-bottom: 0; text-align: center; } th { width: 25%; }
el
En este ltimo subapartado hablaremos de dos errores realmente muy habituales para que estis preparados cuando os los encontris. Tienen que ver con los bordes y los ttulos.
Safari hace lo mismo, pero en el lado derecho. Este error se basa en una cuestin de redondeo que se reduce al problema de cmo representar "medio pxel". Se podra afirmar que no se trata de un error per se, pero los navegadores no estn de acuerdo, de manera que en la prctica s que se trata de un error. Cmo se puede solucionar? Si queris utilizar un borde de 1 pxel y un fondo de ttulo, no hay ninguna otra solucin aparte de aceptarlo. Es una diferencia muy pequea y no se trata de un problema grave. Es decir, la tabla sigue siendo perfectamente legible. Por lo tanto, mucha gente opta por aceptar las diferencias entre navegadores. La web tiene estas cosas. Si no os importa utilizar un borde ms grande, como por ejemplo de 2 pxeles, podis establecer un borde de 1 pxel en la tabla, las celdas y el ttulo y despus definir la tabla para que tenga los bordes separados y aplicar un espacio de cero entre ellas.
table { border-collapse: separate; border-spacing: 0; border: 1px solid #000; } th, td, caption { border: 1px solid #000; }
En el caso de Firefox, como mnimo los bordes de 1 pxel se suman para crear el borde representado de 2 pxeles que queremos obtener, de manera que nos ahorramos el problema del redondeo. El Safari, en cambio, sigue dejando un espacio. Por otra parte, podis evitar el problema si no aplicis borde ni color de fondo al ttulo. El problema no desaparecer, pero no se notar. Probablemente, sta es la solucin ms fcil y efectiva.
Si utilizis una caption y establecis un margen en table (tabla), debis tener en cuenta que puede que Firefox y Safari dispongan el margen de la tabla entre las celdas de la tabla y el ttulo. Para evitar que suceda esto en Firefox, podis definir el margen en tres lados de la tabla, definir explcitamente el caption-side (lado en el que aparece la caption) y despus aadir el cuarto margen en la caption. Por desgracia, en el caso de Safari, esta solucin causar error. Por lo tanto, no se trata realmente de una solucin a no ser que estis dispuestos a tolerar el error en Firefox o Safari. La nica manera de evitar un problema en Firefox y, a la vez, en Safari, es establecer un margen cero al lado de la caption. Por ejemplo, si el ttulo se encuentra en la parte superior, podis establecer el margen en el lado de la derecha, abajo y en el lado izquierdo o slo abajo. Esto puede que funcione si defins todos los mrgenes en el mismo lado de los elementos de contenido, de manera que no sea necesario que el margen cree espacios entre la tabla y el contenido adyacente.
Resumen
Ya deberais dominar las opciones de estilo bsicas para tablas. Hay ciertos lmites que imponen las inconsistencias de los navegadores, pero en general deberais poder crear tablas claras y legibles sin ningn problema. Slo debis fijaros bien en los bordes, dar al texto un poco de espacio para que pueda "respirar" e ir con cuidado con los fondos.
Preguntas de repaso
Preguntas a las que deberais poder responder: 1. Cmo se controla el espacio entre la tabla y los bordes de las celdas? 2. Qu sucede cuando table (tabla) tiene un color de fondo, las celdas th y td tienen otro color de fondo y border-collapse (superposicin de bordes) est establecido en collapse (superposicin)? 3. Cmo pueden establecerse anchos diferentes para cada columna?
Lecturas complementarias
W3C: CSS2 Tables, sobre todo el apartado que habla sobre las capas de fondo de tabla de CSS2. "A Dao of Web Design - let the web be the web". A List Apart. Un artculo clsico que explica por qu una diferencia de 1 pxel entre navegadores no es realmente importante. "Zebra Tables" y "Zebra striping: Does it Really Help?". En: A List Apart. "Zebra striping tables with CSS3" "Supporting IE with conditional comments" "A CSS styled table" y "A CSS styled calendar". En: Veerle's blog
"CSS Table Gallery" muestra una serie de diseos para tablas (aunque hay que tener en cuenta que muchas no cumplen las recomendaciones de contraste de color del W3C)