2012-10-09 7 views
19

Edytuj: Wybrana odpowiedź zawiera łącze do działającego skrzypka, które udało mi się skomponować bez użycia tabeli zagnieżdżonej.Jak semantycznie zakodować tabelę zagnieżdżoną HTML, która wyrównuje (i kojarzy) z nagłówkami tabeli nadrzędnej

Chcę semantycznie kodować tabelę w HTML z układem podobnym do poniższego obrazka. Niestety nie udało mi się znaleźć czegoś podobnego tutaj w sieci.

enter image description here

byłem w stanie zmusić wygląd poprzez ręczne ustawienie szerokości komórki, ale chcę, aby upewnić się, że kod mam produkcji ma sens, i nie sądzę, że to przypadek, bo bez ręcznie ustawiając szerokość, standardowe renderowanie wygląda bardziej jak na poniższym obrazku.

enter image description here

Dotychczas problematyczny kod mam wymyślić wygląda następująco:

<table> 
    <thead> 
    <tr> 
     <th scope="col">Type of Loss Dollar</th> 
     <th scope="col">Reserve Amount</th> 
     <th scope="col">Paid Amount</th> 
     <th scope="col">Total This Loss</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td colspan="3"> 
     <table> 
      <tbody> 
      <tr> 
       <th scope="row">Medical</th> 
       <td><input type="text" /></td> 
       <td><input type="text" /></td> 
      </tr><tr> 
       <th scope="row">Indemnity</th> 
       <td><input type="text" /></td> 
       <td><input type="text" /></td> 
      </tr><tr> 
       <th scope="row">Expense</th> 
       <td><input type="text" /></td> 
       <td><input type="text" /></td> 
      </tr> 
      </tbody> 
     </table> 
     </td><td> 
     TOTAL 
     </td> 
    </tr> 
    </tbody> 
</table> 
+1

Nie stosować tabelę w tabeli. Użyj tabeli * jeden *. Problem rozwiązany. – deceze

+1

Gdy zdjęcia będą dostępne, problem stanie się wyraźniejszy. Ponownie przepraszam za opóźnienie. –

+0

Odpowiedź łatwa na html, ciężko na serverze:/ – Jonathan

Odpowiedz

14

Bez obrazy to trochę trudno powiedzieć, ale myślę, że lepszym rozwiązaniem niż tabel zagnieżdżonych byłoby po prostu użyć atrybutów colspan i rowspan.

Edytuj: Widząc obrazy, które powiedziałbym, że możesz zdecydowanie osiągnąć to używając rowspan (i colspan w sposób, w jaki już go używasz).

Nie trzeba również ustawiać atrybutu scope, jeśli jest to "col". Domyślnie jest to "col".

Edytuj: Jak zauważa Marat Tanalin, domyślną wartością atrybutu scope jest auto, co "powoduje, że komórka nagłówka ma zastosowanie do zestawu komórek wybranych na podstawie kontekstu". I które z mojego doświadczenia działa dokładnie tak samo, jak ustawienie "col" (dla screenreaderów).

Edycja: Oto dwa wielkie artykułów na oznaczaniu zaawansowanych tabel: http://www.456bereastreet.com/archive/200910/use_the_th_element_to_specify_row_and_column_headers_in_data_tables/ & http://www.456bereastreet.com/archive/200410/bring_on_the_tables/

EDIT: Here is the fiddle wykazujących pożądane zachowanie (wizualnie przynajmniej) oraz kod źródłowy tej skrzypce następująco:

<table border="1"> 
    <thead> 
    <tr> 
     <th>Status</th> 
     <th>Type of Loss Dollar</th> 
     <th>Reserve Amount</th> 
     <th>Paid Amount</th> 
     <th>Total This Loss</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td rowspan="3">Open</td> 
     <td>Medical</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
     <td rowspan="3">TOTAL</td> 
    </tr><tr> 
     <td>Indemnity</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr><tr> 
     <td>Expense</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr> 
    </tbody> 
</table> 
+0

Tak, nie byłem zbyt zainteresowany zagnieżdżaniem ich, ale nie mogłem wymyślić innego rozwiązania. Być może moje rozumienie "colspan" i "rowspan" jest niewystarczające. Dzięki za wskazówkę dotyczącą zakresu. –

+0

Znowu będzie łatwiej z obrazkami, ale wierzę, że możesz osiągnąć to, czego używasz po 'rowspan' i' colspan'. Nie jestem nawet pewien, czy tabele zagnieżdżania są zawsze semantycznie poprawne, czy czytnik ekranu kojarzy twoje 'th's z zagnieżdżonymi' table's 'td's? Nie jestem tego taki pewien. – powerbuoy

+0

Ok obrazy są na górze, i zdecydowanie powiedziałbym, że można rozwiązać to za pomocą 'rowspan'.Zrobiłbym skrzypce, ale nie mam teraz czasu, a tbh nie używałem "rowspan" od czasów układów tabel: P – powerbuoy

1

Tak, jak wszystkie powyższe sugestie, wszystko zależy od podziału na rzędy.

oto re-write Twojego kodu:

<table> 
    <thead> 
    <tr> 
     <th>Type of Loss Dollar</th> 
     <th>Reserve Amount</th> 
     <th>Paid Amount</th> 
     <th>Total This Loss</th> 
     <th>Last Heading</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td rowspan="3"></td> 
     <td>Medical</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
     <td rowspan="3">TOTAL</td> 
    </tr><tr> 
     <td>Indemnity</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr><tr> 
     <td>Expense</td> 
     <td><input type="text" /></td> 
     <td><input type="text" /></td> 
    </tr> 
    </tbody> 
</table> 
+0

Pierwszy 'td' jest niezamknięty (tak, żebyś wiedział). Dziękuję za poświęcony czas. Sądzę, że znalazłem to, czego potrzebuję w skrzypcach, do których się przyłączyłem (w odpowiedzi powerbuoy), ale jeśli masz jakieś sugestie, jak można je poprawić semantycznie, byłoby to bardzo cenne! –

+0

@EvanDriscoll rzeczywiście tak było. edytowane do naprawienia. ta! – caitriona

+1

Medycyna ma numer zamiast –

Powiązane problemy