Khác biệt giữa HTML, CSS và JavaScript — thứ mà tầng Web server vẽ ra

Bài viết này nằm trong khóa Kiến thức nền tảng về CNTT, xây dựng từ đầu những kiến thức CNTT thực tế tối thiểu mà bạn cần để lập trình và vibe coding.
HTML quyết định màn hình có những gì, CSS quyết định nó trông thế nào, JavaScript quyết định nó phản ứng ra sao với thao tác. Các sơ đồ cho thấy ba thứ đó hợp thành một màn hình như thế nào.

Bài viết này nói về ba thứ tạo nên tầng Web server: HTML, CSS và JavaScript.

Chúng được viết ở những chỗ tách biệt là index.html, style.css và script.js, vì thứ mà chúng quyết định là khác nhau.

Mỗi file trong ba file quyết định điều gì
index.htmlstyle.cssscript.jsCó những gìloại và thứ tựTrông thế nàomàu, cỡ, bố cụcPhản ứng thế nàovới thao tácĐặt nút"Đặt chỗ"Nút màu xanhbo gócKhi bấm thìhiện dòng chữĐến đầu tiênĐi lấy thứ haiĐi lấy thứ hai
Cột trái là file, cột giữa là điều nó quyết định, cột phải là ví dụ với nút "Đặt chỗ". Ngoài cùng bên phải là thứ tự trình duyệt đọc chúng. Ba hàng cùng nói về một nút duy nhất nhưng quyết định những điều khác nhau.

Ba file không đến cùng một lúc.

Cả ba file đều do trình duyệt nhận, và bên nạp chúng cũng như bên chạy chúng đều là trình duyệt.

HTML viết ra màn hình có những gì, bằng loại thành phần và thứ tự

HTML (HyperText Markup Language, ngôn ngữ viết ra màn hình có những gì bằng loại thành phần và thứ tự) được viết trong index.html.

Mỗi thành phần của màn hình là một phần tử (element), tên và thiết lập gắn vào phần tử là thuộc tính (attribute), còn ký hiệu cho biết phần tử bắt đầu và kết thúc ở đâu là thẻ (tag).

index.html của form đặt chỗ được tạo nên từ ba thứ này.

<form>
  <input type="date">
  <button type="button" id="reserve" class="action">Đặt chỗ</button>
  <p id="message"></p>
</form>

id và class là những cái tên để sau đó CSS và JavaScript chọn ra thành phần.

Một id chỉ dùng một lần trên một trang, còn class thì gắn cho bao nhiêu phần tử cũng được.

Các phần tử có thể lồng nhau, và phần tử button nằm bên trong phần tử form.

Sự lồng nhau bên trong index.html
phần tử html — cả trang
phần tử head — không hiện ra màn hình
  • Tiêu đề của trang
  • Tên file style.css và script.js
phần tử body — hiện ra màn hình
  • Tiêu đề "Đặt chỗ"
phần tử form — form đặt chỗ
  • phần tử input — ô nhập ngày tháng
  • phần tử button — nút "Đặt chỗ"
  • phần tử p — một chỗ có nội dung rỗng
Khung ngoài là phần tử html của cả trang. Phần tử head chứa thông tin không hiện ra màn hình, chỉ những gì bạn viết trong phần tử body mới hiện ra.

Phần tử head chứa tiêu đề trang và tên các file được dùng, còn thứ hiện ra màn hình chỉ là phần bên trong phần tử body.

index.html chỉ viết ra có những gì

Thứ bạn viết trong index.html chỉ là màn hình có những gì.

Thẻ cho biết loại của từng thành phần, bạn viết nội dung và thứ tự chúng xếp hàng, còn id và class gắn ở thẻ mở là những cái tên để sau đó file khác chọn ra thành phần ấy.

CSS gom việc phần tử trông thế nào vào một file riêng

CSS (Cascading Style Sheets, ngôn ngữ viết ra cách hiển thị phần tử HTML dưới dạng quy tắc về màu, kích thước và bố cục) chỉ quyết định vẻ ngoài.

style.css có dạng như sau.

.action {
  background-color: #2a6f97;
  color: white;
  border-radius: 8px;
}

.action ở đầu là phần chỉ định quy tắc áp cho phần tử nào.

Ba dòng trong dấu ngoặc nhọn được áp cho mọi phần tử có class là action.

Bên trong style.css, những quy tắc như vậy xếp nối tiếp nhau.

Các quy tắc xếp trong style.css
style.css
Quy tắc cho body
  • Màu nền của cả trang
  • Cỡ chữ
Quy tắc cho .action — phần tử có class là action
  • Màu nền #2a6f97
  • Màu chữ white
  • Độ bo góc 8px
Quy tắc cho #message — phần tử có id là message
  • Màu chữ
  • Khoảng cách phía trên
Trong một file, các quy tắc xếp nối nhau theo từng đối tượng được chọn. Phần trong mỗi cặp ngoặc nhọn là cách hiển thị áp cho đối tượng đó.

Khi một màn hình có ba nút, số chỗ phải sửa để đổi màu thay đổi tùy theo bạn viết cách hiển thị ở đâu.

Nơi viết cách hiển thịSố chỗ phải sửa khi đổi màuKết quả với ba nút
Thuộc tính style trên từng buttonSửa 3 chỗSót một chỗ là màu không đồng nhất
.action trong style.cssSửa 1 chỗCả ba đổi sang cùng một màu
#reserve trong style.cssSửa 1 chỗChỉ nút có id đó thay đổi

Bạn cũng có thể viết cách hiển thị vào thuộc tính style của phần tử, nhưng khi đó bạn lặp lại cùng một thay đổi đúng bằng số phần tử.

Gom vào style.css thì chỉ phải sửa 1 chỗ.

style.css chọn theo tên rồi quyết định cách hiển thị

Việc style.css làm chỉ là liệt kê thành phần nào được hiển thị ra sao.

Thành phần nào thì chọn theo tên class hoặc id đã gắn trong index.html, và nó không thêm thành phần cũng không sửa chữ.

JavaScript phản ứng với thao tác và sửa lại màn hình

Màn hình chỉ có HTML và CSS thì sau khi hiện ra, nội dung không đổi.

Hiện dòng chữ khi nút được bấm là phần việc của JavaScript trong tầng Web server.

script.js có dạng như sau.

const button = document.querySelector("#reserve");
button.addEventListener("click", () => {
  document.querySelector("#message").textContent = "Đã gửi đặt chỗ";
});

document ở dòng đầu là tên chỉ toàn bộ trang mà trình duyệt đã nạp.

#reserve đứng sau là cách viết để chọn phần tử có id là reserve, và ký hiệu trước tên cho biết đó là class hay id.

Ba file nối với nhau bằng những cái tên đã gắn trong index.html.

Tên gắn trong index.html và cách viết khi chọn
===class="action".actionQuy tắc hiển thịtrong style.cssid="reserve"#reserveĐăng ký clicktrong script.jsid="message"#messageĐối tượng bịscript.js sửa
Hai ô nối với nhau bằng đường kẻ đôi là cùng một cái tên. Bên trái là tên viết trong index.html, ở giữa là cách viết khi chọn, bên phải là chỗ dùng cách viết đó.

addEventListener ở dòng thứ hai là phần đăng ký việc sẽ làm khi có click.

() => { } đứng sau là dạng viết trong đó bạn đặt phần xử lý sẽ chạy khi nút được bấm vào giữa hai dấu ngoặc nhọn.

Một việc xảy ra như cú click này, khi trình duyệt báo cho chương trình biết người dùng vừa thao tác gì, chính là sự kiện (event).

Sự kiện không chỉ có mỗi click.

Thao tác nào cũng vậy, bên nhận ra là trình duyệt
Bấm nútNhập chữ vàoô nhập liệuGửi formTrình duyệtnhận raXử lý đã đăng kýchạy lênclickinputsubmit
Các mũi tên từ ba ô bên trái dồn về ô ở giữa. Chữ trên mũi tên là tên của sự kiện, còn phần xử lý trong script.js là bên được gọi sau đó.

Bạn đăng ký trước rằng khi có sự kiện nào thì làm gì.

Màu đổi khi rê chuột lên là do CSS, còn việc gửi form là do trình duyệt làm.

script.js cũng về đến trình duyệt của người dùng và đọc được nội dung, nên bạn không viết vào đó những giá trị không được cho người khác thấy.

script.js chỉ chạy khi được gọi

script.js chỉ đăng ký trước rằng khi cái này được bấm thì làm việc kia.

Phần xử lý mà trình duyệt gọi khi nút được bấm sẽ sửa lại thành phần của màn hình, nhưng nội dung index.html không đổi; và vì script.js về đến trình duyệt của người dùng nên bạn không viết vào đó những giá trị không được cho người khác thấy.

Trình duyệt tạo DOM từ HTML, áp CSS rồi vẽ, sau đó JavaScript sửa lại

Trình duyệt không hiện nguyên chữ trong HTML ra, mà dựng phần lồng nhau của các phần tử thành dữ liệu.

Đó chính là DOM (Document Object Model, dữ liệu xếp các phần tử giữ nguyên cách lồng nhau).

Thứ bạn thấy trên màn hình là hình vẽ của DOM này.

Phần xử lý mà script.js đăng ký cũng đang chờ trong cùng bộ nhớ trình duyệt với DOM.

DOM được dựng trong bộ nhớ của trình duyệt
Bộ nhớ trình duyệt của người dùng
DOM — các phần tử lồng nhau dựng từ index.html
phần tử body — phần hiện ra màn hình
  • phần tử button — nội dung là "Đặt chỗ"
  • phần tử p — nội dung rỗng
  • Cả hai vẫn giữ nguyên id và class
Phần xử lý do script.js đăng ký
  • Khi có click thì sửa lại nội dung của p
Cách lồng nhau giống hệt index.html được dựng bên trong bộ nhớ của trình duyệt. Phần xử lý mà script.js đăng ký cũng chờ trong chính bộ nhớ đó.

Ba file đến riêng lẻ và hợp lại thành một DOM bên trong trình duyệt.

Trang bạn thấy trên màn hình là hình vẽ của DOM này.

Việc áp CSS vào DOM, tính toán vị trí cùng kích thước rồi vẽ ra chính là rendering (kết xuất).

Mỗi lần file đến và mỗi lần bấm nút, trình duyệt xử lý DOM thế nào
index.htmlđến nơistyle.cssđến nơiNút đượcbấmTải lạiTạo DOM từphần tử lồng nhauÁp quy tắc vàoDOM rồi vẽscript.js sửalại DOMTạo lại DOM từHTML nhận đượcChưa vẽgì cảHiện nút màu xanhChữ hiện trong pp trở lại rỗng
Từ trên xuống là theo thứ tự thời gian. Bên trái là việc đã xảy ra, ở giữa là việc trình duyệt làm lúc đó, bên phải là màn hình sau đó. Ở dưới cùng, phần đã sửa biến mất.

Thứ bị sửa lại chỉ là DOM trong bộ nhớ của trình duyệt.

index.html đã đến nơi và các file đặt trên server công khai đều giữ nguyên.

Nội dung muốn giữ lại thì gửi đến tầng App và lưu vào tầng DB.

Cách viết JavaScript và bài tập chạy nó trong trình duyệt được nói đến trong khóa Nhập môn JavaScript.

Màn hình là hình vẽ của DOM

Trình duyệt dựng phần lồng nhau của các thành phần từ index.html nhận được, rồi thêm màu và kích thước theo quy tắc trong style.css và vẽ ra.

Thứ mà script.js sửa lại chính là bản đã dựng đó, nên khi bạn tải lại trang, nó được dựng lại từ các file đã đến và nội dung đã sửa biến mất.

QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1Khi muốn đổi màu nền của nút đặt chỗ, bạn sửa file nào?

Câu 2CSS và JavaScript chọn phần tử HTML bằng cái gì?

Câu 3Khi JavaScript sửa lại chữ trên nút, thứ thay đổi là cái nào?