Bài 17: Các mức ưu tiên của bộ chọn – Lý thuyết

Ví dụ minh họa cho bộ chọn pseudo-class (Ảnh Sách KNTT)
Mục lục [Ẩn]

Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó

I. Lý thuyết trọng tâm

1. Kiểu bộ chọn dạng pseudo-class và pseudo-element

Các lệnh định dạng CSS đã học đều chỉ áp dụng cho các phần tử tĩnh, tức là không phụ thuộc vào tương tác với người dùng. Vậy làm thế nào để thiết lập CSS định dạng cho các trạng thái tương tác, ví dụ như khi người dùng di chuyển hay nháy chuột lên phần tử? Câu trả lời nằm ở bộ chọn pseudo-class và pseudo-element.

1.1. Bộ chọn pseudo-class (Lớp giả)

Pseudo-class (lớp giả) là khái niệm chỉ các trạng thái đặc biệt của phần tử HTML. Các trạng thái này không cần định nghĩa và mặc định được coi như các lớp có sẵn của CSS.

Cú pháp:

:pseudo-class {thuộc_tính: giá_trị;}

Một số lớp giả thường dùng:

Bộ chọn Ý nghĩa Ví dụ
:link Tất cả các liên kết khi chưa được kích hoạt a:link {color: blue;} – Các liên kết chưa kích hoạt sẽ có màu xanh dương
:visited Tất cả các liên kết sau khi đã được kích hoạt một lần a:visited {color: gray;} – Các liên kết sau khi kích hoạt chuyển màu xám
:hover Tất cả các phần tử khi người dùng di chuyển con trỏ chuột lên đối tượng #home:hover {font-size: 150%;} – Khi di chuyển chuột lên đối tượng có id=”home” sẽ hiển thị cỡ chữ tăng lên 150%

Ví dụ minh họa:

Đoạn CSS sau thiết lập định dạng cho các trạng thái đặc biệt của phần tử a chứa liên kết:

a:link {color: red;}      /* Liên kết mặc định màu đỏ */
a:visited {color: green;} /* Liên kết đã kích hoạt chuyển màu xanh lá */
a:hover {color: magenta;} /* Khi di chuột qua đổi màu hồng */
h1 {color: blue;}

Áp dụng cho HTML:

<h1>CSS là gì</h1>
<p><a href="https://www.w3schools.com/css/" target="_blank">Tự học nhanh CSS</a></p>
<p>CSS (Cascading Style Sheets) là ngôn ngữ định dạng đặc biệt được dùng 
để mô tả cách thể hiện của văn bản HTML trong trang web.</p>

Kết quả: Liên kết “Tự học nhanh CSS” sẽ có màu đỏ mặc định. Nếu đã được kích hoạt, liên kết tự động chuyển màu xanh lá cây. Khi di chuyển con trỏ chuột lên liên kết thì dòng chữ đổi màu hồng.

Ví dụ minh họa cho bộ chọn pseudo-class (Ảnh Sách KNTT)
Ví dụ minh họa cho bộ chọn pseudo-class (Ảnh Sách KNTT)

1.2. Bộ chọn pseudo-element (Phần tử giả)

Pseudo-element (phần tử giả) là khái niệm chỉ một phần (hoặc một thành phần) của các phần tử bình thường. Các phần này có thể coi là một phần tử giả và có thể thiết lập mẫu định dạng CSS.

Cú pháp:

::pseudo-element {thuộc_tính: giá_trị;}

Một số phần tử giả thường dùng:

Bộ chọn Mô tả Ví dụ
::first-line Dòng đầu tiên của đối tượng p.test::first-line {font-family: monospace;} – Dòng đầu tiên của các đoạn thuộc lớp test chuyển phông monospace
::first-letter Ký tự đầu tiên của đối tượng p#first::first-letter {font-size: 200%;} – Ký tự đầu tiên của đoạn có id=”first” có màu đỏ và kích thước gấp đôi
::selection Phần được chọn (bằng cách kéo thả chuột trên màn hình) của đối tượng ::selection {background-color: lime;} – Vùng đang chọn bất kỳ sẽ chuyển màu nền xanh lá mạ

Ví dụ minh họa:

Đoạn CSS sau thiết lập định dạng cho dòng đầu tiên của phần tử p:

p::first-line {
    color: red;
    font-family: monospace;
    font-size: 120%;
}

Áp dụng cho HTML:

<p>HTML là ngôn ngữ đánh dấu siêu văn bản, là ngôn ngữ đặc biệt dùng để 
thiết kế nội dung các trang web và được thể hiện bằng trình duyệt.</p>
<p>CSS là ngôn ngữ định dạng đặc biệt được dùng để mô tả cách thể hiện 
của văn bản HTML trong trang web.</p>

Kết quả: CSS sẽ tự động tạo khuôn cho dòng đầu tiên của tất cả các phần tử p với màu đỏ, phông chữ có độ rộng đều nhau và kích thước lớn hơn 1,2 lần so với bình thường.

Lưu ý quan trọng: Dòng đầu tiên này không phụ thuộc vào văn bản mà chỉ phụ thuộc vào độ rộng của cửa sổ trình duyệt. Nếu thu nhỏ cửa sổ, dòng đầu tiên sẽ ngắn lại.

Ví dụ minh họa cho bộ chọn pseudo-element (Ảnh Sách KNTT)
Ví dụ minh họa cho bộ chọn pseudo-element (Ảnh Sách KNTT)

2. Mức độ ưu tiên khi áp dụng CSS

Khi có nhiều mẫu định dạng có thể áp dụng cho một phần tử HTML nào đó trên trang web, CSS sẽ áp dụng định dạng theo thứ tự ưu tiên.

2.1. Thứ tự ưu tiên của CSS

Quy định về chọn mẫu định dạng ưu tiên từ cao xuống thấp của CSS được mô tả trong bảng sau:

STT Loại CSS Giải thích
1 !important Các thuộc tính trong CSS với từ khóa !important sẽ có mức ưu tiên cao nhất
2 CSS trực tiếp (inline CSS) Các định dạng nằm ngay trong phần tử HTML với thuộc tính style
3 CSS liên quan đến kích thước thiết bị (Media type) Các định dạng dùng để điều khiển cách hiển thị thông tin phụ thuộc vào kích thước màn hình của thiết bị
4 Trọng số CSS (Specificity) Mỗi định dạng CSS có trọng số riêng. Định dạng CSS có trọng số cao nhất sẽ được áp dụng
5 Nguyên tắc thứ tự cuối cùng (Rule order) Nếu có nhiều mẫu định dạng với cùng trọng số thì định dạng ở vị trí cuối cùng sẽ được áp dụng
6 Kế thừa từ CSS cha Nếu không tìm thấy mẫu định dạng tương ứng thì sẽ lấy thông số định dạng CSS kế thừa từ phần tử cha
7 Mặc định theo trình duyệt Nếu không có bất cứ định dạng CSS nào thì trình duyệt quyết định thể hiện nội dung mặc định

Ví dụ về Media type:

@media only screen and (max-width: 600px) {
    body {font-size: 150%;}
}

Mẫu định dạng trên sẽ tăng kích thước chữ lên 150% nếu chiều ngang màn hình nhỏ hơn 600px.

2.2. Cách tính trọng số CSS

Cách tính trọng số của CSS rất đơn giản, dựa trên giá trị trọng số của từng thành phần của bộ chọn (selector) trong mẫu định dạng. Trọng số của mẫu định dạng sẽ được tính bằng tổng của các giá trị thành phần đó.

Giá trị của các thành phần bộ chọn:

STT Bộ chọn Giá trị đóng góp trọng số
1 Mã định danh (ID) 100
2 Lớp, lớp giả, bộ chọn kiểu thuộc tính (Class, pseudo-class, attribute selector) 10
3 Phần tử, phần tử giả (element, pseudo-element) 1
4 * (universal selector) 0

Một số ví dụ tính trọng số:

Bộ chọn Trọng số Giải thích
p > em 2 Bộ chọn có hai phần tử là p và em, vậy trọng số bằng 1 + 1 = 2
.test #p11 110 Bộ chọn bao gồm 1 class và 1 id, vậy trọng số bằng 10 + 100 = 110
p.test em.more 22 Bộ chọn có hai phần tử (p, em) và hai class (test, more), vậy trọng số bằng 2 + 20 = 22
p > em#p123 102 Bộ chọn có hai phần tử (p, em) và một id, vậy trọng số bằng 2 + 100 = 102

Nguyên tắc quan trọng: Nếu có một dãy các mẫu định dạng CSS cùng có thể áp dụng cho một phần tử HTML thì tính kế thừa CSS và nguyên tắc thứ tự cuối cùng được xếp dưới trọng số CSS. Khi đó CSS sẽ tính trọng số các mẫu định dạng, cái nào có trọng số lớn hơn sẽ được ưu tiên áp dụng.

Thầy Phạm Thành Danh

Thầy Phạm Thành Danh

(Người kiểm duyệt, ra đề)

Chức vụ: Trưởng ban biên soạn môn Tin Học THPT

Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1

Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa