Menu

Thẻ section trong HTML: section, article và div

Phần tử <section> nhóm nội dung cùng một chủ đề dưới tiêu đề riêng của nó. Tìm hiểu khi nào dùng <section>, khi nào <article> hoặc <div> phù hợp hơn, cách ba thẻ này lồng vào nhau, và cách một section có nhãn trở thành landmark.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Thẻ section dùng để làm gì

<section> nhóm nội dung cùng một chủ đề, và bắt đầu bằng một tiêu đề gọi tên chủ đề đó. Một trang giới thiệu sản phẩm chia thành "Features", "Pricing" và "FAQ" là ví dụ điển hình:

Mỗi section là một chương của trang, và mỗi tiêu đề là một dòng trong mục lục của trang. Giống các thẻ ngữ nghĩa khác, <section> không có định dạng mặc định; đường viền là do CSS tạo ra.

section, article và div

Ba thẻ này trông giống nhau trên màn hình. Điểm khác là những gì chúng nói về nội dung:

Phần tửÝ nghĩaCâu hỏi kiểm tra
<article>Một nội dung hoàn chỉnh, độc lậpNội dung này có còn nghĩa khi đăng riêng, trên trang khác hoặc trong một bảng tin không?
<section>Một phần theo chủ đề của một tổng thể lớn hơnNó có (hoặc cần) tiêu đề không, và có phải là một chương của thứ gì đó không?
<div>Không có ý nghĩa: một khối để định dạng hoặc dàn bố cụcNó có phải chỉ ở đó để phục vụ CSS hoặc JavaScript không?

Bài blog, bình luận trên diễn đàn, bản tin và thẻ sản phẩm là article. "Features", "Chương 2" và "Sản phẩm liên quan" là section. Một hàng flex xếp ba thẻ thẳng hàng là div.

Article bên trong section

Hai thẻ này lồng nhau theo cả hai chiều. Ở đây, section "Latest posts" chứa nhiều article độc lập:

Hãy để ý <div class="grid">: nó chỉ có mặt để xếp các thẻ thành một hàng, nên div là thẻ đúng cho nó. Mỗi thẻ là một article vì mỗi bài viết tự đứng được một mình.

Section bên trong article

Một bài viết dài có thể chia thành các section, giống như các chương trong một cuốn sách. Cấp tiêu đề nối tiếp từ tiêu đề của chính article:

Khung màu xanh dương là article (toàn bộ bài hướng dẫn), các thanh màu xanh lá là các section của nó. Cho section cấp tiêu đề riêng: một article dùng h2 sẽ chứa các section dùng h3.

Section có tên trở thành landmark

Trình đọc màn hình liệt kê một số phần tử là landmark để người dùng nhảy qua lại. Một <section> chỉ trở thành landmark region khi có tên truy cập (accessible name). Hãy trỏ aria-labelledby tới tiêu đề của nó:

<section aria-labelledby="pricing-title">
  <h2 id="pricing-title">Pricing</h2>
  ...
</section>

Chỉ làm vậy với vài section mà người dùng muốn nhảy thẳng tới, không phải với mọi section: một trang có hai mươi landmark cũng khó lướt như một trang không có landmark nào. Section không có tên vẫn có ích, vì tiêu đề của chúng xuất hiện trong danh sách tiêu đề của trình đọc màn hình.

Section cũng là đích tốt cho liên kết trong trang. Đặt cho section một id, và liên kết có href="#id" sẽ nhảy tới đó:

Lỗi thường gặp

  • Dùng <section> làm lớp bọc để định dạng. Nếu không có tiêu đề và không có chủ đề, hãy dùng <div>. Trang HTML ngữ nghĩa cho thấy mỗi thẻ bố cục hợp với chỗ nào.
  • Bọc một bài blog đơn lẻ trong <section>. Một bài viết tự đứng được một mình là <article>.
  • Section không có tiêu đề. Hãy thêm tiêu đề, kể cả tiêu đề bị ẩn về mặt hiển thị, hoặc xem lại liệu đó có thật là section không.
  • Thay <main> bằng <section>. Nội dung chính của trang nằm trong <main>; các section nằm bên trong nó.
  • Đặt tên cho mọi section. Chỉ thêm aria-labelledby cho những section quan trọng, để danh sách landmark luôn ngắn gọn.

Câu hỏi thường gặp

Thẻ section trong HTML là gì?

<section> nhóm các nội dung thuộc cùng một chủ đề, như một chương của tài liệu hoặc phần "Bảng giá" của trang giới thiệu sản phẩm. Thông thường section nên bắt đầu bằng một tiêu đề nói rõ nó nói về điều gì.

section và div khác nhau thế nào?

<section> cho biết nội dung là một phần theo chủ đề của tài liệu, có tiêu đề riêng. <div> không nói gì cả; nó chỉ là một khối để định dạng hoặc dàn bố cục. Nếu bạn chỉ cần một lớp bọc cho CSS, hãy dùng <div>.

section và article khác nhau thế nào?

<article> là nội dung có nghĩa khi đứng riêng, tách khỏi trang: một bài blog, một bình luận, một thẻ sản phẩm. <section> là một phần của một tổng thể lớn hơn và chỉ có nghĩa trong ngữ cảnh đó. Hãy tự hỏi bạn có thể đăng riêng phần nội dung đó không: nếu có, đó là article.

article có chứa section được không, và section có chứa article được không?

Được, cả hai. Một bài viết dài có thể chia thành các section, và một section như "Bài viết mới nhất" có thể chứa danh sách các article.

section có cần tiêu đề không?

Gần như mọi trường hợp đều nên có, vì tiêu đề là thứ gọi tên chủ đề. Nếu bạn không nghĩ ra được tiêu đề cho nó, có lẽ nội dung đó không phải là section và <div> phù hợp hơn.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu