El modelo de tabla CSS se basa en el modelo de tabla HTML
http://www.w3.org/TR/CSS21/tables.html
Una tabla se divide en FILAS y cada fila contiene una o más celdas. Las celdas son hijos de FILAS, NUNCA son hijos de columnas.
"display: table-column" NO proporciona un mecanismo para hacer diseños en columnas (por ejemplo, páginas de periódicos con múltiples columnas, donde el contenido puede fluir de una columna a la siguiente).
Más bien, "table-column" SOLO establece atributos que se aplican a las celdas correspondientes dentro de las filas de una tabla. Por ejemplo, se puede describir "El color de fondo de la primera celda de cada fila es verde".
La tabla en sí siempre está estructurada de la misma manera que en HTML.
En HTML (observe que "td" s están dentro de "tr" s, NO dentro de "col" s):
<table ..>
<col .. />
<col .. />
<tr ..>
<td ..></td>
<td ..></td>
</tr>
<tr ..>
<td ..></td>
<td ..></td>
</tr>
</table>
HTML correspondiente usando propiedades de tabla CSS (tenga en cuenta que los divs de "columna" no contienen ningún contenido; el estándar no permite contenido directamente en columnas):
.mytable {
display: table;
}
.myrow {
display: table-row;
}
.mycell {
display: table-cell;
}
.column1 {
display: table-column;
background-color: green;
}
.column2 {
display: table-column;
}
<div class="mytable">
<div class="column1"></div>
<div class="column2"></div>
<div class="myrow">
<div class="mycell">contents of first cell in row 1</div>
<div class="mycell">contents of second cell in row 1</div>
</div>
<div class="myrow">
<div class="mycell">contents of first cell in row 2</div>
<div class="mycell">contents of second cell in row 2</div>
</div>
</div>
OPCIONAL : tanto las "filas" como las "columnas" se pueden diseñar asignando varias clases a cada fila y celda de la siguiente manera. Este enfoque ofrece la máxima flexibilidad para especificar varios conjuntos de celdas, o celdas individuales, que se van a diseñar:
//Useful css declarations, depending on what you want to affect, include:
.mycell {
}
.row1 {
}
.row1 .mycell {
}
.row1 .cell1 {
}
.cell1 {
}
.mytable .row1 {
}
.mytable .row1 .mycell {
}
.mytable .row1 .cell1 {
}
.mytable .cell1 {
}
<div class="mytable">
<div class="column1"></div>
<div class="column2"></div>
<div class="myrow row1">
<div class="mycell cell1">contents of first cell in row 1</div>
<div class="mycell cell2">contents of second cell in row 1</div>
</div>
<div class="myrow row2">
<div class="mycell cell1">contents of first cell in row 2</div>
<div class="mycell cell2">contents of second cell in row 2</div>
</div>
</div>
En los diseños flexibles de hoy, que se usan <div>
para múltiples propósitos, es aconsejable poner algo de clase en cada div, para ayudar a referirse a él. Aquí, lo que solía estar <tr>
en HTML se convirtió class myrow
y se <td>
convirtió en class mycell
. Esta convención es lo que hace que los selectores CSS anteriores sean útiles.
NOTA DE RENDIMIENTO : poner nombres de clase en cada celda y usar los selectores de clases múltiples anteriores es un mejor rendimiento que usar selectores que terminan en *
, como .row1 *
o incluso .row1 > *
. La razón es que los selectores se hacen coincidir primero en último lugar , por lo que cuando se buscan elementos coincidentes, .row1 *
primero lo hace *
, lo que hace coincidir todos los elementos, y luego verifica todos los antepasados de cada elemento , para encontrar si algún antepasado tiene class row1
. Esto puede ser lento en un documento complejo en un dispositivo lento. .row1 > *
es mejor, porque solo se examina al padre inmediato. Pero es mucho mejor eliminar inmediatamente la mayoría de los elementos a través de .row1 .cell1
. (.row1 > .cell1
es una especificación aún más estricta, pero es el primer paso de la búsqueda lo que marca la mayor diferencia, por lo que generalmente no vale la pena el desorden y el proceso de pensamiento adicional sobre si siempre será un hijo directo, de agregar el selector de niños >
.)
El punto clave para eliminar el rendimiento es que el último elemento de un selector debe ser lo más específico posible y nunca debe serlo *
.
<col style="color: red;" >
No es trabajo, pero<col style="background-color: red;" >
está bien! ¿Qué pasa con esto?<col style="color: red !important;">
. Si esto funciona, entonces ese es el problema. Sin embargo , no adquiera el hábito de abusar!important
. Después de ver que funciona, es mejor eliminarlo y encontrar un selector más específico para tener prioridad. google "selector de CSS más específico", o consulte smashingmagazine.com/2007/07/…El tipo de visualización "columna-tabla" significa que actúa como la
<col>
etiqueta en HTML, es decir, un elemento invisible cuyo ancho * gobierna el ancho de la columna física correspondiente de la tabla adjunta.Consulte el estándar W3C para obtener más información sobre el modelo de tabla CSS.
* Y algunas otras propiedades como bordes, fondos.
fuente
col
elemento tiene una estructura lógica, y la tiene, ¿cómo se justifica el uso de la regla CSSdisplay: table-column;
, que solo tiene una estructura de presentación? Según las especificaciones dedisplay
( w3.org/wiki/CSS/Properties/display ), se supone que se "comporta" como uncol
elemento. Pero no veo cómo eso es útil ...<col>
etiqueta en sí, o una etiqueta equivalente en un lenguaje de marcado basado en XML diferente.col
es un elemento lógico que contiene solo estilo de presentación . No puede poner una columna de información en él; este es un malentendido común. Los datos de la tabla siempre están en filas.display: table-column;
convierte un elemento lógico (normalmente adiv
) en acol
. Hace que otros campos de estilo asignados a ese elemento se apliquen al concepto de presentación "una columna". El resultado es un elemento lógico que no se muestra y cuyo contenido, si lo hay, se ignora; su único efecto es aplicar estilo a las "columnas" de la presentación asociada. Vea mi respuesta para una plantilla.