Làm thế nào để thêm tiêu đề vào danh sách


120

Điều này đã làm phiền tôi trong một thời gian và tôi tự hỏi liệu có sự đồng thuận nào về cách làm điều này đúng cách không. Khi tôi đang sử dụng danh sách HTML, làm thế nào để tôi bao gồm một tiêu đề cho danh sách?

Một lựa chọn là:

<h3>Fruits I Like:</h3>
<ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

nhưng về mặt ngữ nghĩa, <h3>tiêu đề không được liên kết rõ ràng với<ul>

Một lựa chọn khác là:

<ul>
    <li><h3>Fruits I Like:</h3></li>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

nhưng điều này có vẻ hơi bẩn, vì tiêu đề không thực sự là một trong những mục danh sách.

Tùy chọn này không được W3C cho phép:

<ul>
    <h3>Fruits I Like:</h3>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

như <ul>'s chỉ có thể chứa một hoặc nhiều <li>' s

"Danh sách tiêu đề" cũ <lh>có ý nghĩa nhất

<ul>
    <lh>Fruits I Like:</lh>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

nhưng tất nhiên nó không phải là một phần chính thức của HTML

Tôi đã nghe nó gợi ý rằng chúng tôi sử dụng <label>giống như một hình thức:

<ul>
    <label>Fruits I Like:</label>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
</ul>

nhưng điều này hơi lạ và dù sao cũng sẽ không xác nhận.

Thật dễ dàng để thấy các vấn đề ngữ nghĩa khi cố gắng tạo kiểu cho các tiêu đề danh sách của tôi, nơi cuối cùng tôi cần đặt <h3>các thẻ của mình trong đầu tiên <li>và nhắm mục tiêu chúng để tạo kiểu với một cái gì đó như:

ul li:first-of-type {
    list-style: none;
    margin-left: -1em;
    /*some other header styles*/
}

kinh hoàng! Nhưng ít nhất theo cách này tôi có thể kiểm soát toàn bộ <ul>, tiêu đề và tất cả, bằng cách tạo kiểu cho ulthẻ.

cách chính xác để làm điều này là gì? Có ý kiến ​​gì không?


5
Một số người đang sử dụng LH, nhưng có thể không nhận ra rằng họ không thực sự sử dụng thẻ HTML "thực" mà chỉ tạo một tên thẻ ngẫu nhiên. Các trình duyệt coi một thẻ như là một yếu tố nội tuyến. Một số sẽ cho phép bạn đặt một lớp và css trên đó.
Glen Little

1
Bản sao có thể có của stackoverflow.com/questions/2417891/
Mạnh

Câu trả lời:


81

Như Felipe Alsacreations đã nói, lựa chọn đầu tiên là ổn.

Nếu bạn muốn đảm bảo rằng không có gì bên dưới danh sách được hiểu là thuộc về tiêu đề, đó chính xác là những gì các yếu tố nội dung của phần HTML5 dành cho. Vì vậy, ví dụ bạn có thể làm

<h2>About Fruits</h2>
<section>
  <h3>Fruits I Like:</h3>
  <ul>
    <li>Apples</li>
    <li>Bananas</li>
    <li>Oranges</li>
  </ul>
</section>
<!-- anything here is part of the "About Fruits" section but does not 
     belong to the "Fruits I Like" section. -->

6
Điều này rất có ý nghĩa; cảm ơn. Tất nhiên, nếu chúng ta sẽ sử dụng HTML5, tiêu đề sẽ <h1>nằm trong <section>tiêu đề cấp cao nhất trong các thẻ đó.
Tomas Mulder

6
Bạn có thể sử dụng <h1>ở đó, chắc chắn. Nhưng <h3>cũng ổn thôi. Miễn là bạn không sử dụng tiêu đề cấp cao hơn trong cùng một phần.
Alohci

4
Chúng ta nên bám sát các tiêu đề h1..h6 (ở đây là h2 và h3) miễn là các trình duyệt, trình đọc màn hình và các công nghệ trợ giúp khác không phác thảo các tiêu đề chính xác như đã nêu trong HTML5 (xem mã hóa.smashingmagazine.com/2011/08/16/ Liên - tìm kiếm "lông mày" ...). Tôi không chắc nó đã phát triển bao nhiêu trong một vài tháng, nhưng có lẽ không nhanh như vậy đối với API khả năng truy cập của các trình duyệt: /
FelipeAls

3
@davidjb - hãy cẩn thận, đó không chính xác là những gì lời khuyên đó nói. Nó nói rằng h1-h6 nên được sử dụng để cung cấp các cấp tiêu đề. tức là các phần tử h1 chỉ nên được sử dụng cho mức tiêu đề cao nhất trên trang. Nó không nói rằng chỉ có thể có một tiêu đề ở cấp cao nhất đó. Ngẫu nhiên, các nhà sản xuất trình duyệt đã nói rõ rằng họ không có ý định thực hiện thuật toán phác thảo, vì vậy có rất ít hy vọng tình hình sẽ được cải thiện nhanh chóng.
Alohci

2
@Michele - Điều đó phụ thuộc vào việc bạn có nghĩa là trực quan ở giữa, hay về mặt ngữ nghĩa ở giữa. Nếu trực quan, thì đó là một vấn đề đối với CSS để sắp xếp và lý tưởng nhất là sẽ không thay đổi cách đánh dấu của bạn. Nếu về mặt ngữ nghĩa, thì tôi không chắc bạn đã có loại danh sách nào. Có thể bạn có hai danh sách chứ không phải một.
Alohci

53

Trong trường hợp này tôi sẽ sử dụng một danh sách định nghĩa như sau:

<dl>
  <dt>Fruits I like:</dt>
  <dd>Apples</dd>
  <dd>Bananas</dd>
  <dd>Oranges</dd>
</dl>

5
Đối với một danh sách không sắp xếp các thứ được mô tả bởi một nhãn, như ví dụ trên, tôi nghĩ rằng đây là sự lựa chọn tốt nhất. Các ngữ nghĩa khớp chính xác: Đây là một thuật ngữ hoặc nhãn (Trái cây tôi thích) và đây là các mặt hàng tương ứng với nhãn đó (mỗi loại trái cây).
Andrew

1
Đó thực sự là một danh sách mô tả . Đây là giải pháp tốt nhất imo.
Derek 朕 會

display: list-item ... CSS để hiển thị các viên đạn. Câu trả lời tốt.
Mycah

9

Lựa chọn đầu tiên của bạn là một lựa chọn tốt. Đây là vấn đề ít rắc rối nhất và bạn đã tìm thấy những lý do chính xác tại sao bạn không thể sử dụng các tùy chọn khác.

Nhân tiện, tiêu đề của bạn được liên kết rõ ràng với <ul>: nó ở ngay trước danh sách! ;)

chỉnh sửa: Steve Faulkner, một trong những biên tập viên của W3C HTML5 và 5.1 đã phác thảo một định nghĩa về một ltyếu tố . Đó là một dự thảo không chính thức mà anh ấy sẽ thảo luận cho HTML 5.2, chưa có gì nữa.


1
Tôi đồng ý, các giải pháp khác hoàn toàn không có ý nghĩa

Đúng, giống như sử dụng một tiêu đề trên a <p>. Nhưng tôi vẫn muốn một cái gì đó rõ ràng hơn một chút, một cái gì đó giống như forthuộc tính cho <label>' or the <th> `cho các bảng. Tôi nghĩ rằng <lh>tùy chọn này sẽ có ý nghĩa nhất nếu được W3C thực sự hỗ trợ.
Tomas Mulder

5

a <div> là một phân chia hợp lý trong nội dung của bạn, về mặt ngữ nghĩa, đây sẽ là lựa chọn đầu tiên của tôi nếu tôi muốn nhóm tiêu đề với danh sách:

<div class="mydiv">
    <h3>The heading</h3>
    <ul>
       <li>item</li>
       <li>item</li>
       <li>item</li>
    </ul>
</div>

sau đó bạn có thể sử dụng css sau để tạo kiểu mọi thứ với nhau như một đơn vị

.mydiv{}
.mydiv h3{}
.mydiv ul{}
.mydiv ul li{}
etc...

Lựa chọn tốt, ít nhất là cho mục đích tạo kiểu.
Tomas Mulder

Nói ngữ nghĩa có nghĩa là không có gì, tôi không hiểu tại sao nó sẽ là lựa chọn đầu tiên của bạn (ngoài vấn đề về kiểu dáng)? : x
Rambobafet

@Rambobafet, cần thiết tuyệt vời! Câu trả lời đó là từ năm 2012, trước khi html5 giới thiệu các phần và các tùy chọn chính xác hơn về mặt ngữ nghĩa. Một số trình duyệt đã hỗ trợ phần này, nhưng một số thì không. "div" là viết tắt của "phân chia logic" trong nội dung của bạn, vì vậy tại thời điểm đó là cách tốt nhất để phân chia nội dung của bạn để tạo kiểu.
Evert

Bạn hoàn toàn đúng, đã không thấy phần "'12" :)
Rambobafet


0

Hãy thử định nghĩa một lớp mới, ulheader, trong css. p.ulheader ~ ul chọn tất cả những gì ngay sau Tiêu đề của tôi

p.ulheader ~ ul {
   margin-top:0;
{
p.ulheader {
   margin-bottom;0;
}

-2

Theo w3.org (lưu ý rằng liên kết này nằm trong bản dự thảo HTML 3.0 đã hết hạn sử dụng ):

Một danh sách không có thứ tự thường là một danh sách các mục có dấu đầu dòng. HTML 3.0 cung cấp cho bạn khả năng tùy chỉnh các viên đạn, làm mà không cần đạn và bọc các mục danh sách theo chiều ngang hoặc chiều dọc cho danh sách nhiều màu.

Thẻ danh sách mở phải là <UL>. Nó được theo sau bởi một tiêu đề danh sách tùy chọn ( <LH>chú thích </LH>) và sau đó là mục danh sách đầu tiên ( <LI>). Ví dụ:

<UL>
  <LH>Table Fruit</LH>
  <LI>apples
  <LI>oranges
  <LI>bananas
</UL>

có thể được hiển thị là:

Trái cây để bàn

  • táo
  • những quả cam
  • chuối

Lưu ý: Một số tài liệu cũ có thể bao gồm các tiêu đề hoặc văn bản thuần túy trước phần tử LI đầu tiên. Những người triển khai các tác nhân người dùng HTML 3.0 được khuyên nên phục vụ cho khả năng này để xử lý các tài liệu kế thừa được hình thành xấu.


8
Bỏ phiếu vì liên kết "theo" này chỉ ra bản phác thảo 3.0 từ năm 1995, mà không bao giờ được đưa ra khỏi dự thảo. Thẻ "lh" không bao giờ biến nó thành một đặc tả HTML không dự thảo.
Brooks Moses

HTML 3.0Whoa đó là một tài liệu thực sự cũ.
Derek 朕 會

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.