Cześć, minęło trochę czasu odkąd o coś zapytałem, to jest coś, co mnie od jakiegoś czasu niepokoi, samo pytanie jest w tytule:
Jaki jest Twój preferowany sposób pisania tabel HTML z pionowymi nagłówkami?
Przez nagłówek pionowy rozumiem, że tabela ma nagłówek (<th>
tag ) po lewej stronie (ogólnie)
Nagłówek 1 Dane Dane Dane
nagłówka 2 Dane Dane Dane
nagłówka 3 Dane Dane Dane
Wyglądają tak, do tej pory wymyśliłem dwie opcje
Pierwsza opcja
<table id="vertical-1">
<caption>First Way</caption>
<tr>
<th>Header 1</th>
<td>data</td><td>data</td><td>data</td>
</tr>
<tr>
<th>Header 2</th>
<td>data</td><td>data</td><td>data</td>
</tr>
<tr>
<th>Header 2</th>
<td>data</td><td>data</td><td>data</td>
</tr>
</table>
Główną zaletą tego sposobu jest to, że masz prawo nagłówki (faktycznie lewej) obok danych, które reprezentuje, co mi się nie podoba, że jednak jest <thead>
,<tbody>
i <tfoot>
znaczniki brakuje, i nie ma sposobu, aby włączyć je bez zerwania ładnie ułożone razem elementy, które doprowadziły mnie do drugiej opcji.
Druga opcja
<style type="text/css">
#vertical-2 thead,#vertical-2 tbody{
display:inline-block;
}
</style>
<table id="vertical-2">
<caption>Second Way</caption>
<thead>
<tr>
<th colspan="3">Header 1</th>
</tr>
<tr>
<th colspan="3">Header 2</th>
</tr>
<tr>
<th colspan="3">Header 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>row 1</td>
<td>row 1</td>
<td>row 1</td>
</tr>
<tr>
<td>data</td>
<td>data</td>
<td>data</td>
</tr>
<tr>
<td>data</td>
<td>data</td>
<td>data</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="4">Footer</td>
</tr>
</tfoot>
</table>
Główną zaletą jest to, że masz w pełni opisowego tabeli html, wady są, że właściwa reprezentacja potrzebuje trochę CSS dla tbody
i thead
znaczników i że relacja między nagłówkami i danych nie jest jasne, jak miałem wątpliwości przy tworzeniu znaczniki.
Tak więc oba sposoby renderują tabelę tak, jak powinna, tutaj kwestia:
Z nagłówkami po lewej lub prawej stronie, jeśli wolisz, więc masz jakieś sugestie, alternatywy, problemy z przeglądarką?
źródło
scope
atrybut nie miałby w tym przypadku większego znaczenia. Jeśli przeczytasz, do czego to służy, zrozumiesz. Zasadniczo oznacza to, że ta kolumna jest nagłówkiem wiersza lub kolumny, którą zawiera. Problemem jest jego stosowanie nie ma sensu, chyba że jeśli było wymienić<th>
z<td scope="row">
.Pierwsza opcja ... myślę, że jest to lepsze i prostsze podejście.
źródło
Szczerze, opcja 1. Proponuję spojrzeć na ten przykład z W3.org (link poniżej). Myślę, że ta metoda jest najlepsza, ponieważ w ten sposób Twoje nagłówki będą również interpretowane bezpośrednio na czytnikach ekranu.
https://www.w3.org/WAI/tutorials/tables/one-header/#table-with-header-cells-in-the-first-column-only
źródło
Jeśli chcesz pokazać element sterujący powiązany z danymi (jak repeater ASP) w tabeli, pierwsza opcja nie będzie możliwa. Drugiej opcji można użyć w następujący sposób.
<asp:Repeater ID="hours" runat="server"> <HeaderTemplate> <table id="vertical-table"> <thead> <tr><th colspan="0">hours:</th></tr> <tr><th colspan="1">Monday</th></tr> <tr><th colspan="1">Tuesday</th></tr> <tr><th colspan="1">Wednesday</th></tr> <tr><th colspan="1">Thursday</th></tr> <tr><th colspan="1">Friday</th></tr> <tr><th colspan="1">Saturday</th></tr> <tr><th colspan="1">Sunday</th></tr> </thead> <tbody> </HeaderTemplate> <ItemTemplate> <tr><td><%# Container.DataItem %></td></tr> </ItemTemplate> <FooterTemplate> </tbody> </table> </FooterTemplate> </asp:Repeater>
źródło
div.vertical { margin-left: -85px; position: absolute; width: 215px; transform: rotate(-90deg); -webkit-transform: rotate(-90deg); /* Safari/Chrome */ -moz-transform: rotate(-90deg); /* Firefox */ -o-transform: rotate(-90deg); /* Opera */ -ms-transform: rotate(-90deg); /* IE 9 */ } th.vertical { height: 220px; line-height: 14px; padding-bottom: 20px; text-align: left; }
<table> <thead> <tr> <th class="vertical"> <div class="vertical">Really long and complex title 1</div> </th> <th class="vertical"> <div class="vertical">Really long and complex title 2</div> </th> <th class="vertical"> <div class="vertical">Really long and complex title 3</div> </th> </tr> </thead> <tbody> <tr> <td>Example</td> <td>a, b, c</td> <td>1, 2, 3</td> </tr> </tbody> </table>
źródło