LESS các lớp lồng ghép CSS


101

Tôi đang sử dụng LESS để cải thiện CSS của mình và đang cố gắng lồng một lớp trong một lớp. Có một hệ thống phân cấp khá phức tạp nhưng vì một số lý do mà việc làm tổ của tôi không hoạt động. Tôi có cái này:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
    .posted {
         .my-posted;
         span {
            border: none;
         }
    }
}

Tôi không thể .g.postedlàm việc. nó chỉ hiển thị một .gchút. Nếu tôi làm điều này thì tốt:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
}

.g.posted {
         .my-posted;
         span {
            border: none;
         }
    }

Tôi muốn lồng .postedvào .gmặc dù. Bất kỳ ý tưởng?

Câu trả lời:


192

Thực ra, &ký tự này có chức năng của một thistừ khóa (một điều tôi không biết vào lúc viết câu trả lời). Có thể viết:

.class1 {
    &.class2 {}
}

và CSS sẽ được tạo sẽ giống như sau:

.class1.class2 {}

Về kỷ lục, @grobitto là người đầu tiên đăng thông tin này.


[CÂU TRẢ LỜI GỐC]

LESS không hoạt động theo cách này.

.class1.class2 {} - xác định hai lớp trên cùng một nút DOM, nhưng

.class1 {
    .class2 {}
}

định nghĩa các nút lồng nhau. .class2sẽ chỉ được áp dụng nếu nó là con của một nút với lớp class1.

Tôi cũng đã nhầm lẫn với điều này và kết luận của tôi là LESS cần một thistừ khóa :).


5
sasscó chức năng đó được tích hợp sẵn với toán tử &.
Sevenseacat

2
LESS vẫn tuyệt vời, đặc biệt là bộ tiền xử lý PHP LESS, với cú pháp được sửa đổi, linh hoạt hơn. Nhưng cho đến khi có một số loại cú pháp được chấp nhận phổ biến, các vấn đề như vậy sẽ phát sinh theo thời gian. Theo quan điểm của tôi, điều này là hạn chế duy nhất của ÍT.
mingos

1
@ newbie_86 Bạn không thể kết hợp cú pháp sass và css gốc. Vì vậy, việc di chuyển sang Sass yêu cầu viết lại hoàn toàn các kiểu của bạn, trong khi ít hơn, bạn đã có thể biên dịch các kiểu hiện có của mình và bắt đầu viết lại từng phần một.
ngực trần

1
Tôi rất tò mò tại sao câu trả lời thứ hai lại có nhiều phần hơn câu trả lời này, mặc dù nó giống nhau và có ngày sau. Sau đó, tôi thấy câu cuối cùng và upped cả câu trả lời
llamerr

@topless ý của bạn là gì khi "Bạn không thể kết hợp cú pháp sass và css gốc" Tôi đã làm điều đó trong nhiều năm. Làm việc tuyệt vời cho tôi.
Shanimal


2

Nếu dấu và nằm ngay bên cạnh phần tử con trong lồng ghép, nó được biên dịch thành một bộ chọn lớp kép. Nếu có khoảng trống giữa & và bộ chọn, nó sẽ được biên dịch thành bộ chọn con. Đọc thêm về lồng trong Ít hơn tại đây .

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.