Model tabeli CSS jest oparty na modelu tabeli HTML
http://www.w3.org/TR/CSS21/tables.html
Tabela jest podzielona na WIERSZE, a każdy wiersz zawiera jedną lub więcej komórek. Komórki są elementami podrzędnymi ROWS, NIGDY nie są elementami podrzędnymi kolumn.
"display: table-column" NIE zapewnia mechanizmu tworzenia układów kolumnowych (np. stron gazet z wieloma kolumnami, gdzie treść może przepływać z jednej kolumny do następnej).
Zamiast tego „tabela-kolumna” TYLKO ustawia atrybuty, które mają zastosowanie do odpowiednich komórek w wierszach tabeli. Można na przykład opisać „Kolor tła pierwszej komórki w każdym wierszu jest zielony”.
Sama tabela ma zawsze taką samą strukturę jak w HTML.
W HTML (zwróć uwagę, że „td” znajdują się wewnątrz „tr”, NIE wewnątrz „col”):
<table ..>
<col .. />
<col .. />
<tr ..>
<td ..></td>
<td ..></td>
</tr>
<tr ..>
<td ..></td>
<td ..></td>
</tr>
</table>
Odpowiedni kod HTML wykorzystujący właściwości tabeli CSS (zwróć uwagę, że elementy div „column” nie zawierają żadnej treści - standard nie zezwala na zawartość bezpośrednio w kolumnach):
.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>
OPCJONALNIE : można nadać styl zarówno „wierszom”, jak i „kolumnom”, przypisując wiele klas do każdego wiersza i komórki w następujący sposób. Takie podejście zapewnia maksymalną elastyczność w określaniu różnych zestawów komórek lub pojedynczych komórek, które mają być stylizowane:
//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>
W dzisiejszych elastycznych projektach, które są używane <div>
do wielu celów, rozsądnie jest umieścić pewną klasę dla każdego elementu DIV, aby pomóc się do niego odnieść. Tutaj to, co było <tr>
w HTML, stało się class myrow
i <td>
stało się class mycell
. To właśnie ta konwencja sprawia, że powyższe selektory CSS są przydatne.
WSKAZÓWKA DOTYCZĄCA WYDAJNOŚCI : umieszczenie nazw klas w każdej komórce i użycie powyższych selektorów wieloklasowych zapewnia lepszą wydajność niż użycie selektorów kończących się na *
, takich jak .row1 *
lub nawet .row1 > *
. Powodem jest to, że selektory są dopasowywane jako pierwsze , więc gdy szukane są pasujące elementy, .row1 *
najpierw robi to *
, co dopasowuje wszystkie elementy, a następnie sprawdza wszystkich przodków każdego elementu , aby sprawdzić, czy któryś z przodków ma class row1
. Może to być powolne w przypadku złożonego dokumentu na wolnym urządzeniu. .row1 > *
jest lepsze, ponieważ badany jest tylko bezpośredni rodzic. Ale o wiele lepiej jest natychmiastowo wyeliminować większość elementów za pomocą .row1 .cell1
. (.row1 > .cell1
jest jeszcze ściślejszą specyfikacją, ale to pierwszy krok wyszukiwania robi największą różnicę, więc zwykle nie jest warta bałaganu i dodatkowego procesu myślowego, czy zawsze będzie to bezpośrednie dziecko, dodając selektor dziecka >
).
Kluczową kwestią do usunięcia ponownej wydajności jest to, że ostatnia pozycja w selektorze powinna być jak najbardziej szczegółowa i nigdy nie powinna *
.
<col style="color: red;" >
nie jest praca, ale<col style="background-color: red;" >
jest ok! co w tym złego?<col style="color: red !important;">
. Jeśli to zadziała, to jest problem. Jednak nie nabieraj nawyku nadużywania!important
. Po obejrzeniu tej pracy najlepiej ją usunąć i znaleźć bardziej szczegółowy selektor, który ma mieć pierwszeństwo. google „css more specific selector” lub zobacz smashingmagazine.com/2007/07/…Typ wyświetlania „tabela-kolumna” oznacza, że zachowuje się jak
<col>
znacznik w HTML - tj. Niewidoczny element, którego szerokość * decyduje o szerokości odpowiedniej fizycznej kolumny otaczającej tabeli.Więcej informacji o modelu tabeli CSS można znaleźć w standardzie W3C .
* I kilka innych właściwości, takich jak obramowania, tła.
źródło
col
element ma strukturę logiczną, co ma, to jak można uzasadnić użycie reguły CSSdisplay: table-column;
, która ma tylko strukturę prezentacyjną? Zgodnie ze specyfikacjądisplay
( w3.org/wiki/CSS/Properties/display ) ma on „zachowywać się” jakcol
element. Ale nie rozumiem, jak to jest przydatne ...<col>
tagu lub równoważnego tagu w innym języku znaczników opartym na XML.col
jest elementem logicznym , który zawiera tylko styl prezentacji . Nie możesz w nim umieścić kolumny informacji - to częste nieporozumienie. Dane tabeli są zawsze w wierszach.display: table-column;
konwertuje element logiczny (zwykle adiv
) na plikcol
. Powoduje to, że inne pola stylu przypisane do tego elementu mają zastosowanie do koncepcji prezentacji „kolumna”. Rezultatem jest element logiczny, który nie jest wyświetlany i którego zawartość, jeśli istnieje, jest ignorowana; jego jedynym efektem jest nadanie stylu „kolumnom” powiązanej prezentacji. Zobacz moją odpowiedź na szablon.