2010-10-30 19 views
76

Por ejemplo, si tengo el siguiente código HTML:¿Es posible hacer referencia a una regla CSS dentro de otra?

<div class="someDiv"></div> 

y esto CSS:

.opacity { 
    filter:alpha(opacity=60); 
    -moz-opacity:0.6; 
    -khtml-opacity: 0.6; 
    opacity: 0.6; 
} 
.radius { 
    border-top-left-radius: 15px; 
    border-top-right-radius: 5px; 
    -moz-border-radius-topleft: 10px; 
    -moz-border-radius-topright: 10px;  
} 

.someDiv { 
    background: #000; height: 50px; width: 200px; 

/*** How can I reference the opacity and radius classes here 
    so this div has those generic rules applied to it as well ***/ 

} 

igual que la forma en lenguajes de script que tiene funciones genéricas que se utilizan a menudo escritas en la parte superior del guión y cada vez que necesita usar esa función, simplemente llama a la función en lugar de repetir todo el código cada vez.

+0

No es posible cambiar el HTML? – BoltClock

+0

Puede agregar una lista de clases separadas por comas en '.radius', como' .radius, .another, .element {/ * css * /} '. Eso le ahorrará código adicional, pero lo hace posiblemente menos legible. – Lekensteyn

+0

Posible duplicado de [¿Puede una clase CSS heredar una o más clases?] (Https://stackoverflow.com/questions/1065435/can-a-css-class-inherit-one-or-more-otherlasses) –

Respuesta

61

No, no puede hacer referencia a un conjunto de reglas de otro.

Puede, sin embargo, los selectores de reutilización en múltiples conjuntos de reglas dentro de una hoja de estilo y uso varios selectores en un único conjunto de reglas (por separating them with a comma).

.opacity, .someDiv { 
    filter:alpha(opacity=60); 
    -moz-opacity:0.6; 
    -khtml-opacity: 0.6; 
    opacity: 0.6; 
} 
.radius, .someDiv { 
    border-top-left-radius: 15px; 
    border-top-right-radius: 5px; 
    -moz-border-radius-topleft: 10px; 
    -moz-border-radius-topright: 10px;  
} 

También puede aplicar múltiples clases a un solo elemento HTML (el atributo de clase toma una lista separada por espacios).

<div class="opacity radius"> 

Cualquiera de estos enfoques debería resolver su problema.

Es probablemente ayudaría si utilizó los nombres de clases que describen qué un elemento debe ser de estilo en lugar de cómo debe ser de estilo. Deje cómo en la hoja de estilo.

+0

No estoy en desacuerdo pero necesito comentar, que no me permite copiar las reglas, por ejemplo 'fieldset legend' a' label.legend'. Lo entiendo, pero lamento. – rishta

+1

@rishta - Err ... Lo dije en el primer párrafo de esta respuesta. – Quentin

+0

También puede declarar un conjunto de reglas para elementos que tienen dos clases solo así: '.someDiv.other {/ * style ... * /}' de esta manera, solo los elementos que tienen ambas clases se ven afectados – Sirmyself

2

Apenas añada las clases a su html

<div class="someDiv radius opacity"></div> 
13

Puede no menos que esté utilizando algún tipo de CSS extendida como SASS. Sin embargo, es muy razonable aplicar esas dos clases adicionales al .someDiv.

Si .someDiv es único, también elegiría darle una identificación y hacer referencia a ella en css usando la identificación.

7

Si estás dispuesto y capaz de emplear un poco de jQuery, puede simplemente hacer esto:

$('.someDiv').css([".radius", ".opacity"]); 

Si usted tiene un javascript que ya procesa la página o puede encerrarlo en algún lugar de la escritura < > etiquetas. Si es así, ajuste lo anterior en la función de documento listo:

$(document).ready(function() { 
    $('.someDiv').css([".radius", ".opacity"]); 
} 

Hace poco me encontré con esto al actualizar un complemento de WordPress. Los han cambiado y usaron muchas directivas "! Important" en todo el css. Tuve que usar jquery para forzar mis estilos debido a la decisión genial de declarar! Importante en varias etiquetas.

1

Puede hacerlo fácilmente con SASS pre-processor utilizando @extend.

someDiv { 
    @extend .opacity; 
    @extend .radius; 
} 

ohterwise, podría utilizar Javascript (jQuery), así:

$('someDiv').addClass('opacity radius') 

Lo más fácil es, por supuesto, añadir múltiples clases de derecho en el HTML

<div class="opacity radius"> 
Cuestiones relacionadas