No quiero heredar la opacidad secundaria del padre en CSS

Resuelto Lion King asked hace 13 años • 0 respuestas

No quiero heredar la opacidad secundaria del padre en CSS.

Tengo un div que es el padre y tengo otro div dentro del primer div que es el hijo.

Quiero establecer la propiedad de opacidad en el div principal, pero no quiero que el div secundario herede la propiedad de opacidad.

¿Cómo puedo hacer eso?

Lion King avatar Apr 24 '11 18:04 Lion King
Aceptado

En lugar de usar opacidad, establezca un color de fondo con rgba, donde 'a' es el nivel de transparencia.

Entonces en lugar de:

background-color: rgb(0,0,255); opacity: 0.5;

usar

background-color: rgba(0,0,255,0.5);
Dan Blows avatar Apr 24 '2011 11:04 Dan Blows

En realidad, la opacidad no se hereda en CSS. Es una transformación grupal posterior al renderizado. En otras palabras, si a <div>tiene configurada la opacidad, representa el div y todos sus elementos secundarios en un búfer temporal y luego compone todo ese búfer en la página con la configuración de opacidad dada.

Lo que desea hacer exactamente aquí depende de la representación exacta que esté buscando, lo cual no queda claro en la pregunta.

Boris Zbarsky avatar Apr 24 '2011 13:04 Boris Zbarsky

Un pequeño truco si su padre es transparente y le gustaría que su hijo sea el mismo, pero definido exclusivamente (por ejemplo, para sobrescribir los estilos de agente de usuario de un menú desplegable de selección):

.parent {
     background-color: rgba(0,0,0,0.5);
}

.child {
     background-color: rgba(128,128,128,0);
}
tsveti_iko avatar Nov 15 '2016 12:11 tsveti_iko

Como otros han mencionado en este y otros hilos similares, la mejor manera de evitar este problema es usar RGBA/HSLA o usar un PNG transparente.

Pero, si quieres una solución ridícula, similar a la que está vinculada en otra respuesta de este hilo (que también es mi sitio web), aquí tienes un nuevo script que escribí que soluciona este problema automáticamente, llamado thatsNotYoChild.js:

http://www.impressionwebs.com/fixing-parent-child-opacity/

Básicamente, utiliza JavaScript para eliminar todos los elementos secundarios del div principal y luego reposicionar los elementos secundarios a donde deberían estar sin volver a ser hijos de ese elemento.

Para mí, esto debería ser el último recurso, pero pensé que sería divertido escribir algo que hiciera esto, si alguien quiere hacerlo.

Louis L. avatar Mar 22 '2013 04:03 Louis L.