CSS Specificity – Cách sử dụng Specificity trong CSS

CSS Specificity là một cách để xác định loại quy tắc CSS nào sẽ được áp dụng cho một phần tử HTML khi có nhiều quy tắc CSS đang áp dụng đến cùng một phần tử. Khi một trình duyệt web hiển thị một phần tử, nó sẽ kiểm tra các quy tắc CSS khác nhau và áp dụng quy tắc có giá trị cụ thể nhất cho phần tử đó.

Lập Trình Viên mời bạn cùng tham khảo chi tiết nội dung bên dưới. Bài viết này nằm trong chuyên đề hướng dẫn CSS từ cơ bản đến nâng cao tại dự án Phát Triển Website.

Tổng quan CSS Specificity là gì

CSS Specificity được tính bằng cách sử dụng các bộ chọn CSS khác nhau, bao gồm inline styles, ID selectors, class selectors, attribute selectors, pseudo-classes và element selectors, và nó được sử dụng để xác định quy tắc nào sẽ được ưu tiên áp dụng cho một phần tử HTML cụ thể.

Mỗi bộ chọn có một mức độ đặc thù khác nhau, với các bộ chọn đặc thù cao hơn có trọng số cao hơn trong việc xác định quy tắc CSS được áp dụng cho một phần tử HTML. Đây là cách mà trình duyệt web xác định quy tắc CSS nào sẽ được áp dụng cho một phần tử HTML khi có nhiều quy tắc CSS đang áp dụng đến cùng một phần tử.

CSS Specificity được sử dụng bởi những người thiết kế web và phát triển web để xác định quy tắc CSS được ưu tiên áp dụng cho phần tử HTML. Khi các quy tắc CSS khác nhau được áp dụng đến cùng một phần tử, CSS Specificity giúp trình duyệt web xác định quy tắc nào sẽ được áp dụng để hiển thị phần tử đó theo cách mong muốn.

CSS Specificity là một cách để xác định loại quy tắc CSS nào sẽ được áp dụng cho một phần tử HTML khi có nhiều quy tắc CSS đang áp dụng đến cùng một phần tử. Các bộ chọn CSS khác nhau có mức độ đặc thù khác nhau và được đánh trọng số khác nhau trong việc xác định quy tắc CSS được áp dụng cho một phần tử HTML.

Hướng dẫn CSS Specificity

  1. Sử dụng Inline styles cho các phần tử được đặc thù riêng biệt.
  2. Sử dụng ID selectors cho các phần tử duy nhất trên một trang web.
  3. Sử dụng class selectors, attribute selectors và pseudo-classes cho các phần tử có tính đặc thù cao hơn so với element selectors.
  4. Tránh sử dụng !important nếu có thể, vì nó có thể gây ra một số vấn đề về quy tắc CSS.

Dưới đây là một ví dụ HTML với thuộc tính CSS Specificity:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Specificity</title>
  <style>
    body {
      font-family: sans-serif;
    }

    h1 {
      color: red;
    }

    .my-class {
      color: blue;
    }

    * .my-class {
      color: green;
    }
  </style>
</head>
<body>
  <h1 class="my-class">This is a red heading.</h1>
  <h1 class="my-class">This is also a red heading.</h1>
  <h1>This is a blue heading.</h1>
</body>
</html>

Trong ví dụ trên, chúng ta có ba thẻ h1 với các kiểu CSS khác nhau. Thẻ h1 đầu tiên có class my-class, thẻ h1 thứ hai cũng có class my-class, và thẻ h1 thứ ba không có class nào.

Chúng ta có thể sử dụng thuộc tính CSS Specificity để xác định quy tắc CSS nào sẽ được áp dụng cho mỗi thẻ h1.

Quy tắc có specificity cao nhất sẽ được áp dụng.

Trong ví dụ trên, quy tắc có specificity cao nhất là .my-class. Quy tắc này có specificity là 10, vì nó sử dụng một class.

Quy tắc tiếp theo có specificity cao nhất là * .my-class. Quy tắc này có specificity là 11, vì nó sử dụng một wildcard và một class.

Quy tắc cuối cùng có specificity thấp nhất là h1. Quy tắc này có specificity là 1, vì nó chỉ sử dụng một loại phần tử.

Vì vậy, thẻ h1 đầu tiên và thẻ h1 thứ hai sẽ có màu xanh lam, vì cả hai đều tuân theo quy tắc .my-class. Thẻ h1 thứ ba sẽ có màu đỏ, vì nó không tuân theo bất kỳ quy tắc nào có specificity cao hơn.

Dưới đây là bảng tóm tắt các specificity của các quy tắc CSS trong ví dụ trên:

Quy tắcSpecificity
h11
.my-class10
* .my-class11

Bạn có thể sử dụng specificity để tạo các quy tắc CSS linh hoạt hơn. Ví dụ: bạn có thể sử dụng quy tắc chung cho tất cả các thẻ h1 và sau đó sử dụng các quy tắc cụ thể hơn để ghi đè các cài đặt cho các thẻ h1 cụ thể.

Ưu và Nhược điểm CSS Specificity

Ưu điểm của CSS Specificity:

  • Xác định rõ quy tắc CSS được áp dụng cho phần tử HTML
  • Giúp người thiết kế web và phát triển web kiểm soát hiển thị trang web
  • Tính đặc thù giúp chọn ra quy tắc CSS phù hợp nhất cho mỗi phần tử.

Nhược điểm của CSS Specificity:

  • Phức tạp để tính toán và hiểu rõ cách làm việc của nó
  • Khó khăn trong việc debug và xác định lỗi CSS
  • Có thể dẫn đến việc sử dụng !important quá nhiều, gây ra những vấn đề về quy tắc CSS

Lời khuyên CSS Specificity là gì

  • Sử dụng Inline styles cho các phần tử được đặc thù riêng biệt.
  • Sử dụng ID selectors cho các phần tử duy nhất trên một trang web.
  • Sử dụng class selectors, attribute selectors và pseudo-classes cho các phần tử có tính đặc thù cao hơn so với element selectors.
  • Tránh sử dụng !important nếu có thể, vì nó có thể gây ra một số vấn đề về quy tắc CSS.
  • Nên sử dụng trình kiểm tra CSS như Chrome DevTools để giúp xác định lỗi CSS.

Tại sao cần phải sử dụng CSS Specificity?

Vì khi có nhiều quy tắc CSS áp dụng đến cùng một phần tử HTML, CSS Specificity giúp trình duyệt web xác định quy tắc nào sẽ được áp dụng để hiển thị phần tử đó theo cách mong muốn.

Làm thế nào để tính toán CSS Specificity?

Mỗi bộ chọn CSS có một trọng số khác nhau, với các bộ chọn đặc thù cao hơn có trọng số cao hơn trong việc xác định quy tắc CSS được áp dụng cho một phần tử HTML. Ví dụ, inline styles có độ đặc thù cao nhất và có trọng số cao nhất, trong khi element selectors có độ đặc thù thấp nhất và có trọng số thấp nhất.

Có bao nhiêu loại bộ chọn CSS khác nhau?

Có sáu loại bộ chọn CSS khác nhau, bao gồm inline styles, ID selectors, class selectors, attribute selectors, pseudo-classes và element selectors.

Tôi có thể sử dụng !important khi nào?

Nên tránh sử dụng !important nếu có thể, vì nó có thể gây ra một số vấn đề về quy tắc CSS. Tuy nhiên, khi cần thiết, bạn có thể sử dụng !important để ưu tiên áp dụng một quy tắc CSS nhất định cho một phần tử HTML.

Làm thế nào để kiểm tra CSS Specificity của một quy tắc CSS?

Bạn có thể sử dụng trình kiểm tra CSS như Chrome DevTools để xem CSS Specificity của một quy tắc CSS cụ thể. Chỉ cần chọn phần tử HTML và xem các quy tắc CSS đang áp dụng cho phần tử đó, và Chrome DevTools sẽ hiển thị CSS Specificity của mỗi quy tắc.