2013-03-17 18 views
74

SASS ha una funzionalità denominata @extend che consente a un selettore di ereditare le proprietà di un altro selettore, ma senza copiare le proprietà (come i mixin).LES ha una funzione di "estensione"?

È presente anche questa funzione?

+0

Per chiarimenti, gli altri riferimenti questione non chiedono la stessa cosa. Questa domanda è semplice: "MENO ha una funzione di estensione?". L'altra domanda è chiedere qualcosa che richiede molto più pensiero per quanto riguarda le decisioni sullo styling. – jonschlinkert

+0

... per aggiungere al mio ultimo commento, l'altra domanda include il tag "stile di codifica" che supporta ulteriormente il mio punto. – jonschlinkert

risposta

133

Sì, Less.js ha introdotto extend in v1.4.0.

:extend() 

Piuttosto che implementare la sintassi at-regola (@extend) utilizzato da SASS e stilo, MENO implementato la sintassi pseudo-classe, che dà attuazione della MENO la flessibilità essere applicata direttamente ad un selettore sola oppure all'interno una dichiarazione. Quindi entrambi questi funzioneranno:

.sidenav:extend(.nav) {...} 

o

.sidenav { 
    &:extend(.nav); 
    ... 
} 

Inoltre, è possibile utilizzare la direttiva all di estendere "annidati" classi così:

.sidenav:extend(.nav all){}; 

ed è possibile aggiungere un elenco separato da virgole di classi che desideri estendere:

.global-nav { 
    &:extend(.navbar, .nav all, .navbar-fixed-top all, .navbar-inverse); 
    height: 70px; 
} 

Quando si estende selettori nidificate si dovrebbe notare le differenze:

selettori nidificati .selector1 e selector2:

.selector1 { 
    property1: a; 
    .selector2 { 
    property2: b; 
    } 
} 

Ora .selector3:extend(.selector1 .selector2){}; uscite:

.selector1 { 
    property1: a; 
} 
.selector1 .selector2, 
.selector3 { 
    property2: b; 
} 

, .selector3:extend(.selector1 all){}; uscite:

.selector1, 
.selector3 { 
    property1: a; 
} 
.selector1 .selector2, 
.selector3 .selector2 { 
    property2: b; 
} 

, .selector3:extend(.selector2){}; uscite

.selector1 { 
    property1: a; 
} 
.selector1 .selector2 { 
    property2: b; 
} 

e infine .selector3:extend(.selector2 all){};:

.selector1 { 
    property1: a; 
} 
.selector1 .selector2, 
.selector1 .selector3 { 
    property2: b; 
} 
+14

"La sintassi di LESS è più" fedele "al CSS tradizionale della sintassi at-rule (' @ extend') implementata da SASS e Stylus, che in genere è riservata per dare istruzioni o direttive al parser CSS nel browser. " <- che diamine vuol dire questo? Odori come parlare di marketing. – cimmanon

+1

lasciaci [continua questa discussione in chat] (http://chat.stackoverflow.com/rooms/26336/discussion-between-steveax-and-jonschlinkert) – steveax

+2

@cimmanon Immagino che tu abbia ragione, non intendevo sembra così. Ma c'è molta polemica sulla sintassi di Less, apparentemente perché la gente si aspettava che Less usasse la stessa sintassi del SASS. Ma nei CSS, i selettori di pseuso vengono utilizzati per le regole di corrispondenza dei modelli per determinare quali regole di stile si applicano agli elementi nell'albero del documento, mentre le regole at vengono utilizzate per le direttive "di livello superiore" (come ho detto).Quindi forse dovrei modificare la risposta per fornire quel dettaglio? O è un'altra domanda: "Perchè MENO ha scelto la sintassi dello pseudo-selettore?" – jonschlinkert

Problemi correlati