lớp ghi đè khi hai lớp được gán cho một div


83

Tôi đang tạo một <div>thẻ trong đó tôi muốn áp dụng hai lớp cho một <div>thẻ sẽ là thư viện hình thu nhỏ. Một lớp cho vị thế của nó và lớp kia cho phong cách của nó. Bằng cách này tôi có thể áp dụng phong cách này, tôi đã có một số kết quả kỳ lạ khiến tôi phải đặt câu hỏi.

Có thể gán hai lớp cho một <div>thẻ không? Nếu vậy, cái nào vượt qua cái kia hoặc cái nào được ưu tiên?

Câu trả lời:


153

Nhiều lớp có thể được gán cho một div. Chỉ cần tách chúng trong tên lớp bằng dấu cách như sau:

<div class="rule1 rule2 rule3">Content</div>

Div này sau đó sẽ phù hợp với bất kỳ quy tắc phong cách cho ba selectors lớp khác nhau: .rule1, .rule2.rule3.

Các quy tắc CSS được áp dụng cho các đối tượng trong trang khớp với bộ chọn của chúng theo thứ tự mà chúng gặp trong biểu định kiểu và nếu có xung đột giữa hai quy tắc (nhiều hơn một quy tắc cố gắng đặt cùng một thuộc tính), thì tính cụ thể của CSS sẽ xác định quy tắc được ưu tiên.

Nếu đặc tính CSS giống nhau đối với các quy tắc xung đột, thì quy tắc sau (quy tắc được xác định sau trong biểu định kiểu hoặc trong biểu định kiểu mới hơn) sẽ được ưu tiên. Thứ tự của các tên lớp trên bản thân đối tượng không quan trọng. Thứ tự của các quy tắc kiểu trong biểu định kiểu là vấn đề quan trọng nếu tính cụ thể của CSS giống nhau.

Vì vậy, nếu bạn có phong cách như thế này:

.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

Sau đó, vì cả hai quy tắc đều khớp với div và có cùng đặc tính CSS chính xác, nên quy tắc thứ hai xuất hiện sau nên nó sẽ được ưu tiên và nền sẽ có màu đỏ.


Nếu một quy tắc có độ đặc hiệu CSS cao hơn ( div.rule1điểm cao hơn .rule2):

div.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

Sau đó, nó sẽ được ưu tiên và màu nền ở đây sẽ là màu xanh lá cây.


Nếu hai quy tắc không xung đột:

.rule1 {
    background-color: green;
}

.rule2 {
    margin-top: 50px;
}

Sau đó, cả hai quy tắc sẽ được áp dụng.


1 Một liên kết tuyệt vời giải thích CSS đặc hiệu: maxdesign.com.au/articles/css-cascade
Fabian Barney

câu trả lời dưới đây tôi nghĩ là đúng hơn nếu tôi không nhầm?
nagates

@nagates - Bạn nghĩ câu trả lời nào đúng hơn và tại sao? Có rất nhiều câu trả lời "bên dưới" nên tôi không biết bạn đang đề cập đến câu nào và không biết tại sao bạn lại cho rằng nó "đúng hơn". Tôi rất vui được cải thiện hoặc làm rõ câu trả lời của mình nếu bạn có thể giải thích suy nghĩ của mình.
jfriend00

jfriend00: câu trả lời của @rectz-sason dưới đây là câu trả lời mà anh ấy đang đề cập đến. Điều này thật kỳ lạ vì tôi nghĩ nó hoạt động giống như bạn đã phác thảo, nhưng các ví dụ của anh ấy rõ ràng hoạt động theo cách anh ấy mô tả. Tôi tự hỏi liệu có sự phân biệt giữa kiểu nhúng và kiểu được liên kết hay không.
Adam McCormick

1
@AdamMcCormick - Câu trả lời của tôi đã chứa thông tin từ câu trả lời đó như một trong những ví dụ tôi cung cấp: Sau đó, vì cả hai quy tắc đều khớp với div và có cùng đặc tính CSS, nên quy tắc thứ hai đến sau nên nó sẽ được ưu tiên và làm nền sẽ có màu đỏ. . Tôi đưa ra một số kịch bản có thể xảy ra và giải thích tất cả, không chỉ một kịch bản. OP không cụ thể với mã của họ vì vậy tôi đã đi tìm lời giải thích chung bao gồm nhiều tùy chọn và bao gồm tùy chọn đơn giản nhất.
jfriend00

28

Trên thực tế, lớp được xác định cuối cùng trong css - được áp dụng trên div của bạn.

kiểm tra nó ra:

màu đỏ cuối cùng trong css

.blue{ color: blue; }
.red { color: red;  }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>

vs

màu xanh cuối cùng trong css

.red { color: red;  }
.blue{ color: blue; }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>


4
Đây là một câu trả lời tốt hơn nhiều. Câu trả lời được chấp nhận là sai lệch.
SD

4

Nếu bạn hỏi về việc chúng có cùng thuộc tính thì theo quy tắc CSS, nó sẽ lấy câu lệnh cuối cùng.

<div class="red green"></div>

CSS

.red{
 color:red;
}
.green{
 color:green;
}

Theo ví dụ trên, nó lấy câu lệnh cuối cùng theo cây css là .green .


3

Lớp được định nghĩa cuối cùng trong CSS có quyền ưu tiên, nếu không có gì khác được áp dụng.

Đọc phần ưu tiên CSS để xem nó hoạt động như thế nào.


Ý bạn là cuối cùng về mặt vật lý trong chính CSS thực tế hay tên lớp cuối cùng trong danh sách?
Brain2000

Ý anh ấy thực sự là cuối cùng trong danh sách tất cả các quy tắc CSS được xác định ở khắp mọi nơi, không phải thứ tự trong danh sách thuộc tính, thật không may cho những người sử dụng các phương thức classList của JavaScript, những người sẽ thấy quyết định thiết kế này đáng ngạc nhiên và vô ích, theo ý kiến ​​của tôi.
David Spector

3

Nhiều lớp có thể được gán cho một phần tử, bạn chỉ cần tách chúng bằng dấu cách

<div class="myClass aSecondClass keepOnClassing stayClassySanDiego"></div>

Do phân tầng trong CSS, các quy tắc ghi đè gần nhất với cuối tài liệu sẽ được áp dụng cho phần tử.

Vì vậy, nếu bạn có

.myClass
{
    background: white;
    color: blue;
}

.keepOnClassing
{
    color: red;
}

Màu đỏ sẽ được sử dụng, nhưng không phải là màu nền vì nó không bị ghi đè.

Bạn cũng phải tính đến tính cụ thể của CSS, nếu bạn có bộ chọn cụ thể hơn, bộ chọn này sẽ được sử dụng:

.myClass
{
    background: white;
    color: blue;
}

div.myClass.keepOnClassing
{
    background: purple;
    color: red;
}

.stayClassySanDiego
{
    background: black;
}

Bộ chọn thứ hai ở đây sẽ được sử dụng vì nó cụ thể hơn.

Bạn có thể xem tất cả ở đây .


Upvoted cho tên lớp tốt nhất của mọi thời đại (cũng như là đầy đủ và chính xác)
Oliver Turner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.