2012-06-04 49 views
39

Tôi muốn HTML có thể làm điều gì đó về mặt ngữ nghĩa tương đương với điều này;Có cách nào hợp lệ để bao gồm dt và dd với phần tử HTML không?

<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> 

Tuy nhiên, vì gần nhất tôi đến là điều tôi không hài lòng 100% với ngữ nghĩa;

<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> 

Tôi đã tự hỏi liệu có ai có ý tưởng nào khác về cách bạn có thể thực hiện việc này không?

Ngoài ra, lý do các mục sẽ được nhóm là vì chúng được nhóm trực quan trong nội dung đang được đánh dấu. Hãy tưởng tượng một trang từ điển, với một danh sách định nghĩa duy nhất, trong đó mỗi định nghĩa nằm trong một hộp inset được làm nổi bên trái. Tôi luôn gặp phải tình huống này.

+7

Không có 'cú pháp hợp lệ' hoặc thậm chí 'hợp lệ ở tất cả' cách để bao bọc 'dt' và' dd' với nhau; * chỉ hợp lệ * con của 'dl' là' dt' và 'dd'. –

+0

Tôi hiểu rằng nó không hợp lệ. Điều mà tôi tự hỏi là làm thế nào mọi người sẽ nhóm lại với nhau một cặp dt/dd đơn lẻ như một "mục định nghĩa", vì ngữ nghĩa, bạn có thể tạo ra một tham số rằng định nghĩa là một con ngữ nghĩa của một "danh sách định nghĩa" có con dt/dd. –

+2

@JosiahSprague - Bạn sẽ đặt phần tử '

' sau phần tử '
' và trước bất kỳ phần tử '
' nào khác. – Quentin

Trả lời

54

Không, Ian Hickson (biên tập đặc tả HTML) là convinced rằng đây là một vấn đề CSS, HTML không phải là một ai:

này không cần thiết. Đó là một hạn chế của CSS.

Giải pháp đúng là để CSS cung cấp một số phần tử giả hoặc cơ chế giới thiệu một vùng chứa ẩn danh vào kết xuất các hình ảnh mà bạn muốn bọc.

Đồng thời, fantasai (CSS editor spec) được thuyết phục trong contrary:

Tôi không nghĩ rằng đây là một vấn đề CSS. Tôi nghĩ rằng đó là một vấn đề HTML. Các phần tử giả là một điều không quan trọng đối với thông số kỹ thuật và một điều không quan trọng cần thực hiện và một điều tương đối khó hiểu để sử dụng.

Tuy nhiên, Ian rõ ràng bỏ qua điều đó và tiếp tục tách rời khỏi thực tế.

Có cùng vấn đề với LEGEND (mà phải là con trực tiếp đầu tiên của FIELDSET theo HTML spec), FIGCAPTION (mà phải là người đầu tiên/cuối cùng con trực tiếp của FIGURE), và LI (con trực tiếp của UL/OL).

Đối với DT/DD nói riêng, cá nhân tôi sử dụng danh sách UL với DL bên trong mỗi người 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> 

Vì vậy, chúng tôi có DL để làm cho mối quan hệ giữa DTDD, và UL danh sách việc cần làm cho họ tất cả thuộc về một danh sách.

Cập nhật (2016/11/14): Tiêu chuẩn HTML (WHATWG version cho bây giờ) bây giờ (kể từ 2016/10/31) allows yếu tố DIV (tùy chọn trộn lẫn với cái gọi là yếu tố kịch bản hỗ trợ SCRIPT, TEMPLATE) là con trực tiếp của các yếu tố DL.Số điện thoại HTML validator của W3C hiện không không tài khoản cho thay đổi này, nhưng thử nghiệm HTML5.org validator sẽ thực hiện.

Cập nhật (2017/01/18): Hóa ra spec không not cho phép nhiều hơn một lồng nhau DIV wrapper cho DT/DD, vì vậy tính hữu dụng của tính năng trong thực tế thực sự là rất hạn chế và ULLI → Cách tiếp cận DL được mô tả ở đây vẫn có liên quan.

+3

Tôi thích ý tưởng này. Nó không hoàn hảo về mặt ngữ nghĩa, nhưng như bạn đã nói, spec không thực sự cho phép điều đó. Đây là ý tưởng ngữ nghĩa nhất mà tôi đã nghe cho đến nay. Cảm ơn những suy nghĩ của bạn! –

+1

Thông số HTML hiện đã thay đổi và cho phép 'div' trong' dl'. https://html.spec.whatwg.org/multipage/semantics.html#the-dl-element – zcorpan

+0

@zcorpan Wow, cảm ơn, Simon. Đó là một sự thay đổi mô hình trong thế giới HTML. Quá xấu thay đổi rất hẹp và chỉ duy nhất về việc nhóm các phần tử 'DT' /' DD', trong khi các vùng chứa chung vẫn được _not_ cho phép _everywhere_ - ví dụ: để gói 'LEGEND' và' FIGCAPTION'. Mặc dù vậy, tôi muốn điều này được giải quyết trên CSS, vì điều đó sẽ cho phép có các nhóm phần tử được nhóm khác nhau, ví dụ: trên các truy vấn phương tiện truyền thông, nhưng có ít nhất trong HTML và ít nhất là cho 'DT' /' DD' thì tốt hơn là không có gì. –

Các vấn đề liên quan