CSS - Đặc quyền cụ thể

Chào mừng các bạn, những học sinh thân yêu, đến với hành trình đầy thú vị vào thế giới của Đặc quyền cụ thể CSS! Là một giáo viên máy tính gần gũi với nhiều năm kinh nghiệm, tôi rất vui mừng được hướng dẫn các bạn qua khái niệm quan trọng này. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - chúng ta sẽ bắt đầu từ cơ bản và dần dần nâng cao. Vậy, hãy cầm một tách cà phê (hoặc trà, nếu bạn thích thế) và cùng nhau bước vào!

CSS - Specificity

Đặc quyền cụ thể CSS - Các nhóm trọng số của Selector

Hãy tưởng tượng đặc quyền cụ thể CSS như một cuộc thipopularità giữa các selector. Mỗi selector có riêng "trọng số" hoặc tầm quan trọng của mình, và selector có trọng số cao nhất sẽ giành quyền định dạng một phần tử. Đó giống như là người cool nhất trong trường - người cool hơn sẽ có nhiều ảnh hưởng hơn!

Có bốn nhóm trọng số selector chính, từ cao đến thấp:

  1. Style nội tuyến
  2. ID
  3. Class, thuộc tính và伪类
  4. Phần tử và伪元素

Hãy cùng xem xét chi tiết từng nhóm này.

Đặc quyền cụ thể CSS - Điểm của từng loại Selector

Để dễ hiểu hơn, chúng ta có thể gán điểm cho từng loại selector. Hãy tưởng tượng như một trò chơi mà mỗi selector nhận được điểm dựa trên tầm quan trọng của mình. Dưới đây là bảng dễ nhớ:

Loại Selector Điểm Ví dụ
Style nội tuyến 1000 <p style="color: red;">
ID 100 #header
Class, thuộc tính,伪类 10 .button, [type="text"], :hover
Phần tử và伪元素 1 p, ::before

Bây giờ, hãy xem điều này trong hành động với một số ví dụ mã:

/* Đặc quyền cụ thể: 1 */
p {
color: blue;
}

/* Đặc quyền cụ thể: 10 */
.text {
color: red;
}

/* Đặc quyền cụ thể: 100 */
#main-heading {
color: green;
}

Trong ví dụ này, nếu chúng ta có một phần tử như <p id="main-heading" class="text">Hello, World!</p>, màu chữ sẽ là xanh lá cây vì selector ID có độ đặc quyền cao nhất.

Đặc quyền cụ thể CSS - Các trường hợp ngoại lệ

Bây giờ, bạn có thể đang nghĩ, "Nhưng thầy, có ngoại lệ nào cho các quy tắc này không?" Câu hỏi tuyệt vời! Có một ngoại lệ quan trọng: tuyên bố !important.

Khi bạn thêm !important vào một thuộc tính, nó sẽ trở thành người chiến thắng cuối cùng, bất kể đặc quyền cụ thể. Đó giống như có một thẻ "Thoát khỏi nhà tù miễn phí" trong Monopoly - hãy sử dụng nó một cách khôn ngoan!

p {
color: blue !important;
}

#main-heading {
color: green;
}

Trong trường hợp này, mặc dù selector ID có độ đặc quyền cao hơn, quy tắc !important trên selector p sẽ làm cho chữ có màu xanh lam.

Đặc quyền cụ thể CSS - Xử lý các vấn đề

Đôi khi, bạn có thể gặp phải những vấn đề về đặc quyền cụ thể. Đừng lo lắng; điều đó xảy ra với tất cả chúng ta! Dưới đây là một số mẹo để xử lý các vấn đề về đặc quyền cụ thể:

  1. Tránh sử dụng !important除非绝对必要。
  2. Thử sử dụng class thay vì ID khi có thể.
  3. Chú ý đến cấu trúc selector của bạn và cố gắng giữ cho nó đơn giản.
  4. Sử dụng các máy tính đặc quyền cụ thể nếu bạn không chắc chắn về trọng số của selector.

Đặc quyền cụ thể CSS - Các điểm cần nhớ

Hãy tóm tắt một số điểm quan trọng cần nhớ về đặc quyền cụ thể CSS:

  1. Đặc quyền cụ thể được tính toán dựa trên các thành phần của selector.
  2. Style nội tuyến luôn có độ đặc quyền cao nhất (nếu không bị át bởi !important).
  3. ID có độ đặc quyền cao hơn class, mà có độ đặc quyền cao hơn phần tử.
  4. Selector cụ thể hơn có độ đặc quyền cao hơn.
  5. Khi có độ đặc quyền bằng nhau, selector cuối cùng trong tệp CSS sẽ thắng.

Đặc quyền cụ thể CSS - Độ đặc quyền bằng nhau (Cuối cùng thắng)

Khi hai selector có độ đặc quyền bằng nhau, selector xuất hiện cuối cùng trong tệp CSS sẽ thắng. Đó giống như một cuộc đuaphoto finish - người.crosses the line.last giành được giải thưởng!

.button {
background-color: blue;
}

.button {
background-color: red;
}

Trong trường hợp này, nút sẽ có màu đỏ vì nó là tuyên bố cuối cùng.

Đặc quyền cụ thể CSS - Hierarchy of Specificity (Inline Style)

Style nội tuyến là nhà vô địch hạng nặng của đặc quyền cụ thể. Nó có độ đặc quyền 1000, cao hơn bất kỳ selector nào trong stylesheet của bạn. Ví dụ:

<p style="color: red;" class="blue-text" id="green-text">What color am I?</p>
#green-text {
color: green;
}

.blue-text {
color: blue;
}

Trong trường hợp này, văn bản sẽ là màu đỏ vì style nội tuyến át cả selector ID và class.

Đặc quyền cụ thể CSS - Hierarchy of Specificity (ID declaration)

Sau style nội tuyến, selector ID nắm giữ quyền lực tối cao. Nó có độ đặc quyền 100, đánh bại class và phần tử. Hãy xem một ví dụ:

<p id="special-paragraph" class="normal-text">I'm a special paragraph!</p>
#special-paragraph {
color: purple;
}

.normal-text {
color: black;
}

p {
color: blue;
}

Ở đây, văn bản sẽ là màu tím vì selector ID có độ đặc quyền cao nhất trong số các quy tắc CSS.

Đặc quyền cụ thể CSS - Hierarchy of Specificity (Class declaration)

Selector class đứng sau trong hệ thống phân cấp, với độ đặc quyền 10. Nó cụ thể hơn phần tử nhưng ít cụ thể hơn ID. Ví dụ:

<p class="highlight">This is a highlighted paragraph.</p>
.highlight {
background-color: yellow;
}

p {
background-color: white;
}

Trong ví dụ này, đoạn văn sẽ có nền vàng vì selector class có độ đặc quyền cao hơn phần tử.

Đặc quyền cụ thể CSS - Hierarchy of Specificity (With !important Rule)

Cuối cùng, hãy nói về lựa chọn hạt nhân: !important. Tuyên bố này át tất cả các tuyên bố khác, bất kể độ đặc quyền của chúng. Nó giống như một lá bài "trump" trong bộ bài CSS của bạn.

p {
color: blue !important;
}

#special-paragraph {
color: red;
}

.highlight {
color: green;
}

Nếu chúng ta áp dụng các style này cho một đoạn văn, nó sẽ là màu xanh lam, ngay cả khi nó có ID special-paragraph hoặc class highlight, vì quy tắc !important.

Và thế là xong, các bạn! Chúng ta đã bao quát tất cả về đặc quyền cụ thể CSS. Nhớ rằng, với quyền lực đặc quyền lớn, đi kèm với trách nhiệm lớn. Sử dụng kiến thức mới của bạn một cách khôn ngoan, và mong rằng styles của bạn luôn cụ thể và selector của bạn luôn rõ ràng!

Credits: Image by storyset