2012-06-04 11 views
39

Chciałbym, żeby HTML mógł zrobić coś semantycznie równoważnego;Czy istnieje poprawny sposób na zawijanie pliku dt i dd za pomocą elementu HTML?

<dl class="main-list"> 
    <definitionitem> 
     <dt>Some Thing</dt> 
      <dd>You know it!</dd> 
     <dt>Another Thing</dt> 
      <dd>Word.</dd> 
    </definitionitem> 
    <definitionitem> 
     <dt>Stuff</dt> 
      <dd>Alright!</dd> 
    </definitionitem> 
</dl> 

Jednak, ponieważ najbliższy mi przybyłem, nie jestem w 100% zadowolony z semantyki;

<div class="redundant-wrapper"> 
    <dl class="main-list"> 
     <dt>Some Thing</dt> 
      <dd>You know it!</dd> 
     <dt>Another Thing</dt> 
      <dd>Word.</dd> 
    </dl> 
    <dl class="another-main-list"> 
     <dt>Stuff!</dt> 
      <dd>Alright!</dd> 
    </dl> 
</div> 

Zastanawiałem się, czy ktoś ma jakieś inne pomysły, w jaki sposób można to zrobić?

Powodem pogrupowania elementów jest również wizualne zgrupowanie w treści, która jest zaznaczona. Wyobraź sobie stronę ze słownikiem, z jedną listą definicji, w której każda definicja znajduje się w polu wstawionym, które jest przesunięte w lewo. Wpadam w tę sytuację przez cały czas.

+7

Nie ma "syntaktycznie poprawnego" lub nawet "ważnego w ogóle" sposobu na zawarcie razem 'dt' i' dd'; * jedynymi ważnymi * dziećmi 'dl' są' dt' i 'dd'. –

+0

Rozumiem, że to nie jest prawidłowe. Zastanawiam się, jak ludzie będą semantycznie grupować jedną parę dt/dd jako jeden "element definicji", ponieważ semantycznie można argumentować, że definicja jest semantycznym dzieckiem "listy definicji", sama w sobie posiadanie dzieci dt/dd. –

+2

@JosiahSprague - Po elemencie '

' wstawiono element '
' i przed innymi elementami '
'. – Quentin

Odpowiedz

54

Nie, Ian Hickson (HTML Spec editor) jest convinced że jest to problem CSS, HTML nie jest jeden:

To nie powinno być konieczne. To ograniczenie CSS.

Właściwym rozwiązaniem jest dostarczenie przez CSS pseudoelementu lub innego mechanizmu , który wprowadza anonimowy kontener do drzewa renderowania , które otacza elementy, które chcesz zawinąć.

Jednocześnie, fantasai (CSS Spec editor) jest przekonany w contrary:

Nie sądzę, jest to problem CSS. Myślę, że to problem HTML. Pseudoelementy są nietrywialną rzeczą do spec i nietrywialną rzeczą, którą można zaimplementować, i stosunkowo mylącą rzeczą do użycia.

Niemniej jednak Ian najwyraźniej ignoruje to i nadal jest oderwany od rzeczywistości.

Są to te same problemy z LEGEND (które muszą być pierwszym bezpośrednim dzieckiem FIELDSET według HTML SPEC), FIGCAPTION (który musi być pierwszy/ostatni bezpośredni dzieckiem FIGURE) i LI (bezpośredni dzieckiem UL/OL).

chodzi o DT/DD w szczególności Osobiście korzystam UL listy z DL wewnątrz każdego z LI:

<ul> 
    <li><dl> 
     <dt>Lorem</dt> 
     <dd>Lorem definition</dd> 
    </dl></li> 

    <li><dl> 
     <dt>Ipsum</dt> 
     <dd>Ipsum definition</dd> 
    </dl></li> 
</ul> 

Więc mamy DL aby relacja między DT i DD i UL liście, aby je wszystkie należą do jednej listy.

Update (14.11.2016) standardowego HTML (WHATWG version teraz) obecnie (od 2016-10-31) allows, element DIV (ewentualnie zmieszany z tak zwanych skryptach elementów podtrzymujących SCRIPT, TEMPLATE) być bezpośrednimi dziećmi elementów DL.W3C: HTML validator ma nie konta za tę zmianę jeszcze, ale eksperymentalny HTML5.org validator robi.

Aktualizacja (18.01.2017): Okazuje się, że specyfikacja nie not pozwalają więcej niż jeden zagnieżdżony DIV otoki dla DT/DD, więc użyteczność funkcji w praktyce jest rzeczywiście bardzo ograniczony, a ULLIDL podejście opisane tutaj jest nadal aktualne.

+3

Uwielbiam ten pomysł. Nie jest to doskonały semantycznie, ale jak powiedziałeś, specyfikacja nie pozwala na to. To najbardziej semantyczny pomysł, jaki do tej pory słyszałem. Dzięki za twoje myśli! –

+1

Specyfikacja HTML została zmieniona i zezwala na 'div' w' dl'. https://html.spec.whatwg.org/multipage/semantics.html#the-dl-element – zcorpan

+0

@zcorpan Wow, dzięki, Simon. To rodzaj zmiany paradygmatu w świecie HTML. Szkoda, że ​​zmiana jest bardzo wąska i dotyczy wyłącznie grupowania elementów "DT"/"DD", podczas gdy pojemniki generyczne są wciąż _nie_ dozwolone _wystąpienie_ - np. do owijania "LEGENDA" i "FIGURKI". Wolałbym jednak, aby to zostało rozwiązane po stronie CSS, ponieważ pozwoliłoby to na różne zestawy zgrupowanych elementów, np. w zapytaniach o media, ale posiadanie tego przynajmniej w HTML i przynajmniej dla 'DT' /' DD' jest w każdym razie lepsze niż nic. –

Powiązane problemy