Bộ chọn Trẻ em ngay lập tức trong LESS


112

Có cách nào để LESS áp dụng bộ chọn con ngay lập tức (>) trong đầu ra của nó không?

Theo phong cách của tôi .less, tôi muốn viết một cái gì đó như:

.panel {
    ...
    > .control {
        ...
    }
}

và có LESS tạo ra một cái gì đó như:

.panel > .control { ... }


15
Thật thú vị, đoạn mã trong câu hỏi của bạn đã là câu trả lời đúng.
ba mươi

@thirtydot Chắc chắn, ngoại trừ việc nó không hoạt động ... không nếu bạn không xóa khoảng trắng hoặc thêm dấu "&". Tôi đang sử dụng ít hơn.js. Không thể nói chắc chắn cho các trình phân tích cú pháp khác.
Dave

2
Tôi vừa mới thử nghiệm nó, và mã ban đầu từ câu hỏi của bạn không làm việc trong less.js. Xem cho chính mình: jsfiddle.net/thirtydot/vcE8t
ba mươi

1
Vâng, tôi xin lỗi, nó hoạt động như một cái duyên với không gian. +1 cho bạn. Tôi không biết làm thế nào mà nó không hoạt động với tôi trong nhiều giờ ngày hôm qua ... nếu không thì tôi đã không đăng câu hỏi.
Dave

Câu trả lời:


144

CẬP NHẬT

Trên thực tế, mã trong câu hỏi ban đầu hoạt động tốt. Bạn chỉ có thể gắn bó với >bộ chọn con.


Đã tìm ra câu trả lời.

.panel {
    ...
    >.control {
        ...
    }
}

Lưu ý thiếu khoảng cách giữa ">" và ".", Nếu không nó sẽ không hoạt động.


4
Tôi sẽ không nghi ngờ rằng đó là một lỗi nếu nó không hoạt động với không gian ở đó, trừ khi nó được ghi lại cụ thể.
BoltClock

Đây chỉ là đánh lừa trình phân tích cú pháp. Nó coi nó như một bộ chọn duy nhất, vì vậy bạn sẽ có .panel >.control.
Ricardo Tomasi

Tôi coi nó như một tính năng hơn là một lỗi. Nó nhất quán hơn nhiều khi bạn sử dụng theo cách này thay vì "&". Tôi nghĩ mã rõ ràng hơn nếu bạn chỉ sử dụng "&" với các lớp giả chứ không phải các lớp con.
Dave

1
Đó là một tính năng của CSS, chấp nhận cả div > pdiv>p. Tính nhất quán sẽ luôn sử dụng khoảng cách giữa các bộ chọn (hãy xem CSS đã tạo).
Ricardo Tomasi

Chắc chắn rồi, nhưng tôi quan tâm hơn đến tính nhất quán của việc sử dụng &.
Dave

78

Cách chính thức:

.panel {
  & > .control {
    ...
  }
}

& luôn đề cập đến bộ chọn hiện tại.

Xem http://lesscss.org/features/#features-overview-feature-nested-rules


1
Tôi nghĩ rằng điều này cũng chỉ đang đánh lừa trình phân tích cú pháp (giống như bạn cảm thấy về câu trả lời khác). Hãy để tôi giải thích. Giống như bạn đã nói, & luôn đề cập đến bộ chọn (cha) hiện tại. Vì vậy, bất cứ điều gì sau đó sẽ áp dụng cho phụ huynh. Và, đó là vai trò của lớp giả. Các lớp con tức thời gần với các lớp con **** gasp **** hơn là các lớp giả. Vì vậy, sử dụng just> là trực quan và hợp lý hơn.
Dave

6
Bạn nghĩ gì là đúng hơn? div > phoặc div >p? Bộ &tổ hợp là cách kinh điển để làm điều đó trong ÍT, không phải theo cảm nhận của tôi. Lời giải thích của bạn là thực tế. Một số người viết CSS của họ trong một dòng duy nhất ...
Ricardo Tomasi

Hầu hết mọi người sử dụng LESS để họ không phải quan tâm đến CSS thực tế được tạo. Nhưng dù sao, nó chỉ ra rằng không gian có thể được sử dụng sau>. Vì vậy & hoàn toàn là thừa.
Dave

13

Cú pháp đúng sẽ được tuân theo trong khi sử dụng '&' sẽ là thừa ở đây.

.panel{
   > .control{
   }
}

Theo ít nguyên tắc hơn , '&' được sử dụng để tham số hóa tổ tiên (nhưng không cần thiết ở đây). Trong ví dụ nhỏ hơn này , &: hover là cần thiết đối với : hover, nếu không nó sẽ dẫn đến lỗi cú pháp. Tuy nhiên, không có yêu cầu cú pháp nào như vậy để sử dụng '&' ở đây. Nếu không, tất cả các lồng sẽ yêu cầu '&' vì về cơ bản chúng đang tham chiếu đến cha mẹ.


1
@JJF không có câu hỏi vì nó là một câu trả lời?
Bill Woodger

0

Trong trường hợp bạn cần nhắm mục tiêu nhiều bộ chọn hơn:

.parent {
    >.first-child,
    >.second-child,
    >.third-child {
    ...
    }
}

-1

Ngoài ra, nếu bạn đang nhắm mục tiêu phần tử con đầu tiên, chẳng hạn như phần tử đầu tiên <td>của a <tr>, bạn có thể sử dụng một cái gì đó như sau:

tr {
    & > td:first-child {font-weight:bold;}
}

điều này giúp giảm khai báo lớp khi chúng không cần thiết.

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.