2012-02-05 13 views
14

Me preguntaba cómo podía hacer algo como lo siguiente con menos css:CSS-Menos clases extender clase con pseudo clase

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.btn-foo { 
    .btn; 
    &:hover { 
    .btn:hover; 
    } 
} 

De-supuesto esto es sólo un ejemplo, lo que hay que señalar es que si hay Es cualquier forma de extender la pseudo-clase para evitar volver a escribir las propiedades de la pseudo clase :hover donde sea que las necesite. Sé que podría crear un mixin para eso, pero me pregunto si podría evitarlo.

Gracias

Respuesta

30

ACTUALIZACIÓN: Si no puede modificar los archivos externos acaba de redefinir los selectores, y añadir estados faltantes:

.btn { 
    // not adding anything here, won't affect existing style 
    &:hover { 
    // adding my own hover state for .btn 
    background: yellow; 
    ... 
    } 
} 

// this will make your foo button appear as in external style 
// and have the :hover state just as you defined it above 
.btn-foo { 
    .btn; 
} 

Mejor ahora? :)


No necesita pseudoclases. Se acaba de trabajar :)

Prueba esto:

.btn { 
    background: yellow; 

    &:hover { // define hover state here 
    background: green; 
    } 
} 

button { 
    .btn; 
} 

Cada elemento crear heredará todo lo que se define, incluyendo el estado estacionario. Creo que es una de las principales características sorprendentes de LESS.

Espero que esto ayude.

+0

Hola, gracias por su respuesta, sé que esto funciona, es por eso que no tengo '&: hover' en mi ejemplo pero definición separada. Gracias – panosru

+0

seguro, pero ... ¿tiene sentido separarlo (cuando se usa lesscss)? – bzx

+0

No, no tiene sentido, pero hay casos en los que no desea tocar menos archivos del vendedor :) – panosru

6

En Menos 1.4.0

Este (1.4.1?):

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.btn-foo:extend(.btn all) { 
} 

amplía a esto:

.btn, 
.btn-foo { 
    color: black; 
} 
.btn:hover, 
.btn-foo:hover { 
    color: white; 
} 

Tenga cuidado sin embargo, esto:

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.abc .btn { 
    margin: 2px; 
} 

.btn-foo:extend(.btn all) { 

} 

Producirá esto:

.btn { 
    color : black; 
} 

.btn:hover { 
    color : white; 
} 

.abc .btn { 
    margin: 2px; 
} 

.btn-foo:extend(.btn all) { 

} 

no he mirado en SASS más de media hora, pero creo que el último caso es su valor por defecto (o única) @extend comportamiento.

+0

¿Está documentado esto en algún lugar? No puedo encontrarlo en el sitio oficial. – ehdv

+0

@ehdv Sí. Ahora extender está documentado, al menos en su página de Github. El asunto es que su documento está muy atrás de su desarrollo. Es posible que deba estar pendiente de las discusiones (como https://github.com/less/less.js/issues?labels=ReadyForImplementation&milestone=&page=1&state=open) – John

Cuestiones relacionadas