← HTML: cấu trúc & semantic

Bài 1 · Cơ bản · 15 phút

HTML là gì: bộ xương trang web

Biên soạn bởi Nguyễn Anh Tuấn

HTML là ngôn ngữ ĐÁNH DẤU (markup), không phải lập trình: thẻ (tag), phần tử (element), thuộc tính (attribute); cấu trúc doctype/html/head/body.

Mở một trang báo điện tử lên, mèo con thấy gì? Một tiêu đề to, vài đoạn văn, mấy tấm ảnh có chú thích, đôi khi một danh sách. Mắt người nhìn phát là biết đâu là tiêu đề, đâu là đoạn. Nhưng máy tính thì không - nó cần được chỉ rõ từng phần là gì.

Đó chính là việc của HTML - viết tắt của HyperText Markup Language, nghĩa là ngôn ngữ đánh dấu. "Đánh dấu" (markup) giống lúc bạn cầm bút dạ quang gạch chân và ghi chú lên một tờ giấy: "chỗ này là tựa đề", "chỗ kia là đoạn cần nhớ". HTML cũng đánh dấu như vậy, nhưng để cho trình duyệt đọc.

  • HTML là ngôn ngữ ĐÁNH DẤU (markup): mô tả phần nào của trang là gì.
  • Mắt người tự hiểu bố cục; máy thì cần được đánh dấu rõ ràng.
  • HTML là bộ xương của mọi trang web - thứ đầu tiên cần học khi làm web.

Ai tạo ra HTML?

HTML do Tim Berners-Lee tạo ra khi đang làm tại CERN (trung tâm nghiên cứu vật lý ở châu Âu). Năm 1989 ông đề xuất ý tưởng World Wide Web; tới cuối 1990 đã định hình bộ ba HTML, HTTP và URL rồi viết trình duyệt cùng máy chủ web đầu tiên, công bố rộng rãi năm 1991. Ông chủ ý giữ Web miễn phí và mở cho tất cả - một quyết định định hình cả Internet về sau.

Nhiều người quen miệng nói "lập trình HTML", nhưng nói cho đúng thì HTML không phải ngôn ngữ lập trình. Nó không cộng trừ, không có câu lệnh "nếu… thì…", không lặp đi lặp lại. Nó chỉ mô tả: "đây là tiêu đề", "đây là đoạn văn". Giống viết một lá thư có định dạng, chứ không phải giải một bài toán.

Cách đánh dấu là bọc nội dung giữa hai thẻ (tag): một thẻ mở và một thẻ đóng. Ví dụ <p> mở một đoạn văn, </p> đóng nó lại. Cả cụm gộp lại gọi là một phần tử (element):

<p>Xin chào mèo con</p>thẻ mởnội dung (hiển thị)thẻ đóngBa phần ghép lại = một phần tử (element)thẻ đóng có thêm dấu gạch chéo /
Giải phẫu một phần tử: thẻ mở + nội dung + thẻ đóng.

Đôi khi một thẻ mang thêm thuộc tính (attribute) để bổ sung thông tin, viết theo dạng tên="giá trị" - như href của một liên kết. Thử vài phần tử:

vai-the.html · vài phần tử HTML (lưu .html rồi mở bằng trình duyệt)

<h1>Mèo Ham Học</h1>
<p>Học công nghệ bằng tiếng Việt.</p>
<a href="https://meohamhoc.vn">Vào trang chủ</a>
  • Phần tử = thẻ mở + nội dung + thẻ đóng (vd <p>…</p>).
  • Thẻ đóng giống thẻ mở nhưng thêm dấu gạch chéo: </p>.
  • Thuộc tính bổ sung thông tin cho thẻ: href="…" cho biết liên kết trỏ đâu.

Một trang HTML hoàn chỉnh không chỉ là vài thẻ rời. Nó có một bộ khung cố định: dòng khai báo <!doctype html> (báo cho trình duyệt "đây là HTML hiện đại"), rồi thẻ <html> bọc tất cả, bên trong chia làm hai phần lớn:

trang-dau-tien.html · khung tối thiểu của một trang

<!doctype html>
<html lang="vi">
  <head>
    <meta charset="utf-8" />
    <title>Trang đầu tiên của mèo con</title>
  </head>
  <body>
    <h1>Xin chào!</h1>
    <p>Đây là trang HTML đầu tiên của mình.</p>
  </body>
</html>
  • <head>: thông tin cho MÁY - tiêu đề tab, bảng mã, mô tả cho Google. Không hiện thành nội dung.
  • <body>: phần người dùng THẤY - tiêu đề, đoạn văn, ảnh, nút…
  • lang="vi" cho biết trang bằng tiếng Việt; charset="utf-8" để hiện đúng dấu tiếng Việt.

head và body

Mẹo nhớ: head như phần khai báo ngoài bì thư (gửi cho ai, mã bưu chính) - cần thiết nhưng người nhận không đọc; body là lá thư bên trong - thứ người ta thật sự đọc.

Khi mở trang, trình duyệt đọc HTML từ trên xuống và dựng các thẻ lồng nhau thành một cái cây. Cây này tên là DOM (Document Object Model). Thẻ <html> là gốc; <head><body> là hai nhánh lớn; mỗi thẻ nằm trong thẻ khác trở thành một nhánh con.

<html><head><body><title><h1><p>gốc là <html>; các thẻ lồng nhau thành nhánh con
Trình duyệt biến trang HTML ở trên thành cây DOM gồm các phần tử lồng nhau.

Vì mọi thứ là một cây có thứ bậc, việc lồng thẻ cho đúng rất quan trọng: thẻ mở trước thì đóng sau, không được chồng chéo. Sau này CSS và JavaScript đều dựa trên cái cây này để tô màu và làm cho trang tương tác.

Trung thực

Cây DOM thật còn chi tiết hơn (chữ bên trong thẻ cũng là một "nút", thuộc tính cũng được ghi nhận…). Ở đây ta rút gọn để thấy ý chính: HTML là các phần tử lồng nhau thành cây.

Một trang web thật được dựng bằng ba lớp, mỗi lớp một việc:

  • HTML - CẤU TRÚC & ý nghĩa (bộ xương): phần nào là gì.
  • CSS - TRÌNH BÀY (da thịt, màu sắc, bố cục): cho đẹp.
  • JavaScript - TƯƠNG TÁC (cử động): bấm nút, gọi dữ liệu, phản hồi.

Cả khoá này tập trung vào lớp đầu tiên - HTML. Vì chưa có CSS, các trang mèo con làm ra sẽ trông mộc mạc: chữ đen, nền trắng, không màu mè. Đừng lo - đó là chủ ý. Cấu trúc đúng ngay từ đầu thì sau này CSS làm đẹp rất nhanh, Google hiểu trang tốt hơn (sợi chỉ đỏ này dẫn tới bài Semantic HTML là gì ở giữa khoá), và người khác (kể cả chính bạn vài tháng sau) đọc lại dễ dàng.

Bước tiếp theo

Giờ mèo con đã biết HTML là gì và khung một trang trông ra sao. Bài kế ta đi vào những thẻ đầu tiên hay dùng nhất - tiêu đề, đoạn văn và danh sách - ở bài Văn bản, tiêu đề & danh sách.

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

Gần như không. Bạn chỉ cần một trình soạn thảo (VS Code, hoặc thậm chí Notepad) và một trình duyệt. Gõ HTML, lưu thành file đuôi .html, rồi mở file đó bằng trình duyệt là thấy kết quả ngay - không phải cài "ngôn ngữ" gì cả.

Không. HTML là ngôn ngữ ĐÁNH DẤU (markup): nó MÔ TẢ phần nào của trang là tiêu đề, là đoạn văn, là ảnh… chứ không tính toán hay ra quyết định (không có phép tính, không if, không vòng lặp). Phần "lập trình" thật - logic, tương tác - là việc của JavaScript, học ở khoá khác.

Vì chưa có CSS. HTML chỉ lo CẤU TRÚC; CSS mới lo màu sắc, phông chữ, bố cục. Một trang HTML thuần trông mộc là chuyện bình thường và đúng ý ở giai đoạn này - "cấu trúc đúng trước, đẹp sau".

body là phần người dùng THẤY trên trang (tiêu đề, đoạn văn, ảnh, nút…). head chứa thông tin cho MÁY: tiêu đề hiện trên tab trình duyệt, bảng mã ký tự, mô tả cho Google… - những thứ không hiện thành nội dung trang.

Không. Hiểu NGUYÊN TẮC (đánh dấu đúng nghĩa từng phần) quan trọng hơn học vẹt. Thực tế chỉ vài chục thẻ hay dùng; cả khoá này sẽ làm quen dần, và tra cứu khi cần là chuyện hoàn toàn bình thường, kể cả với người đi làm.

Tick những điều em tự tin làm được. Càng lên cao, em càng hiểu sâu.

Tick những điều em tự tin làm được sau khi học bài này. 0/6

Trả lời vài câu để chắc rằng em đã nắm bài.

Câu 1/3 Điểm: 0

HTML thuộc loại ngôn ngữ nào?

Bài tập về nhà

  1. 1

    HTML trong một câu

    Bằng lời của mèo con, giải thích "HTML là gì?" trong 1-2 câu mà KHÔNG dùng từ "lập trình".

    ✅ Hoàn thành khi: Nêu được: HTML là ngôn ngữ đánh dấu, dùng để cho máy biết phần nào của trang là tiêu đề, đoạn văn, ảnh…

  2. 2

    Soi một phần tử

    Cho phần tử <h1>Mèo Ham Học</h1>. Chỉ ra đâu là thẻ mở, đâu là nội dung, đâu là thẻ đóng.

    ✅ Hoàn thành khi: Thẻ mở: <h1> · nội dung: "Mèo Ham Học" · thẻ đóng: </h1> (có dấu gạch chéo).

  3. 3

    Đọc thuộc tính

    Trong <a href="https://meohamhoc.vn">Mèo</a>: đâu là thuộc tính, giá trị của nó là gì, và nó dùng để làm gì?

    ✅ Hoàn thành khi: Thuộc tính: href · giá trị: "https://meohamhoc.vn" · cho biết liên kết này trỏ tới đâu.

  4. 4

    Viết khung một trang

    Tự gõ khung một trang HTML hợp lệ: doctype, thẻ html (lang="vi"), head có title, body có một h1.

    ✅ Hoàn thành khi: Có đủ <!doctype html>, <html lang="vi">, <head><title>…</title></head>, <body><h1>…</h1></body> - lồng đúng thứ tự.

  5. 5

    head hay body?

    Mỗi thứ sau nằm trong head hay body: (a) tiêu đề hiện trên tab; (b) một đoạn văn người đọc; (c) khai báo bảng mã charset; (d) ảnh sản phẩm.

    ✅ Hoàn thành khi: head: (a) tiêu đề tab, (c) charset. body: (b) đoạn văn, (d) ảnh.

  6. 6

    Vẽ cây DOM

    Vẽ cây DOM cho trang: html chứa head (chứa title) và body (chứa h1 và một p).

    ✅ Hoàn thành khi: html ở gốc; hai nhánh head và body; title nằm dưới head; h1 và p nằm dưới body.