Trong thế giới phát triển web, việc kiểm soát và định kiểu cho các phần tử HTML là yếu tố then chốt để tạo ra giao diện người dùng hấp dẫn và chuyên nghiệp. CSS selector đóng vai trò là công cụ đắc lực, giúp các nhà phát triển web "chỉ mặt gọi tên" chính xác những yếu tố cần áp dụng phong cách. Bài viết này sẽ đi sâu vào bản chất, phân loại và cách sử dụng hiệu quả các loại CSS selector, đặc biệt trong bối cảnh năm 2026.
Tổng quan về các loại CSS selector
Về cơ bản, CSS selector được chia thành nhiều loại dựa trên cách chúng xác định phần tử mục tiêu. Mỗi loại có cú pháp và mục đích sử dụng riêng biệt, tạo nên sự linh hoạt trong việc thiết kế giao diện.

Theo các tài liệu tham khảo uy tín như CSS selector w3school, chúng ta có thể phân loại chúng thành các nhóm chính sau:
- Simple selectors (Bộ chọn đơn giản): Bao gồm bộ chọn theo tên phần tử (element selector), bộ chọn theo ID (id selector), và bộ chọn theo lớp (class selector).
- Combinator selectors (Bộ chọn kết hợp): Sử dụng để chọn các phần tử dựa trên mối quan hệ giữa chúng (ví dụ: con cháu, anh em).
- Pseudo-class selectors (Bộ chọn giả lớp): Chọn phần tử dựa trên trạng thái của chúng (ví dụ: `:hover`, `:focus`, `:nth-child`).
- Pseudo-elements selectors (Bộ chọn giả phần tử): Chọn và định kiểu một phần tử của phần tử đó (ví dụ: `::before`, `::after`, `::first-line`).
- Attribute selectors (Bộ chọn thuộc tính): Chọn phần tử dựa trên sự tồn tại hoặc giá trị của một thuộc tính HTML.
Các loại bộ chọn đơn giản (Simple Selectors)
Đây là những bộ chọn cơ bản nhất, dễ dàng áp dụng và thường là điểm khởi đầu cho bất kỳ ai học CSS.
1. Element Selector (Bộ chọn phần tử)
Bộ chọn này sử dụng tên của thẻ HTML để xác định các phần tử. Nếu bạn muốn áp dụng kiểu cho tất cả các đoạn văn bản, bạn sẽ sử dụng bộ chọn `p`.
Ví dụ:
p { text-align: center; color: red; } Trong ví dụ trên, tất cả các thẻ <p> trên trang sẽ được căn giữa và có màu chữ đỏ.
2. Class Selector (Bộ chọn lớp)
Bộ chọn lớp sử dụng thuộc tính class của phần tử HTML. Để định kiểu cho các phần tử có cùng một lớp, bạn sử dụng dấu chấm (.) theo sau là tên lớp.
Ví dụ:
.highlight { background-color: yellow; } Mọi phần tử HTML có thuộc tính class="highlight" sẽ có nền màu vàng. Ưu điểm của bộ chọn lớp là khả năng áp dụng cho nhiều phần tử, ngay cả khi chúng thuộc các loại thẻ khác nhau.

3. ID Selector (Bộ chọn ID)
Bộ chọn ID sử dụng thuộc tính id của phần tử HTML. Mỗi giá trị id trên một trang web phải là duy nhất. Để sử dụng bộ chọn này, bạn dùng dấu thăng (#) theo sau là giá trị ID.
Ví dụ:
#main-header { font-size: 32px; color: blue; } Chỉ phần tử duy nhất có thuộc tính id="main-header" mới nhận được kiểu này. Bộ chọn ID thường dùng để định kiểu cho một phần tử quan trọng, duy nhất trên trang.
4. Attribute Selector (Bộ chọn thuộc tính)
Đây là nhóm bộ chọn cho phép bạn lựa chọn các phần tử dựa trên sự tồn tại hoặc giá trị của một thuộc tính HTML. CSS selector attribute mang lại khả năng tùy biến cao.
Cú pháp cơ bản:
[attribute]: Chọn phần tử có thuộc tínhattribute, không quan tâm giá trị.[attribute=value]: Chọn phần tử có thuộc tínhattributevới giá trị chính xác làvalue.[attribute~=value]: Chọn phần tử có thuộc tínhattributechứa giá trịvaluetrong danh sách các giá trị cách nhau bởi khoảng trắng.[attribute|=value]: Chọn phần tử có thuộc tínhattributebắt đầu bằngvaluetheo sau là dấu gạch ngang (-) hoặc có giá trị chính xác làvalue.[attribute^=value]: Chọn phần tử có thuộc tínhattributebắt đầu bằng chuỗivalue.[attribute$=value]: Chọn phần tử có thuộc tínhattributekết thúc bằng chuỗivalue.[attribute*=value]: Chọn phần tử có thuộc tínhattributechứa chuỗivalueở bất kỳ đâu.
Ví dụ:
input[type="text"] { border: 1px solid #ccc; } Đoạn mã này sẽ áp dụng kiểu cho tất cả các thẻ <input> có thuộc tính type là "text".

Các bộ chọn kết hợp (Combinator Selectors)
Các bộ chọn này cho phép bạn xác định các phần tử dựa trên mối quan hệ phân cấp hoặc vị trí tương đối giữa chúng trong cấu trúc DOM.
1. Descendant Selector (Bộ chọn hậu duệ)
Chọn tất cả các phần tử là hậu duệ (con, cháu, chắt...) của một phần tử cụ thể. Sử dụng khoảng trắng giữa các bộ chọn.
div p { color: green; } Chọn tất cả các thẻ <p> nằm bên trong bất kỳ thẻ <div> nào.
2. Child Selector (Bộ chọn con)
Chọn các phần tử là con trực tiếp của một phần tử khác. Sử dụng ký tự >.
ul > li { list-style-type: square; } Chọn tất cả các thẻ <li> là con trực tiếp của thẻ <ul>.
3. Adjacent Sibling Selector (Bộ chọn anh em liền kề)
Chọn phần tử đứng ngay sau một phần tử khác, và cả hai phải có cùng cha. Sử dụng dấu cộng (+).
h2 + p { margin-top: 0; } Chọn thẻ <p> đứng ngay sau một thẻ <h2>.
4. General Sibling Selector (Bộ chọn anh em nói chung)
Chọn tất cả các phần tử đứng sau một phần tử khác, và cả hai phải có cùng cha. Sử dụng dấu ngã (~).
h2 ~ p { font-style: italic; } Chọn tất cả các thẻ <p> đứng sau một thẻ <h2> (không nhất thiết phải liền kề).
Pseudo-classes và Pseudo-elements
Đây là những công cụ mạnh mẽ cho phép bạn chọn các phần tử dựa trên trạng thái hoặc định vị một phần tử mà không cần thêm thuộc tính vào HTML.
Pseudo-classes
Chọn các phần tử dựa trên trạng thái đặc biệt của chúng.
:hover: Khi người dùng di chuột qua phần tử.:focus: Khi phần tử nhận được sự tập trung (ví dụ: ô nhập liệu).:nth-child(n): Chọn phần tử thứntrong số các anh em của nó.:first-child,:last-child: Chọn phần tử đầu tiên hoặc cuối cùng trong số các anh em.:target: Chọn phần tử mà URL hiện tại trỏ tới thông qua fragment identifier.
Ví dụ:
a:hover { text-decoration: underline; } Pseudo-elements
Cho phép định kiểu một phần của phần tử.
::before: Chèn nội dung trước phần tử.::after: Chèn nội dung sau phần tử.::first-line: Định kiểu cho dòng đầu tiên của một khối văn bản.::selection: Định kiểu cho phần văn bản mà người dùng chọn.
Ví dụ:
p::first-letter { font-size: 2em; float: left; margin-right: 0.1em; } Đoạn mã này sẽ làm cho chữ cái đầu tiên của mỗi đoạn văn bản có kích thước lớn hơn và nổi bật.

Ứng dụng thực tế và Lời khuyên
Việc nắm vững các loại css selector không chỉ giúp bạn viết code CSS hiệu quả hơn mà còn là nền tảng để tối ưu hóa SEO cho website. Khi công cụ tìm kiếm quét trang web của bạn, chúng sử dụng các selector để hiểu cấu trúc và ý nghĩa của nội dung.
Tối ưu SEO với CSS Selector
Một cấu trúc HTML sạch sẽ, logic cùng với việc sử dụng selector phù hợp sẽ giúp công cụ tìm kiếm dễ dàng lập chỉ mục nội dung của bạn. Ví dụ, việc sử dụng các thẻ heading (h2, h3) một cách có hệ thống và định kiểu chúng bằng selector tương ứng sẽ giúp Google hiểu rõ bố cục và tầm quan trọng của từng phần. Bộ chọn thuộc tính (css selector attribute) cũng có thể hữu ích trong việc nhắm mục tiêu các phần tử cụ thể cho các mục đích SEO.
Lựa chọn bộ chọn phù hợp
Khi lựa chọn bộ chọn, hãy ưu tiên sự rõ ràng và duy nhất.
| Loại bộ chọn | Ưu điểm | Nhược điểm | Khi nào nên dùng |
|---|---|---|---|
| Element Selector | Đơn giản, áp dụng cho tất cả | Không phân biệt, có thể ảnh hưởng không mong muốn | Định kiểu mặc định cho tất cả các thẻ cùng loại. |
| Class Selector | Linh hoạt, tái sử dụng cao | Cần thêm thuộc tính class vào HTML | Áp dụng kiểu cho nhiều phần tử, nhóm các phần tử có chung đặc điểm. |
| ID Selector | Nhắm mục tiêu chính xác, độ ưu tiên cao | Chỉ dùng cho 1 phần tử duy nhất | Định kiểu cho các phần tử độc nhất, quan trọng trên trang. |
| Attribute Selector | Chọn lọc dựa trên thuộc tính, không cần sửa HTML | Cú pháp phức tạp hơn | Chọn các phần tử có thuộc tính hoặc giá trị thuộc tính cụ thể, ví dụ như các liên kết có định dạng target="_blank". |
| Combinators, Pseudo-classes, Pseudo-elements | Khả năng lựa chọn mạnh mẽ, tinh vi | Đòi hỏi hiểu biết sâu về cấu trúc DOM và CSS | Các trường hợp định kiểu phức tạp, dựa trên ngữ cảnh hoặc trạng thái. |
Sử dụng CSS Selector Reference
Để tham khảo chi tiết về cú pháp và các tùy chọn, bạn nên thường xuyên truy cập các nguồn tài liệu đáng tin cậy như css selector reference trên MDN Web Docs hoặc W3Schools. Các trang này cung cấp thông tin cập nhật và ví dụ minh họa phong phú.
Bằng việc kết hợp các loại selector khác nhau, bạn có thể tạo ra các quy tắc CSS vừa mạnh mẽ, vừa dễ quản lý, góp phần xây dựng nên những website hiện đại và tối ưu. Hãy luyện tập thường xuyên để làm chủ công cụ CSS selector!