Phân Biệt Thẻ <section> và Thẻ <article> trong HTML5

HTML5 giới thiệu một loạt các thẻ mới giúp các lập trình viên frontend có thể đánh dấu trang văn bản HTML một cách rõ ràng và chi tiết hơn. Tuy nhiên cách sử dụng của một số thẻ mới này đã gây ra không ít bối rôi cho các lập trình viên. Hai trong số các thẻ khiến người dùng cảm thấy bối rối khi sử dụng đó là <section><article>.

Nếu bạn đang rơi vào tình huống tương tự như trên thì bài viết này sẽ giúp bạn hiểu rõ cách sử dụng của từng thẻ cũng như phân biệt sự khác nhau giữa chúng để không còn phải vò đầu bứt tóc mỗi khi cần quyết định sử dụng thẻ nào.

Khác Biệt Giữa Section và Article trong HTML5

Đầu tiên xin dược nhắc lại một điểm mà developer thường hay quyên nhưng lại vô cùng quan trọng khi làm việc với HTML (tất cả các phiên bản) đó là:

Trong HTML việc quyết định dùng thẻ nào tuỳ thuộc vào ý nghĩa của phần tử mà bạn muốn áp dụng!

Tại sao phải nhắc lại như vậy là bởi vì vô cùng nhiều developer đã đang và có thể là vẫn sẽ quyết việc lựa chọn thẻ nào phụ thuộc vào 2 yếu tố sau:

  • Phần tử sẽ được hiển thị như thế nào trên trang. Đây là một sai lầm vì việc quy định hiển thị nên sử dụng CSS thay vì HTML.
  • Cảm tính. Sau khi không thể quyết định vào yếu tố trên thì một số người sử dụng cảm tính để đưa ra quyết định!

Bạn không muốn nằm trong số những người tư duy theo kiểu này bởi vì mặc dù trang web của bạn khi hiển thị trên trình duyệt sẽ vẫn không khác biệt gì trong con mắt của người dùng so với khi sử dụng đúng chuẩn HTML tuy nhiên trong mắt của các user agent khác đặc biệt là các Search Engine sẽ có sự khác biệt không nhỏ.

Sự khác biệt này nằm ở, như đã đề cập ở trên, ý nghĩa của các thẻ sử dụng.

Ý Nghĩa Của Thẻ <section>

Theo tiêu chuẩn định nghĩa bởi phiên bản HTML5 thì thẻ <section> được sử dụng để đánh dấu một thành phần độc lập (có thể là một phần tử văn bản, một ảnh, một <div>...) có trong văn bản.

Bạn lưu ý rằng bản thân thẻ <section> không tạo ra ý nghĩa cho nội dung bên trong nó mà đơn giản chỉ để phần biệt giữa các thành phần khác nhau của trang HTML. Hiểu một cách đơn giản <section> giống như một công-ten-nơ chứa hàng và bạn có thể để bất cứ loại hàng nào bên trong nó.

Lấy một ví dụ của một trang web giới thiệu công ty trong đó có hai đoạn văn bản khác nhau như sau:

<div class="start-period">
    <h1>Giai Đoạn Mới Thành Lập</h1>
    <i class="icon-start"></i>
    <p>Công ty ABC được bắt đầu thành lập vào năm...</p>
</div>

<div class="grow-period">
    <h1>Giai Đoạn Phát Triển</h1>
    <i class="icon-rocket"></i>
    <p>Bắt đầu từ năm 2000, sau 5 năm thành lập chúng tôi đã áp dụng các tiêu chuẩn...</p>
</div>

Với đoạn mã trên bạn có thể thay thế thẻ <div> bằng thẻ <section> như sau:

<section class="start-period">
    <h1>Giai Đoạn Mới Thành Lập</h1>
    <i class="icon-start"></i>
    <p>Công ty ABC được bắt đầu thành lập vào năm...</p>
</section>

<section class="grow-period">
    <h1>Giai Đoạn Phát Triển</h1>
    <i class="icon-rocket"></i>
    <p>Bắt đầu từ năm 2000, sau 5 năm thành lập chúng tôi đã áp dụng các tiêu chuẩn...</p>
</section>

Lưu ý rằng việc quyết định trong trường hợp nào sử dụng thẻ <section> phụ thuộc vào việc quyết định xem khi nào cần tách rời các thành phần khác nhau trong văn bản. Do đó không nên có một quy luật cứng nhắc nào áp dụng cho việc sử dụng thẻ <section> này.

Ý Nghĩa Của Thẻ <article>

Thẻ <article> thường được sử dụng để đánh dấu một bài viết trong trang. Trang này có thể thuộc về một diễn dàn, một trang báo điện tử, một blog, một trang review...

<article class="blog-post">
    <h1>Khác biệt giữa &lt;section&gt; và &lt;article&gt; trong HTML5</h1>
    <p>Trong bài viết này chúng ta sẽ phần biệt sự khác nhau giữa hai thẻ &lt;section&gt; và &lt;article&gt; trong HTML5</p>
    <p>Trước tiên và quan trọng...</p>
</article>

Như bạn có thể thấy thẻ <article> có thể chứa bên trong nó nội dung của bài viết từ tiêu đề cho tới nội dung chi tiết.

Ngoài ra, chúng ta cũng nên sử dụng thẻ <header> để bao ngoài tiêu đề bài viết (thẻ <h1>) và thẻ <main> để bao ngoài phần nội dung chính của bài viết, cụ thể như sau:

<article class="blog-post">
    <header>
        <h1>Khác biệt giữa &lt;section&gt; và &lt;article&gt; trong HTML5</h1>
    </header>
    <main>
        <p>Trong bài viết này chúng ta sẽ phần biệt sự khác nhau giữa hai thẻ &lt;section&gt; và &lt;article&gt; trong HTML5</p>
        <p>Trước tiên và quan trọng...</p>
    </main>
</article>

Kết Luận

Hy vọng sau khi đọc xong bài viết này bạn đã có một cái nhìn tương đối rõ ràng hơn về việc sử dụng dụng hai thẻ <section><article> trong HTML5. Trường hợp còn điểm nào chưa rõ hoặc muốn đóng góp phản hồi về nội dung bài viết bạn có thể để bình luận ở phía dưới.

HTML Frontend HTML5 Thiết Kế Web
Bình Luận (1)

cũng chưa rõ ràng cho lắm :D

Trả lời 2 tháng trước
Bình Luận (1)
Nguyễn Duy Tuấn  Nguyễn Duy Tuấn đã bình luận 2 tháng trước

Giải thích như vậy còn chỗ chưa rõ vậy bạn?

Thêm Bình Luận: