Thứ tự ưu tiên trong css là gì?

Một khía cạnh thú vị của Cascading Style Sheets (CSS) là thứ tự mà các quy tắc được nêu sẽ xác định quy tắc nào được ưu tiên trong trường hợp xung đột hoặc lặp lại. Nói cách khác, các quy tắc CSS có thể "xếp tầng" theo thứ tự ưu tiên của chúng

Show

Vị trí của các quy tắc là một yếu tố trong thứ tự ưu tiên. Thứ tự ưu tiên vị trí là. quy tắc mặc định của trình duyệt, quy tắc biểu định kiểu bên ngoài, kiểu được nhúng và quy tắc kiểu nội tuyến

Các quy tắc cụ thể được ưu tiên hơn các quy tắc chung hơn. Ngoài ra, các quy tắc ở cuối biểu định kiểu được ưu tiên hơn các quy tắc phía trước

Các câu hỏi bạn có thể có bao gồm

  • thác từ vị trí của các quy tắc là gì?
  • Quy định nào cụ thể hơn?
  • Thứ tự của các quy tắc ảnh hưởng đến mức độ ưu tiên như thế nào?

Tiết học này sẽ trả lời những câu hỏi đó



Thứ tự cho mỗi vị trí của quy tắc

Các quy tắc biểu định kiểu xếp tầng có thể được đặt ở một số nơi, bao gồm biểu định kiểu mặc định của trình duyệt, biểu định kiểu bên ngoài, các kiểu được nhúng và các quy tắc kiểu nội tuyến

Quy tắc càng gần với nội dung được tạo kiểu thì mức độ ưu tiên của nó càng cao. Dòng quy tắc bắt đầu từ xa nhất và đi về phía gần nhất với nội dung

Biểu định kiểu trình duyệt có mức độ ưu tiên thấp nhất

Tất cả các trình duyệt đều có biểu định kiểu mặc định tích hợp sẵn. Dòng thác bắt đầu với những phong cách này. Nếu bạn không xác định kiểu, kiểu trình duyệt sẽ được sử dụng. Lưu ý rằng mặc định hơi khác nhau trong mỗi trình duyệt. Bạn nên kiểm tra một trang không có kiểu trong mỗi trình duyệt để thấy bất kỳ sự khác biệt nào.

Biểu định kiểu bên ngoài có quyền ưu tiên tiếp theo

Các kiểu mặc định của trình duyệt bị ghi đè bởi các quy tắc trong biểu định kiểu bên ngoài. Nếu có một số biểu định kiểu bên ngoài, chúng sẽ áp dụng theo thứ tự được liệt kê

phong cách nhúng

Các kiểu được nhúng trong tiêu đề trang là kiểu tiếp theo theo thứ tự ưu tiên. Nếu có nhiều quy tắc, thông thường chúng được đặt trong biểu định kiểu bên ngoài

Kiểu nội tuyến được ưu tiên hàng đầu

Cuối cùng, vì các kiểu nội tuyến gần với nội dung nhất nên chúng được ưu tiên hàng đầu

quy tắc cụ thể

Quy tắc càng cụ thể thì mức độ ưu tiên của nó càng lớn

Bất kỳ quy tắc nào trên thẻ là ít cụ thể nhất. Quy tắc lớp cụ thể hơn và ghi đè quy tắc thẻ. Vì quy tắc ID chỉ có thể được sử dụng một lần trong một trang web nên đây là quy tắc cụ thể nhất, sẽ ghi đè hai quy tắc còn lại

Ví dụ: nếu biểu định kiểu xác định

như là trung tâm, sau đó

được ưu tiên và

được ưu tiên cho cả hai quy tắc

Các quy tắc sau được ưu tiên

Cuối cùng, sắp xếp các quy tắc theo thứ tự chúng được xác định. Các quy tắc được xác định sau trong cây tài liệu có mức độ ưu tiên cao hơn các quy tắc được xác định trước đó

Và các quy tắc từ biểu định kiểu đã nhập được xem xét trước các quy tắc trực tiếp trong biểu định kiểu

Tóm lược

Vị trí của các kiểu và quy tắc là một yếu tố trong thứ tự ưu tiên. Các quy tắc cụ thể được ưu tiên hơn các quy tắc chung hơn. Ngoài ra, các quy tắc ở cuối biểu định kiểu được ưu tiên hơn các quy tắc phía trước


Biết các quy tắc và tuân theo chúng


Tài nguyên và tài liệu tham khảo

Thông tin xác thực của Ron Kurtus

trang web

"Cascade" nghĩa là gì trong Cascading Style Sheets? . com

Tài nguyên thiết kế web

Sách

(Lưu ý. The School for Champions có thể kiếm được tiền hoa hồng từ việc mua sách)

Sách được xếp hạng hàng đầu về Thiết kế trang web


Những câu hỏi và những nhận xét

Bạn có bất kỳ câu hỏi, ý kiến, hoặc ý kiến ​​về chủ đề này? . Tôi sẽ cố gắng liên lạc lại với bạn sớm nhất có thể


Chia sẻ trang này

Nhấp vào nút để đánh dấu trang hoặc chia sẻ trang này qua Twitter, Facebook, email hoặc các dịch vụ khác

Tính đặc hiệu là thuật toán được các trình duyệt sử dụng để xác định khai báo CSS phù hợp nhất với một phần tử, từ đó xác định giá trị thuộc tính để áp dụng cho phần tử. Thuật toán cụ thể tính toán trọng số của bộ chọn CSS để xác định quy tắc nào từ các khai báo CSS cạnh tranh sẽ được áp dụng cho một phần tử

Ghi chú. Các trình duyệt xem xét tính đặc hiệu sau khi xác định nguồn gốc và tầm quan trọng của tầng. Nói cách khác, đối với các khai báo thuộc tính cạnh tranh, tính đặc hiệu có liên quan và chỉ được so sánh giữa các bộ chọn từ nguồn gốc một tầng và lớp được ưu tiên cho thuộc tính. Thứ tự xuất hiện trở nên phù hợp khi các đặc điểm của bộ chọn của các khai báo cạnh tranh trong lớp xếp tầng có mức độ ưu tiên bằng nhau

Độ đặc hiệu được tính như thế nào?

Tính đặc hiệu là một thuật toán tính toán trọng số được áp dụng cho một khai báo CSS nhất định. Trọng số được xác định bởi số bộ chọn của từng loại trọng số trong bộ chọn khớp với phần tử (hoặc phần tử giả). Nếu có hai hoặc nhiều khai báo cung cấp các giá trị thuộc tính khác nhau cho cùng một phần tử, thì giá trị khai báo trong khối kiểu có bộ chọn khớp với trọng số thuật toán lớn nhất sẽ được áp dụng

Thuật toán tính đặc hiệu về cơ bản là một giá trị ba cột gồm ba danh mục hoặc trọng số - ID, LỚP và LOẠI - tương ứng với ba loại bộ chọn. Giá trị đại diện cho số lượng thành phần bộ chọn trong mỗi loại trọng lượng và được viết là ID - LỚP - LOẠI. Ba cột được tạo bằng cách đếm số lượng thành phần bộ chọn cho từng loại trọng số bộ chọn trong bộ chọn khớp với phần tử

Loại trọng lượng bộ chọn

Các loại trọng số của bộ chọn được liệt kê ở đây theo thứ tự giảm dần độ đặc hiệu

cột ID

Chỉ bao gồm bộ chọn ID, chẳng hạn như

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
6. Đối với mỗi ID trong bộ chọn phù hợp, hãy thêm 1-0-0 vào giá trị trọng số

cột LỚP

Bao gồm các bộ chọn lớp, chẳng hạn như

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
7, bộ chọn thuộc tính như
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
8 và
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
9, và các lớp giả, chẳng hạn như
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
0,
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
1 và
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
2. Đối với mỗi lớp, bộ chọn thuộc tính hoặc lớp giả trong bộ chọn phù hợp, hãy thêm 0-1-0 vào giá trị trọng số

cột LOẠI

Bao gồm các bộ chọn loại, chẳng hạn như

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
3,
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
4 và
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
5 cũng như các phần tử giả như
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
6,
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
7 và tất cả các bộ chọn khác có ký hiệu dấu hai chấm. Đối với mỗi loại hoặc phần tử giả trong bộ chọn phù hợp, hãy thêm 0-0-1 vào giá trị trọng số

Không có giá trị

Bộ chọn phổ quát (

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
8) và lớp giả
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
9 và các tham số của nó không được tính khi tính toán trọng số nên giá trị của chúng là 0-0-0, nhưng chúng khớp với các phần tử. Các bộ chọn này không ảnh hưởng đến giá trị trọng lượng đặc hiệu

Bộ kết hợp, chẳng hạn như

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
40,
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
41,
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
42, " " và
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
43, có thể làm cho bộ chọn cụ thể hơn trong những gì được chọn nhưng chúng không thêm bất kỳ giá trị nào vào trọng số cụ thể

Lớp giả phủ định,

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
44, bản thân nó không có trọng số. Các lớp giả
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
45 hoặc
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
46 cũng vậy. Tuy nhiên, các tham số trong các bộ chọn này không. Giá trị của cả hai đều đến từ tham số trong danh sách tham số có độ đặc hiệu cao nhất. Các trường hợp ngoại lệ
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
44,
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
45 và
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
46 được thảo luận dưới đây

bộ chọn phù hợp

Trọng lượng cụ thể đến từ bộ chọn phù hợp. Lấy bộ chọn CSS này với ba bộ chọn được phân tách bằng dấu phẩy làm ví dụ

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
4

Bộ chọn

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
50 trong danh sách bộ chọn ở trên, với trọng số cụ thể là
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
51, áp dụng khai báo
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
52 cho tất cả các loại đầu vào mật khẩu

Tất cả đầu vào, bất kể loại nào, khi nhận tiêu điểm, khớp với bộ chọn thứ hai trong danh sách,

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
53, với trọng số đặc hiệu là
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
54; . Nếu đầu vào mật khẩu có tiêu điểm, nó sẽ khớp với
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
53 và trọng số cụ thể cho khai báo kiểu
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
52 sẽ là
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
54. Khi mật khẩu đó không có tiêu điểm, trọng số cụ thể vẫn ở mức
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
51

Tính đặc hiệu cho đầu vào bắt buộc được lồng trong một phần tử có thuộc tính

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
61 là
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
62, dựa trên một ID, hai lớp giả và một loại phần tử

Nếu loại đầu vào mật khẩu được lồng trong một phần tử có bộ

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
61, trọng số cụ thể sẽ là
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
62, cho dù nó có tiêu điểm hay không. Tại sao trọng số đặc hiệu là
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
62 thay vì
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
54 hoặc
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
51 trong trường hợp này? . Trọng số được xác định bằng cách so sánh các giá trị trong ba cột, từ trái sang phải

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
3

So sánh ba cột

Khi các giá trị đặc hiệu của các bộ chọn có liên quan được xác định, số lượng các thành phần bộ chọn trong mỗi cột được so sánh, từ trái sang phải

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}

Cột đầu tiên là giá trị của thành phần ID, là số lượng ID trong mỗi bộ chọn. Các số trong cột ID của các bộ chọn cạnh tranh được so sánh. Bộ chọn có giá trị lớn hơn trong cột ID sẽ thắng bất kể giá trị trong các cột khác là gì. Trong ví dụ trên, mặc dù bộ chọn màu vàng có tổng cộng nhiều thành phần hơn nhưng chỉ có giá trị của cột đầu tiên là quan trọng

Nếu số trong cột ID của các bộ chọn cạnh tranh giống nhau, thì cột tiếp theo, LỚP, sẽ được so sánh, như minh họa bên dưới

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}

Cột LỚP là số lượng tên lớp, bộ chọn thuộc tính và lớp giả trong bộ chọn. Khi giá trị cột ID giống nhau, bộ chọn có giá trị lớn hơn trong cột LỚP sẽ thắng, bất kể giá trị trong cột LOẠI. Điều này được thể hiện trong ví dụ dưới đây

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
4

Nếu các số trong cột LỚP và ID trong các bộ chọn cạnh tranh giống nhau, thì cột LOẠI sẽ có liên quan. Cột TYPE là số loại phần tử và phần tử giả trong bộ chọn. Khi hai cột đầu tiên có cùng giá trị, bộ chọn có số lớn hơn trong cột LOẠI sẽ thắng

Nếu các bộ chọn cạnh tranh có cùng giá trị trong cả ba cột, thì quy tắc lân cận sẽ phát huy tác dụng, trong đó kiểu được khai báo cuối cùng sẽ được ưu tiên

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
5

Các trường hợp ngoại lệ #myElement { color: green; /* 1-0-0 - WINS!! */ } .bodyClass .sectionClass .parentClass [id="myElement"] { color: yellow; /* 0-4-0 */ } 45, #myElement { color: green; /* 1-0-0 - WINS!! */ } .bodyClass .sectionClass .parentClass [id="myElement"] { color: yellow; /* 0-4-0 */ } 44 và #myElement { color: green; /* 1-0-0 - WINS!! */ } .bodyClass .sectionClass .parentClass [id="myElement"] { color: yellow; /* 0-4-0 */ } 46

Lớp giả phù hợp-bất kỳ

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
45, lớp giả quan hệ
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
46 và lớp giả phủ định
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
44 không được coi là lớp giả trong phép tính trọng số đặc hiệu. Bản thân họ không thêm bất kỳ trọng số nào vào phương trình đặc hiệu. Tuy nhiên, các tham số bộ chọn được truyền vào dấu ngoặc đơn lớp giả là một phần của thuật toán đặc hiệu;

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
6

Lưu ý rằng trong ghép nối CSS ở trên, trọng số đặc hiệu được cung cấp bởi các lớp giả

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
45,
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
46 và
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
44 là giá trị của tham số bộ chọn, không phải của lớp giả

Cả ba lớp giả này đều chấp nhận danh sách bộ chọn phức tạp, danh sách bộ chọn được phân tách bằng dấu phẩy, làm tham số. Tính năng này có thể được sử dụng để tăng tính đặc hiệu của bộ chọn

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
8

Trong khối mã CSS ở trên, chúng tôi đã bao gồm

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
87 trong bộ chọn.
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
87 này thêm
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
89 vào trọng số cụ thể của từng đoạn

Nói chung, bạn muốn giảm độ đặc hiệu xuống mức tối thiểu, nhưng nếu bạn cần tăng độ đặc hiệu của một phần tử vì một lý do cụ thể, ba lớp giả này có thể giúp ích

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
2

Trong ví dụ này, tất cả các liên kết sẽ có màu xanh lam, trừ khi bị ghi đè bởi một khai báo liên kết có 3 ID trở lên, giá trị màu khớp với

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
20 bao gồm cờ
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 hoặc nếu liên kết có khai báo màu kiểu nội tuyến. Nếu bạn sử dụng một kỹ thuật như vậy, hãy thêm một bình luận để giải thích lý do tại sao cần hack

kiểu nội tuyến

Các kiểu nội tuyến được thêm vào một phần tử (e. g. ,

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
22) luôn ghi đè bất kỳ kiểu thông thường nào trong biểu định kiểu của tác giả và do đó, có thể được coi là có tính đặc hiệu cao nhất. Hãy coi các kiểu nội tuyến có trọng số cụ thể là
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
23

Cách duy nhất để ghi đè kiểu nội tuyến là sử dụng

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21

Nhiều khung và thư viện JavaScript thêm kiểu nội tuyến. Sử dụng

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 với bộ chọn rất được nhắm mục tiêu, chẳng hạn như bộ chọn thuộc tính sử dụng kiểu nội tuyến, là một cách để ghi đè các kiểu nội tuyến này

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
9

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
30

Đảm bảo bao gồm một nhận xét với mỗi lần bao gồm cờ quan trọng để những người bảo trì mã hiểu lý do tại sao một mẫu chống CSS được sử dụng

Ngoại lệ #myElement { color: yellow; /* 1-0-0 */ } #myApp [id="myElement"] { color: green; /* 1-1-0 - WINS!! */ } 21

Các khai báo CSS được đánh dấu là quan trọng sẽ ghi đè bất kỳ khai báo nào khác trong cùng một tầng và nguồn gốc. Mặc dù về mặt kỹ thuật,

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 không liên quan gì đến tính đặc hiệu, nhưng nó tương tác trực tiếp với tính đặc hiệu và tầng. Nó đảo ngược thứ tự xếp tầng của các biểu định kiểu

Nếu các khai báo từ cùng một nguồn gốc và tầng tầng xung đột và một giá trị thuộc tính có cờ

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 được đặt, thì khai báo quan trọng sẽ được áp dụng bất kể tính đặc hiệu. Khi các khai báo xung đột từ cùng một nguồn gốc và tầng tầng với cờ
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 được áp dụng cho cùng một thành phần, thì khai báo có tính đặc hiệu cao hơn sẽ được áp dụng

Sử dụng

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 để ghi đè tính đặc hiệu được coi là một cách làm không tốt và nên tránh cho mục đích này. Hiểu và sử dụng hiệu quả tính đặc hiệu và tầng có thể loại bỏ mọi nhu cầu về cờ
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21

Thay vì sử dụng

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 để ghi đè CSS nước ngoài (từ các thư viện bên ngoài, như Bootstrap hoặc normalize. css), nhập trực tiếp tập lệnh của bên thứ ba vào các lớp theo tầng. Nếu bạn phải sử dụng
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 trong CSS của mình, hãy nhận xét cách sử dụng của bạn để những người bảo trì mã trong tương lai biết lý do tại sao phần khai báo được đánh dấu là quan trọng và biết để không ghi đè lên nó. Nhưng chắc chắn, không sử dụng
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 khi viết các plugin hoặc khung mà các nhà phát triển khác sẽ cần kết hợp mà không thể kiểm soát

Ngoại lệ #myElement { color: yellow; /* 1-0-0 */ } #myApp [id="myElement"] { color: green; /* 1-1-0 - WINS!! */ } 9

Lớp giả điều chỉnh độ đặc hiệu

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
9 luôn có độ đặc hiệu được thay thế bằng 0,
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
97. Nó cho phép tạo các bộ chọn CSS rất cụ thể trong phần tử nào được nhắm mục tiêu mà không làm tăng tính đặc hiệu

Trong việc tạo CSS của bên thứ ba để các nhà phát triển không có quyền truy cập chỉnh sửa CSS của bạn sử dụng, cách tốt nhất là tạo CSS với độ đặc hiệu thấp nhất có thể. Ví dụ: nếu chủ đề của bạn bao gồm CSS sau

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
31

Sau đó, nhà phát triển triển khai tiện ích có thể dễ dàng ghi đè màu liên kết chỉ bằng bộ chọn loại

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
32

Mẹo để xử lý đau đầu cụ thể

Thay vì sử dụng

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21, hãy cân nhắc sử dụng các lớp theo tầng và sử dụng độ đặc hiệu trọng lượng thấp trong CSS của bạn để các kiểu dễ dàng bị ghi đè bằng các quy tắc cụ thể hơn một chút. Sử dụng HTML ngữ nghĩa giúp cung cấp các điểm neo để áp dụng kiểu dáng

Làm cho bộ chọn cụ thể có và không thêm tính đặc hiệu

Bằng cách chỉ ra phần tài liệu bạn đang tạo kiểu trước thành phần bạn đang chọn, quy tắc sẽ trở nên cụ thể hơn. Tùy vào cách bạn thêm mà bạn có thể thêm ít, nhiều hay không cụ thể như hình bên dưới

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
33

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
34

Bất kể thứ tự, tiêu đề sẽ có màu xanh vì quy tắc đó là cụ thể nhất

Giảm tính đặc hiệu của ID

Tính đặc hiệu dựa trên hình thức của bộ chọn. Bao gồm

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
99 của một phần tử làm bộ chọn thuộc tính thay vì bộ chọn id là một cách hay để làm cho một phần tử cụ thể hơn mà không cần thêm quá nhiều tính cụ thể. Trong ví dụ trước, bộ chọn
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
300 được tính là bộ chọn thuộc tính nhằm mục đích xác định tính đặc hiệu của bộ chọn, mặc dù nó chọn một ID

Bạn cũng có thể bao gồm

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
99 hoặc bất kỳ phần nào của bộ chọn làm tham số trong lớp giả điều chỉnh tính đặc hiệu của
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
9 nếu bạn cần làm cho bộ chọn cụ thể hơn nhưng hoàn toàn không muốn thêm bất kỳ tính đặc hiệu nào

Tăng tính đặc hiệu bằng cách sao chép bộ chọn

Là một trường hợp đặc biệt để tăng tính đặc hiệu, bạn có thể sao chép trọng số từ các cột LỚP hoặc ID. Sao chép các bộ chọn id, lớp, lớp giả hoặc thuộc tính trong bộ chọn hỗn hợp sẽ tăng tính đặc hiệu khi ghi đè các bộ chọn rất cụ thể mà bạn không có quyền kiểm soát

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
35

Sử dụng cái này một cách tiết kiệm, nếu có. Nếu sử dụng sao chép bộ chọn, hãy luôn nhận xét CSS của bạn

Bằng cách sử dụng

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
45 và
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
44 (và cả
#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
46), bạn có thể tăng tính đặc hiệu ngay cả khi bạn không thể thêm
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
99 vào phần tử gốc

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
36

Ưu tiên hơn CSS của bên thứ ba

Tận dụng các lớp theo tầng là cách tiêu chuẩn để cho phép một tập hợp kiểu được ưu tiên hơn một tập hợp kiểu khác; . Các kiểu tác giả bình thường (không quan trọng) được nhập vào các lớp xếp tầng có mức độ ưu tiên thấp hơn so với các kiểu tác giả không có lớp

Nếu các kiểu đến từ một biểu định kiểu mà bạn không thể chỉnh sửa hoặc không hiểu và bạn cần ghi đè các kiểu, thì một chiến lược là nhập các kiểu mà bạn không kiểm soát vào một tầng tầng. Các kiểu trong các lớp được khai báo sau đó sẽ được ưu tiên, với các kiểu không có lớp được ưu tiên hơn tất cả các kiểu lớp từ cùng một nguồn gốc

Khi hai bộ chọn từ các lớp khác nhau khớp với cùng một phần tử, nguồn gốc và mức độ quan trọng sẽ được ưu tiên;

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
37

Trong ví dụ trên, tất cả văn bản đoạn văn, bao gồm nội dung lồng nhau, sẽ là

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
307 bất kể đoạn văn có bao nhiêu tên lớp phù hợp với biểu định kiểu TW

Tránh và ghi đè #myElement { color: yellow; /* 1-0-0 */ } #myApp [id="myElement"] { color: green; /* 1-1-0 - WINS!! */ } 21

Cách tiếp cận tốt nhất là không sử dụng

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21. Các giải thích ở trên về tính đặc hiệu sẽ hữu ích trong việc tránh sử dụng cờ và loại bỏ nó hoàn toàn khi gặp phải

Để loại bỏ nhu cầu nhận thức về

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21, bạn có thể thực hiện một trong các thao tác sau

  • Tăng tính đặc hiệu của bộ chọn của khai báo
    #myElement {
      color: yellow; /* 1-0-0 */
    }
    #myApp [id="myElement"] {
      color: green; /* 1-1-0  - WINS!! */
    }
    
    21 trước đây để nó lớn hơn các khai báo khác
  • Cung cấp cho nó tính đặc hiệu tương tự và đặt nó sau phần khai báo, nó có nghĩa là ghi đè
  • Giảm tính đặc hiệu của bộ chọn mà bạn đang cố gắng ghi đè

Tất cả các phương pháp này được đề cập trong các phần trước

Nếu bạn không thể xóa cờ

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21 khỏi biểu định kiểu tác giả, giải pháp duy nhất để ghi đè các kiểu quan trọng là sử dụng
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
21. Tạo một lớp xếp tầng ghi đè khai báo quan trọng là một giải pháp tuyệt vời. Hai cách để làm điều này bao gồm

Phương pháp 1

  1. Tạo một biểu định kiểu ngắn, riêng biệt chỉ chứa các khai báo quan trọng ghi đè cụ thể mọi khai báo quan trọng mà bạn không thể xóa
  2. Nhập biểu định kiểu này làm lần nhập đầu tiên trong CSS của bạn bằng cách sử dụng
    #myElement {
      color: yellow; /* 1-0-0 */
    }
    #myApp [id="myElement"] {
      color: green; /* 1-1-0  - WINS!! */
    }
    
    314, bao gồm cả câu lệnh
    #myElement {
      color: yellow; /* 1-0-0 */
    }
    #myApp [id="myElement"] {
      color: green; /* 1-1-0  - WINS!! */
    }
    
    315, trước khi liên kết với các biểu định kiểu khác. Điều này là để đảm bảo rằng các phần ghi đè quan trọng được nhập dưới dạng lớp đầu tiên

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
38

Phương pháp 2

  1. Khi bắt đầu khai báo biểu định kiểu của bạn, hãy tạo một lớp xếp tầng có tên, như vậy

    #myElement {
      color: yellow; /* 1-0-0 */
    }
    #myApp [id="myElement"] {
      color: green; /* 1-1-0  - WINS!! */
    }
    
    39

  2. Mỗi khi bạn cần ghi đè một khai báo quan trọng, hãy khai báo nó trong lớp được đặt tên. Chỉ khai báo các quy tắc quan trọng trong lớp

    #myElement {
      color: green; /* 1-0-0  - WINS!! */
    }
    .bodyClass .sectionClass .parentClass [id="myElement"] {
      color: yellow; /* 0-4-0 */
    }
    
    0

Độ đặc hiệu của bộ chọn kiểu quan trọng trong lớp có thể thấp, miễn là nó phù hợp với phần tử bạn đang cố gắng ghi đè. Các lớp bình thường nên được khai báo bên ngoài lớp vì các kiểu lớp có mức độ ưu tiên thấp hơn so với các kiểu không có lớp

Sự thiếu hiểu biết về sự gần gũi của cây cối

Sự gần gũi của một phần tử với các phần tử khác được tham chiếu trong một bộ chọn nhất định không ảnh hưởng đến tính đặc hiệu

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
1

Các phần tử

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
316 sẽ có màu tím vì khi khai báo có cùng độ đặc hiệu, bộ chọn được khai báo cuối cùng sẽ được ưu tiên

Các yếu tố được nhắm mục tiêu trực tiếp so với. phong cách kế thừa

Các kiểu dành cho phần tử được nhắm mục tiêu trực tiếp sẽ luôn được ưu tiên hơn các kiểu được kế thừa, bất kể tính đặc hiệu của quy tắc được kế thừa. Đưa ra CSS và HTML sau

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
2

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
3

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
4 sẽ có màu tím vì bộ chọn
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
4 nhắm mục tiêu cụ thể vào phần tử, trong khi màu xanh lục được kế thừa từ các khai báo
#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
319

ví dụ

Trong CSS sau, chúng tôi có ba bộ chọn nhắm mục tiêu các phần tử

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
320 để đặt màu. Đối với một đầu vào nhất định, trọng số cụ thể của khai báo màu được ưu tiên là bộ chọn phù hợp với trọng số lớn nhất

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
4

Nếu tất cả các bộ chọn ở trên nhắm mục tiêu đến cùng một đầu vào, đầu vào sẽ có màu đỏ, vì khai báo đầu tiên có giá trị cao nhất trong cột ID

Bộ chọn cuối cùng có bốn thành phần LOẠI. Mặc dù nó có giá trị số nguyên cao nhất, cho dù bao gồm bao nhiêu phần tử và phần tử giả, ngay cả khi có 150, các thành phần TYPE không bao giờ được ưu tiên hơn các thành phần LỚP. Các giá trị cột được so sánh bắt đầu từ trái sang phải khi các giá trị cột bằng nhau

Nếu chúng tôi đã chuyển đổi bộ chọn id trong mã ví dụ ở trên thành bộ chọn thuộc tính, thì hai bộ chọn đầu tiên sẽ có cùng tính đặc hiệu, như được hiển thị bên dưới

#myElement {
  color: green; /* 1-0-0  - WINS!! */
}
.bodyClass .sectionClass .parentClass [id="myElement"] {
  color: yellow; /* 0-4-0 */
}
5

Khi nhiều khai báo có độ đặc hiệu như nhau, khai báo cuối cùng được tìm thấy trong CSS sẽ được áp dụng cho phần tử. Nếu cả hai bộ chọn khớp với cùng một

#myElement {
  color: yellow; /* 1-0-0 */
}
#myApp [id="myElement"] {
  color: green; /* 1-1-0  - WINS!! */
}
320, màu sẽ có màu xanh lam

Kiểu CSS nào có mức độ ưu tiên cao nhất?

Thuộc tính của CSS. CSS nội tuyến có mức độ ưu tiên cao nhất, sau đó đến Nội bộ/Được nhúng, tiếp theo là CSS bên ngoài có mức độ ưu tiên thấp nhất. Nhiều biểu định kiểu có thể được xác định trên một trang.

Thứ tự chính xác của tính đặc hiệu CSS là gì?

Bắt đầu từ 0, thêm 100 cho mỗi giá trị ID, thêm 10 cho mỗi giá trị lớp (hoặc lớp giả hoặc bộ chọn thuộc tính), thêm 1 cho mỗi bộ chọn phần tử hoặc phần tử giả.