2011-11-13 42 views
100

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

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

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

và chỉ còn lại ít tạo ra một cái gì đó như:

.panel > .control { ... } 
+0

http://stackoverflow.com/questions/7634932/less-js-strong-nested-rules – thirtydot

+14

Thật thú vị, đoạn trích trong câu hỏi của bạn đã là câu trả lời đúng. – thirtydot

+0

@thirtydot Chắc chắn, ngoại trừ việc nó không hoạt động ... không phải nếu bạn không xóa không gian hoặc thêm "&". Tôi đang sử dụng less.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

Trả lời

131

CẬP NHẬT

Trên thực tế, các 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 câu trả lời.

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

Lưu ý việc thiếu khoảng trắng 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 một không gian ở đó, trừ khi nó được ghi chép cụ thể. – BoltClock

+0

Đây chỉ là lừa phân tích cú pháp. Nó nhìn thấy nó như một bộ chọn duy nhất, vì vậy bạn nhận được '.panel> .control'. –

+0

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

70

Cách chính thức:

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

& luôn đề cập đến việc chọn hiện hành.

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

+1

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

+6

Bạn nghĩ gì là chính xác hơn? 'div> p' hoặc' div> p'? Bộ tổ hợp '&' là cách kinh điển làm điều đó trong LESS, không phải là cảm xúc của tôi. Lời giải thích của bạn là ma thuật. Một số người viết CSS của họ trong một dòng ... –

+0

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 ra. 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à dự phòng. – Dave

-1

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

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

này giúp giảm khai báo lớp khi họ không cần thiết.

8

Cú pháp chính xác sẽ theo sau trong khi sử dụng '&' sẽ không cần thiết ở đây.

.panel{ 
    > .control{ 
    } 
} 

Theo less guidelines, '&' được sử dụng để parameterize tổ tiên (nhưng không có nhu cầu như vậy ở đây). Trong this less example, &: di chuột là cần thiết trên : di chuột 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 như vậy để sử dụng '&' tại đây. Nếu không, tất cả các tổ sẽ yêu cầu '&' vì chúng chủ yếu đề cập đến cha mẹ.

+1

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

Các vấn đề liên quan