Các phần tử đích có nhiều lớp, trong một quy tắc


117

Tôi có một số HTML sẽ có các phần tử với nhiều lớp và tôi cần gán chúng theo một quy tắc, để các lớp giống nhau có thể khác nhau trong các thùng chứa khác nhau. Nói rằng tôi có cái này trong CSS của tôi:

.border-blue {
    border: 1px solid blue;
}
.background {
    background: url(bg.gif);
}

Sau đó, tôi có cái này trong HTML của mình:

<div class='border-blue background'>Lorum Crap No-one Cares About Ipsum</div>

Tôi có thể nhắm mục tiêu những điều này trong một quy tắc duy nhất? Như thế này, ví dụ, cái mà tôi biết không hoạt động:

.border-blue, .background {
    border: 1px solid blue;
    background: url(bg.gif);
}

Câu trả lời:


181

.border-blue.background { ... }dành cho một mục với nhiều lớp.
.border-blue, .background { ... }là cho nhiều mục mỗi lớp với lớp riêng của họ.
.border-blue .background { ... }dành cho một mục trong đó '.background' là con của '.border-blue'.

Xem câu trả lời của Chris để được giải thích kỹ hơn.


2
Cảm ơn! Tôi không biết nếu điều này là có thể, vì vậy tôi đã hỏi ở đây để tìm hiểu.
Tanner Ottinger

Giải pháp này không hiệu quả với tôi (hoặc không hoạt động nữa ...).
fresko

bạn cần phân tách bằng dấu phẩy các lớp, như câu trả lời của Chris nói
fresko

bạn có ý nghĩa gì trong .border-blue .background { ... }trẻ em? tôi đã thử cái này và cái này không hoạt động
Eliav Louski

174

Chỉ trong trường hợp ai đó tình cờ phát hiện ra điều này như tôi đã làm và không nhận ra, hai biến thể ở trên là dành cho các trường hợp sử dụng khác nhau.

Sau đây là

.blue-border, .background {
    border: 1px solid #00f;
    background: #fff;
}

dành cho khi bạn muốn thêm kiểu vào các thành phần có lớp viền màu xanh hoặc lớp nền, ví dụ:

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

tất cả sẽ có được một đường viền màu xanh và nền trắng được áp dụng cho chúng.

Tuy nhiên, câu trả lời được chấp nhận là khác nhau.

.blue-border.background {
    border: 1px solid #00f;
    background: #fff;
}

Điều này áp dụng các kiểu cho các phần tử có cả hai lớp, vì vậy trong ví dụ này, chỉ các kiểu <div>có cả hai lớp sẽ được áp dụng các kiểu (trong các trình duyệt diễn giải CSS đúng cách):

<div class="blue-border">Hello</div>
<div class="background">World</div>
<div class="blue-border background">!</div>

Vì vậy, về cơ bản hãy nghĩ về nó như thế này, phân tách dấu phẩy áp dụng cho các phần tử với một lớp HOẶC một lớp khác và phân tách dấu chấm áp dụng cho các phần tử với một lớp VÀ một lớp khác .


12
Đây là một câu trả lời rất hữu ích mà tôi gần như không đọc. Chúc mừng!
psicopoo

1
Chỉ cần cẩn thận. Không có khoảng trống trong.blue-border.background
Knu8

2
think of it as AND and OR: Lời khuyên tuyệt vời. Tôi có thể thêm rằng .x .ycó thể được coi lày && ancestors.has(x)
Siddharth Garg
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.