CĂN BẢN
CSS3
CSS RESPONSIVE
CSS PARALLAX
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Tìm hiểu về Specificity trong CSS

Trong bài học này mình sẽ cùng tìm hiểu về Specificity trong CSS là gì.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Specificity trong CSS là gì?

Trước khi hiểu specificity trong CSS là gì, mình sẽ lấy một ví dụ sau đây cho các bạn dễ hiểu:

Ví dụ RUN
<!DOCTYPE html>
<html>
   <head>
      <style>
        #test {
          background-color: red;
        }
        div {
          background-color: yellow;
        }
      </style>
   </head>
   <body>
      <div id="test">Đây là phần tử div</div>
   </body>
</html>

Như vậy ví dụ ở phía trên, việc thiết lập màu nền (background-color) cho phần tử div được thiết lập 2 lần đó là selector id #test có màu nền là màu đỏ, selector div có màu nền là màu vàng

Vậy phần tử div sẽ lấy màu nền (background-color) là màu đỏ hay màu vàng. Các bạn bấm vào nút RUN để xem kết quả nhé.

Bài viết này được đăng tại [free tuts .net]

Và kết quả của ví dụ trên là màu đỏ. Vì sao vậy? Đó là vì mỗi loại selector như id, class, element... sẽ có độ ưu tiên khác nhau, trình duyệt (browser) sẽ dựa vào nguyên tắc về độ ưu tiên của mỗi loại selector, loại selector nào có độ ưu tiên cao nhất sẽ được áp dụng.

Như vậy mình hiểu specificity trong CSS theo cách đơn giản nhất đó là quy ước về độ ưu tiên của mỗi loại selector như id, class, element...

Vậy độ ưu tiên đó như thế nào mình sẽ cùng tìm hiểu trong hệ thống phân cấp specificity (Specificity Hierarchy) trong mục 2 nhé.

2. Specificity Hierarchy

Mỗi loại selector sẽ một có vị trí trong hệ thống phân cấp specificity. Các loại selector sau đây được sắp xếp theo thứ tự ưu tiên từ trên xuống dưới:

  • Inline styles: thiết lập các thuộc tính CSS trực tiếp bên trong một phần tử. Ví dụ: <h1 style="color: red;">, <span style="color: yellow;"></span>
  • IDs: thiết lập các thuộc tính CSS cho một phần tử được định danh duy nhất trong một trang, như #menu, #header
  • Classes, attributes and pseudo-classes: ví dụ class như .menu, .header ... attributes như  a[target] và pseudo-classes như là :hover, :focus etc.
  • Elements and pseudo-elements: element như là h1, h2, div, p... và pseudo-elements như là  ::before, ::after, ::selection.

Để hiểu rõ hơn về các loại selector như inline, id, class, element.... thì các bạn xem lại các bài học phía trên nhé :)

Ở mục tiếp theo mình sẽ cùng tìm hiểu về cách tính specificity như thế nào?

3. Cách tính Specificity

Specificity được tính là những con số nguyên dương. Cụ thể như sau:

  • Thuộc tính style inline là 1000
  • ID là 100
  • attribute, class hoặc pseudo-class là 10
  • element hoặc pseudo-element là 1
Ví dụ RUN
<!DOCTYPE html>
<html>
<head>
<style>
span {background-color: red;}
#test span {
background-color: yellow;
}
</style>
</head>
<body>
<div id="test"><span style="background-color: green">Đây là thẻ span<br />
</body>
</html>

Chúng ta tính độ ưu tiên từ ví dụ trên như sau:

Giả sử:

A: span {background-color: red;}
B: #test span {
background-color: yellow
}
C: <div id="test"><span style="background-color: green">Đây là thẻ span</span></div>

Ta có:

A là 1 (một phần tử là span)

B là 101 (một ID là test, là một phần tử là span)

C là 1000 (inline style)

Bởi vì 1 < 101 < 1000, quy tắc (C) có độ ưu tiên cao nhất, nên màu nền cho phần tử span là màu xanh lá cây.

Và kết quả của ví dụ trên:

css specificity cal PNG

Tiếp theo mình sẽ tìm hiểu một số quy tắc cho specificity.

4. Các quy tắc cho specificity

Công thức tính ra độ ưu tiên cho từng loại selector là những con số như 1000, 10, 1, 100, làm chúng ta rất khó nhớ. Có một số quy tắc thường hay được sử dụng sau sẽ làm chúng ta dễ nhớ hơn :)

Specificity bằng nhau (equal)

Nếu các selector có độ ưu tiên bằng nhau cùng thiết lập chung thuộc tính CSS cho một phần tử nào đó thì selector nào gần phần tử đó nhất sẽ được áp dụng.

Như ở ví dụ này, màu nền (background-color) của phần tử div sẽ là màu đỏ.

Ví dụ RUN
div {background-color: yellow;}
div {background-color: red;}

ID selectors sẽ có độ ưu tiên cao hơn attribute selectors

Như ở ví dụ sau, màu nền (background-color) của phần tử div sẽ là màu xanh lá cây.

Ví dụ RUN
div#test {background-color: green;}
#test {background-color: yellow;}
div[id=test] {background-color: blue;}

Class selector đánh bại bất kỳ element selectors

Như ở ví dụ sau, màu nền (background-color) của phần tử div sẽ là màu vàng.

Ví dụ RUN
.test {background-color: yellow;}
div {background-color: red;}

Universal selector (*) and giá trị thừa kế (inherited ) có specificity là 0 

universal selector (*) là tất cả phần tử của HTML.

(*) có specificity là 0 và các thuộc tính có giá trị là thừa kế (inherited) cũng có specificity là 0

5. Kết luận

Như vậy là mình đã trình bày xong về specificity trong CSS. Các bạn chỉ cần nhớ độ ưu tiên của loại selector và một số quy tắc của specificity là có thể vận dụng tốt được rồi. :)

Cuối cùng trong quá trình viết không tránh khỏi sai sót, nếu có điều gì không hợp lý rất mong nhận được sự góp ý chân thành của các bạn để bài viết của mình ngày một tốt hơn.

Cám ơn các bạn đã đọc bài viết. Chúc các bạn vận dụng tốt.

Tham khảo: w3school.com

Cùng chuyên mục:

Tạo Trang web E-commerce  từ HTML & CSS

Tạo Trang web E-commerce từ HTML & CSS

Validate form bằng HTML5

Validate form bằng HTML5

Trước đây chúng ta hay validate form bằng Javascript, nhưng ...

Thẻ aside trong HTML5

Thẻ aside trong HTML5

Mình cũng không rõ người ta tạo ra thẻ này làm gì, nhưng nếu xét…

Thẻ hgroup trong HTML5

Thẻ hgroup trong HTML5

hgroup là một thẻ được thêm vào kể từ phiên bản ...

Thẻ header trong HTML5

Thẻ header trong HTML5

Nếu nhìn qua một trang web được xây dựng bằng HTML5 thì bạn ...

Các thẻ HTML tạo form thu thập dữ liệu

Các thẻ HTML tạo form thu thập dữ liệu

Trước khi bắt đầu thì bạn phải hiểu khái niệm form dữ liệu là ...

Tạo background và đường viền cho thẻ HTML

Tạo background và đường viền cho thẻ HTML

Để tạo màu nền cho một thẻ HTML bất kì thì ta sử dụng thuộc…

Tạo menu một cấp bằng HTML đơn giản

Tạo menu một cấp bằng HTML đơn giản

Để làm menu 1 cấp thì có rất nhiều giải pháp. Bạn có thể sử…

Tạo HTML danh sách bài viết đơn giản

Tạo HTML danh sách bài viết đơn giản

Mục đích mình đưa ra bài tập này là giúp các bạn hiểu được cách…

Tạo bổ cục layout HTML đơn giản

Tạo bổ cục layout HTML đơn giản

Qua bài học này bạn sẽ biết cách tạo một file style riêng để ..

Phân biệt ID và Class trong HTML

Phân biệt ID và Class trong HTML

Mỗi thẻ HTML đều có những thuộc tính riêng và khác nhau. Tuy nhiền ..

Cách dùng thẻ div trong HTML để tạo các khối giao diện

Cách dùng thẻ div trong HTML để tạo các khối giao diện

Thẻ div đóng vai trò rất quan trọng, nó được dùng để tạo ...

Phân biệt thẻ HTML Block và Inline

Phân biệt thẻ HTML Block và Inline

Có bao giờ bạn thắc mắc rằng, tại sao nội dung ...

Thuộc tính style trong HTML

Thuộc tính style trong HTML

Do chúng ta chưa học CSS nên mình sẽ không nói ...

Thẻ title trong HTML

Thẻ title trong HTML

Cách sử dụng thẻ title html ...

Thẻ style trong HTML

Thẻ style trong HTML

Style là một thẻ HTML bình thường, nó có công dụng là xác ...

Thẻ base trong HTML

Thẻ base trong HTML

Cách sử dụng thẻ base trong html ...

Thẻ link trong HTML

Thẻ link trong HTML

Cách sử dụng thẻ html ...

Thẻ meta trong HTML

Thẻ meta trong HTML

Cách sử dụng thẻ meta html ...

Thẻ script trong HTML

Thẻ script trong HTML

Cách sử dụng thẻ script html ...

Top