Bài 3 · Cơ bản · 18 phút
Liên kết, ảnh & đa phương tiện
Biên soạn bởi Nguyễn Anh Tuấn
Liên kết a (href, target, rel), ảnh img với thuộc tính alt (quan trọng cho SEO & người khiếm thị), figure/figcaption, và audio/video đúng cách.
Ở hai bài trước, mèo con đã đánh dấu được chữ nghĩa trong MỘT trang. Nhưng điều khiến web trở thành "web" (mạng lưới) là các trang nối được với nhau. Sợi dây đó là thẻ <a> (anchor) - thứ tạo ra siêu văn bản (hypertext): bấm vào một chữ là nhảy sang trang khác.
Thẻ a dùng thuộc tính href để nói liên kết trỏ tới đâu, còn nội dung giữa hai thẻ là phần chữ người ta thấy và bấm vào.
lien-ket.html · một link ra ngoài và một link trong cùng website (mở .html bằng trình duyệt)
<p>Đọc thêm tại <a href="https://meohamhoc.vn">Mèo Ham Học</a>.</p>
<p>Hoặc xem <a href="bai-tiep.html">bài tiếp theo</a>.</p> - ▸Thẻ a tạo liên kết - thứ làm web trở thành một mạng lưới các trang.
- ▸href cho biết liên kết trỏ tới đâu; chữ giữa hai thẻ là phần bấm vào.
- ▸Liên kết là cốt lõi của "hypertext" - chữ H trong HTML.
Giá trị của href có hai kiểu. Kiểu tuyệt đối ghi địa chỉ đầy đủ (bắt đầu bằng https://) - dùng để trỏ sang website khác. Kiểu tương đối chỉ ghi đường dẫn trong cùng website (vd bai-tiep.html) - gọn và không gãy khi đổi tên miền.
Mặc định, bấm liên kết sẽ mở ngay trên tab đang xem. Muốn mở tab mới, thêm target="_blank". Khi mở tab mới ra trang ngoài, nên kèm rel="noopener noreferrer" để trang vừa mở không can thiệp ngược lại trang của mình - một thói quen an toàn.
tab-moi.html · mở tab mới an toàn cho link ra ngoài
<a href="https://meohamhoc.vn" target="_blank" rel="noopener noreferrer">
Mở Mèo Ham Học ở tab mới
</a> Trung thực
Chèn ảnh bằng thẻ <img>. Đây là một thẻ rỗng: nó không bọc nội dung nên không có thẻ đóng, mọi thông tin nằm ở thuộc tính. Hai thuộc tính quan trọng: src (đường dẫn tới file ảnh) và alt (chữ mô tả ảnh).
Người mới hay bỏ qua alt vì "ảnh hiện rồi cần gì chữ". Nhưng alt âm thầm làm ba việc quan trọng - một trong số đó là giúp Google hiểu ảnh nói gì:
Việc đầu tiên - phục vụ người khiếm thị - là một phần của a11y: web cho mọi người, thứ mèo con sẽ học thành một bài riêng ở phần sau khoá. alt chính là một trong những viên gạch a11y dễ làm nhất.
anh.html · ảnh kèm alt mô tả nội dung
<img src="meo-ngu.jpg" alt="Mèo con đang ngủ trên bàn phím" /> - ▸img là thẻ rỗng: không có thẻ đóng, thông tin nằm ở thuộc tính.
- ▸src trỏ tới file ảnh; alt mô tả ảnh bằng chữ.
- ▸alt tốt cho SEO, cho người khiếm thị (screen reader đọc), và hiện thay khi ảnh lỗi.
- ▸Ảnh chỉ để trang trí thì đặt alt="" (rỗng) để máy đọc bỏ qua - đó là chủ ý.
Ảnh thường là thứ nặng nhất trên trang, nên đáng tối ưu. Hai thuộc tính của img giúp việc đó mà không cần JavaScript. Thứ nhất: srcset khai báo nhiều phiên bản cùng tấm ảnh ở các bề rộng khác nhau, để trình duyệt tự chọn cỡ hợp với màn hình - điện thoại tải ảnh nhẹ, máy tính tải ảnh nét.
srcset.html · nhiều cỡ ảnh, trình duyệt tự chọn
<img
src="meo-800.jpg"
srcset="meo-480.jpg 480w, meo-800.jpg 800w, meo-1200.jpg 1200w"
sizes="(max-width: 600px) 480px, 800px"
alt="Mèo con đang ngủ trên bàn phím"
/> Thứ hai: loading="lazy" bảo trình duyệt hoãn tải những ảnh nằm xa phía dưới cho tới khi người dùng cuộn gần tới. Trang nhiều ảnh nhờ vậy mở nhanh hơn hẳn. Lưu ý: ảnh quan trọng ngay đầu trang thì đừng lazy - để nó tải ngay.
lazy.html · hoãn tải ảnh nằm xa phía dưới
<img src="meo-cuoi-trang.jpg" loading="lazy" alt="Mèo con vẫy tay tạm biệt" /> Trung thực
- ▸srcset: khai báo nhiều cỡ ảnh, trình duyệt chọn cỡ hợp màn hình (nhẹ cho điện thoại).
- ▸loading="lazy": hoãn tải ảnh nằm xa phía dưới tới khi cuộn gần tới.
- ▸Ảnh quan trọng ở đầu trang thì để tải ngay, đừng lazy.
Nhiều ảnh cần một dòng chú thích đi kèm. Mèo con có thể đặt một thẻ p ngay dưới ảnh, nhưng như vậy máy không biết dòng chữ đó thuộc về tấm ảnh nào. Cách đúng nghĩa: bọc ảnh và chú thích trong <figure>, rồi đặt dòng chú thích trong <figcaption>.
figure.html · gắn chú thích vào đúng ảnh
<figure>
<img src="meo-di-hoc.jpg" alt="Mèo con đeo cặp tới trường" />
<figcaption>Mèo con ngày đầu đi học</figcaption>
</figure> Khác biệt tinh tế nhưng quan trọng: alt mô tả ảnh cho người KHÔNG thấy ảnh, còn figcaption là chú thích hiển thị cho MỌI người đọc. Hai thứ bổ sung cho nhau, không thay thế nhau.
- ▸figure bọc một hình (ảnh, biểu đồ…) như một khối độc lập.
- ▸figcaption là dòng chú thích gắn đúng vào hình đó.
- ▸alt mô tả cho người không thấy ảnh; figcaption là chú thích cho mọi người - khác nhau.
Web không chỉ có chữ và ảnh. Hai thẻ <audio> và <video> nhúng âm thanh và phim ngay trong trang. Thêm thuộc tính controls để hiện nút play, tạm dừng, âm lượng cho người dùng.
media.html · nhúng audio và video có nút điều khiển
<audio src="meo-keu.mp3" controls></audio>
<video src="gioi-thieu.mp4" controls width="480">
Trình duyệt của bạn không hỗ trợ video.
</video> Để ý dòng chữ bên trong thẻ video: nó chỉ hiện khi trình duyệt không phát được video - gọi là nội dung fallback (phần dự bị, hiện ra khi cách chính thất bại). Tinh thần xuyên suốt khoá vẫn vậy: đánh dấu sao cho ai cũng tiếp cận được nội dung.
Bước tiếp theo
Câu hỏi thường gặp
href (hypertext reference) là thuộc tính của thẻ a, cho biết liên kết trỏ TỚI ĐÂU. Viết ngay trong thẻ mở: <a href="...">chữ hiển thị</a>. Giá trị có thể là một địa chỉ web đầy đủ, hoặc đường dẫn tới một trang khác trong cùng website.
Dùng khi muốn liên kết mở ra một tab MỚI thay vì rời trang hiện tại - hợp lý với link ra website ngoài. Khi đó nên thêm rel="noopener noreferrer" để an toàn. Với link trong cùng website thì thường không cần, cứ để mở ngay trên tab đang xem.
Có. Thiếu alt thì người dùng screen reader không biết ảnh là gì, Google cũng khó hiểu nội dung ảnh, và khi ảnh lỗi không tải được thì chỗ đó trống trơn. Hãy viết alt mô tả ngắn gọn nội dung ảnh. Trường hợp ảnh chỉ để trang trí, đặt alt="" (rỗng) để máy đọc bỏ qua - đó là chủ ý, khác với quên alt.
srcset cho phép khai báo NHIỀU phiên bản cùng một ảnh ở các bề rộng khác nhau (vd 480w, 800w, 1200w); trình duyệt tự chọn cỡ hợp với màn hình và độ phân giải, nên điện thoại không phải tải tấm ảnh khổng lồ của desktop. Không bắt buộc - một src thường vẫn chạy - nhưng với ảnh lớn thì srcset giúp trang nhẹ và nhanh hơn nhiều.
Nó bảo trình duyệt HOÃN tải một ảnh cho tới khi người dùng cuộn gần tới nó. Trang có nhiều ảnh phía dưới sẽ mở nhanh hơn vì lúc đầu chỉ tải ảnh đang thấy. Hợp với ảnh nằm xa phía dưới; còn ảnh quan trọng nằm ngay đầu trang thì cứ để tải ngay, đừng lazy.
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.
Thuộc tính nào của thẻ <a> cho biết liên kết trỏ tới đâu?
- 1
Một liên kết đầu tiên
Viết một thẻ a trỏ tới https://meohamhoc.vn với chữ hiển thị là "Mèo Ham Học".
✅ Hoàn thành khi: <a href="https://meohamhoc.vn">Mèo Ham Học</a> - đúng cú pháp, có href và chữ hiển thị.
- 2
Mở tab mới an toàn
Sửa liên kết trên để nó mở ra một tab mới và an toàn.
✅ Hoàn thành khi: Thêm target="_blank" và rel="noopener noreferrer" vào thẻ a.
- 3
Viết alt cho ảnh
Cho một tấm ảnh chú mèo con đang ngủ trên bàn phím. Viết thẻ img với src="meo-ngu.jpg" và một alt mô tả tốt.
✅ Hoàn thành khi: Có src và alt; alt mô tả nội dung ảnh (vd "Mèo con đang ngủ trên bàn phím"), không phải để trống.
- 4
alt rỗng hay alt có chữ?
Với mỗi ảnh, alt nên có chữ mô tả hay để rỗng (alt=""): (a) ảnh sản phẩm trong trang bán hàng; (b) một đường kẻ trang trí thuần tuý.
✅ Hoàn thành khi: (a) alt có chữ mô tả sản phẩm; (b) alt="" vì chỉ trang trí, không mang thông tin.
- 5
Ảnh có chú thích
Dùng figure và figcaption để chèn một ảnh kèm chú thích "Mèo con ngày đầu đi học".
✅ Hoàn thành khi: Có <figure> bọc một <img> và một <figcaption> chứa dòng chú thích.
- 6
Nhúng một video
Viết thẻ video trỏ tới file "gioi-thieu.mp4" sao cho người xem thấy nút điều khiển.
✅ Hoàn thành khi: Có thẻ <video> với nguồn trỏ tới gioi-thieu.mp4 và thuộc tính controls.
- 7
Tối ưu một tấm ảnh
Cho ảnh "meo-cuoi-trang.jpg" nằm xa phía dưới trang. Viết thẻ img có alt và bật hoãn tải.
✅ Hoàn thành khi: Có <img> với alt mô tả và thuộc tính loading="lazy" (vì ảnh nằm xa phía dưới).