Bài 2 · Cơ bản · 18 phút
Văn bản, tiêu đề & danh sách
Biên soạn bởi Nguyễn Anh Tuấn
Đánh dấu nội dung văn bản: tiêu đề h1-h6 theo THỨ BẬC, đoạn p, nhấn mạnh ngữ nghĩa strong/em (khác b/i hình thức), danh sách ul/ol/li và blockquote.
Mở một quyển sách giáo khoa, mèo con thấy gì? Tên chương to nhất, rồi tên bài nhỏ hơn, rồi các mục nhỏ hơn nữa. Đó là một dàn ý có thứ bậc: cái lớn chứa cái nhỏ. Trang web cũng vậy, và HTML có sáu mức tiêu đề để diễn đạt thứ bậc đó: <h1> đến <h6>.
Điểm hay vấp nhất của người mới: chọn thẻ tiêu đề theo cỡ chữ nhìn thấy. Sai rồi. h1 không có nghĩa là "chữ to nhất", mà là "tựa đề chính của trang". Chọn thẻ theo vai trò trong dàn ý, còn chữ to hay nhỏ để CSS lo sau.
dan-y.html · heading sắp theo thứ bậc (lưu .html rồi mở bằng trình duyệt)
<h1>Mèo Ham Học</h1>
<h2>Khoá học</h2>
<h3>HTML</h3>
<h3>JavaScript</h3>
<h2>Về chúng tôi</h2> - ▸h1-h6 là SÁU MỨC thứ bậc của dàn ý, không phải sáu cỡ chữ.
- ▸Mỗi trang nên có một h1 (tựa chính); phần lớn dùng h2, phần con dùng h3…
- ▸Đừng nhảy cóc cấp (h1 thẳng sang h3) chỉ để được cỡ chữ mong muốn - đó là việc của CSS.
Khối nội dung quen thuộc nhất là đoạn văn, đánh dấu bằng thẻ <p> (paragraph). Mỗi ý một đoạn, mỗi đoạn một thẻ p.
Có một điều khiến người mới ngạc nhiên: trong file HTML, mèo con gõ bao nhiêu dấu cách hay xuống dòng cũng được, nhưng trình duyệt gộp mọi khoảng trắng liền nhau thành một dấu cách khi hiển thị. Gõ 5 dòng trống giữa hai câu cũng không tạo ra khoảng cách - muốn sang đoạn mới thì mở một thẻ p mới.
doan-van.html · hai đoạn riêng; khoảng trắng thừa bị gộp lại
<p>Mèo con chào cả nhà.</p>
<p>Đây là đoạn thứ hai.
Dù gõ cách xa nhau, trình duyệt vẫn hiển thị dính liền.</p> Trung thực
Muốn làm nổi một từ, mèo con sẽ gặp bốn thẻ trông na ná nhau. Chia làm hai nhóm. Nhóm mang nghĩa: <strong> đánh dấu nội dung quan trọng, <em> đánh dấu chỗ cần nhấn giọng (emphasis). Nhóm chỉ hình thức: <b> cho đậm, <i> cho nghiêng - không thêm nghĩa gì.
Trên màn hình, strong và b đều in đậm như nhau, nên nhiều người tưởng chúng giống hệt. Khác biệt nằm ở chỗ máy đọc trang: screen reader có thể nhấn giọng ở strong/em, máy tìm kiếm hiểu được mức quan trọng. Với b/i thì máy chỉ thấy "đậm/nghiêng" mà không hiểu vì sao.
nhan-manh.html · chọn thẻ theo nghĩa, không theo nét chữ
<p><strong>Cảnh báo:</strong> không chạm vào ổ điện.</p>
<p>Mèo con <em>thật sự</em> thích cá.</p>
<p>Quyển <i>Mèo Ham Học</i> rất hay.</p> - ▸strong = quan trọng, em = nhấn giọng: hai thẻ MANG NGHĨA.
- ▸b = đậm, i = nghiêng: chỉ đổi HÌNH THỨC, không thêm nghĩa.
- ▸In đậm/nghiêng chỉ là cách trình duyệt hiển thị mặc định - nghĩa mới là thứ máy dùng.
Khi nội dung là một loạt mục, hãy đánh dấu nó thành danh sách thật, chứ đừng gõ tay từng gạch đầu dòng. Có hai loại. Danh sách không thứ tự <ul> (unordered - chấm đầu dòng), và danh sách có thứ tự <ol> (ordered - đánh số). Mỗi mục bên trong là một thẻ <li> (list item).
Chọn loại nào? Hỏi: thứ tự có quan trọng không? Các bước pha mì thì thứ tự là cốt lõi - dùng ol. Danh sách món mèo con thích ăn thì đảo qua đảo lại vẫn thế - dùng ul.
danh-sach.html · ul cho danh sách không thứ tự, ol cho các bước có thứ tự
<ul>
<li>Cá khô</li>
<li>Sữa ấm</li>
<li>Hạt thưởng</li>
</ul>
<ol>
<li>Đun sôi nước</li>
<li>Cho mì vào</li>
<li>Đợi 3 phút</li>
</ol> Còn khi mèo con dẫn lại nguyên một đoạn lời của người khác, hãy bọc nó trong <blockquote> (trích dẫn khối). Thẻ này nói với máy "đây là lời trích từ nguồn khác", chứ không phải một mẹo để thụt lề cho đẹp.
trich-dan.html · blockquote cho một đoạn trích
<p>Khẩu hiệu của tụi mình là:</p>
<blockquote>
Hãy học như thể bạn sẽ tồn tại mãi mãi.
</blockquote> - ▸ul = danh sách không thứ tự (chấm); ol = có thứ tự (số); mỗi mục là một li.
- ▸Chọn ul/ol theo NGHĨA: thứ tự có quan trọng hay không.
- ▸blockquote dùng để trích dẫn cả đoạn, không phải để thụt lề cho đẹp.
Sợi chỉ xuyên suốt bài này: chọn thẻ theo nghĩa của nội dung, không theo dáng vẻ mong muốn. Đây chính là tinh thần Semantic HTML mà cả khoá xoay quanh. Vài kiểu lạm dụng hay gặp - và cách nghĩ đúng:
- ▸Dùng nhiều h1 cho chữ to khắp nơi → sai; cỡ chữ là việc của CSS, dàn ý mới dùng heading.
- ▸Dùng blockquote để thụt lề một đoạn không phải trích dẫn → sai; canh lề là việc của CSS.
- ▸Dùng b thay cho strong ở chỗ cảnh báo quan trọng → mất nghĩa với máy đọc và screen reader.
Vì sao phải kỹ vậy với một trang trông còn mộc mạc (chưa có CSS)? Vì đánh dấu đúng nghĩa là món quà cho ba phía: Google hiểu trang để xếp hạng, screen reader đọc đúng cho người khiếm thị, và chính mèo con vài tháng sau đọc lại vẫn hiểu ngay. Cấu trúc đúng trước, đẹp sau.
Bước tiếp theo
Câu hỏi thường gặp
Theo thông lệ, mỗi trang chỉ nên có MỘT h1 - tựa đề chính của trang. Các phần lớn dùng h2, phần con của h2 dùng h3, cứ thế xuống. Đây là quy ước giúp dàn ý rõ ràng cho cả người đọc lẫn Google, không phải luật cứng của trình duyệt.
Đừng đổi sang thẻ heading cấp cao hơn chỉ vì muốn chữ to. Chọn thẻ theo ĐÚNG cấp trong dàn ý, rồi dùng CSS để chỉnh cỡ chữ tuỳ ý. Cỡ chữ là việc của CSS; cấp tiêu đề là việc của HTML.
Khác ở NGHĨA. strong nói "chỗ này quan trọng", em nói "chỗ này cần nhấn giọng" - screen reader và máy tìm kiếm hiểu được điều đó. b và i chỉ bảo "cho đậm/nghiêng" mà không thêm nghĩa gì. Nhìn giống nhau, nhưng máy đọc trang lại hiểu khác nhau.
Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.
Trả lời vài câu để chắc rằng em đã nắm bài.
Theo nguyên tắc, nên chọn thẻ tiêu đề (h1-h6) dựa vào điều gì?
- 1
Dàn ý bằng heading
Cho một bài giới thiệu bản thân mèo con gồm: tựa đề, mục "Sở thích", mục "Ước mơ". Sắp thành dàn ý heading đúng cấp.
✅ Hoàn thành khi: h1 cho tựa đề; hai h2 cho "Sở thích" và "Ước mơ" - không dùng h1 cho mục con.
- 2
strong hay b?
Với mỗi chỗ, chọn strong hay b: (a) cảnh báo "KHÔNG chạm vào ổ điện"; (b) làm đậm tên thương hiệu cho vui mắt.
✅ Hoàn thành khi: (a) strong - là cảnh báo quan trọng (mang nghĩa); (b) b - chỉ để nhìn cho đậm (hình thức).
- 3
ul hay ol?
Chọn ul hay ol: (a) ba bước pha mì gói; (b) danh sách ba món mèo con thích ăn.
✅ Hoàn thành khi: (a) ol - các bước có thứ tự; (b) ul - thứ tự món ăn không quan trọng.
- 4
Sửa khoảng trắng
Mèo con gõ hai câu cách nhau bằng 5 dòng trống trong file .html nhưng trang vẫn dính liền. Giải thích vì sao và cách sửa.
✅ Hoàn thành khi: Nêu được: HTML gộp khoảng trắng nên dòng trống bị bỏ qua; sửa bằng cách đặt mỗi câu trong một thẻ p riêng.
- 5
Viết một đoạn có trích dẫn
Viết một đoạn p giới thiệu một câu nói hay, rồi đặt câu nói đó trong blockquote.
✅ Hoàn thành khi: Có một <p> dẫn nhập và một <blockquote> chứa câu trích - đặt đúng thẻ theo nghĩa.
- 6
Bắt lỗi lạm dụng
Bạn thấy ai đó dùng <h1> cho cả 5 dòng để dòng nào cũng to. Chỉ ra cái sai và cách làm đúng.
✅ Hoàn thành khi: Nêu: h1 là thứ bậc (chỉ một tựa chính), không phải để làm chữ to; muốn to thì dùng CSS, dàn ý vẫn dùng h1/h2/h3 đúng cấp.