2014-05-19 16 views
10

Voglio creare un mixin segnaposto come segue. Tuttavia, questo non riesce a compilare in LESS versione 1.7.0.CSS MENO Placeholder Mixin

.placeholder(...) { 
    ::-webkit-input-placeholder: @arguments; 
    :-moz-placeholder: @arguments; 
    ::-moz-placeholder: @arguments; 
    :-ms-input-placeholder: @arguments; 
} 
+0

Questo non viene compilato perché tenta di generare malformati CSS. – helderdarocha

risposta

13

segnaposto di input sono selettori, non proprietà, e così la loro sintassi CSS è placeholder { ... }, non placeholder: ... cui si sta tentando di generare.

Se si fissa che:

.placeholder(...) { 
    ::-webkit-input-placeholder {border:@arguments} 
    ::-moz-placeholder {border:@arguments} 
    :-ms-input-placeholder {border:@arguments} 
} 

Sarà compilato, e quando lo si chiama:

.placeholder(solid; 1px; blue;); 

genererà questo CSS:

::-webkit-input-placeholder { 
    border: solid 1px #0000ff; 
} 
::-moz-placeholder { 
    border: solid 1px #0000ff; 
} 
:-ms-input-placeholder { 
    border: solid 1px #0000ff; 
} 

(ho appena incluso border: come esempio di una proprietà CSS generica, indipendente dal suo effetto reale su un oggetto di input)

+0

Questo funziona e chiarisce l'uso del parametro @arguments. Ciò mi ha aiutato a raggiungere il mio mixin finale che consente di rispettare qualsiasi regola segnaposto. –

2

Mancano le parentesi graffe attorno ai selettori segnaposto.

Gli stili dovrebbero essere le seguenti:

.placeholder(@color) { 
    ::-webkit-input-placeholder { 
     color: @color; 
    } 
    :-moz-placeholder { 
     color: @color; 
    } 
    ::-moz-placeholder { 
     color: @color; 
    } 
} 
55

Mixin consente qualsiasi regola css segnaposto.

.placeholder(@rules) { 

    &::-webkit-input-placeholder { 
     @rules(); 
    } 
    &:-moz-placeholder { 
     @rules(); 
    } 
    &::-moz-placeholder { 
     @rules(); 
    } 
    &:-ms-input-placeholder { 
     @rules(); 
    } 
} 

Esempio utilizzo:

.placeholder({ 
    color: #0000FF; 
    text-transform: uppercase; 
}); 
+1

quale versione di LESS stai usando - non mi compila per me –

+2

funziona con 'lessc -v' 2.0.0. Le regole commerciali e passate rendono questo modo più utile della risposta accettata. – amwinter

+0

Grazie per la bella sintassi! Quale scopo servono i parens dopo '@rules()'? Pensavo che i paren fossero usati solo per mixet parametrici? – ptim