2012-09-27 29 views
36

Como sabemos, los elementos secundarios no pueden a partir de ahora anular la propiedad opacity de su elemento principal. La propiedad opacity del elemento primario siempre tiene efecto.¿Por qué los elementos hijo no pueden anular la opacidad del elemento primario con un valor mayor?

Esto tiene sentido cuando el niño intenta anular (anular con un valor menor) la opacidad del elemento primario. Pero, ¿qué pasa si el niño está tratando de anularlo con un mayor valor? ¿No debería eso estar permitido? ¿Por qué un padre translúcido no puede tener un niño opaco? ¿Alguien puede compartir ideas sobre por qué se decidió tal restricción como parte del diseño de CSS?

Realmente apreciaría si alguien puede arrojar algo de luz sobre la razón teórica de esto. Básicamente, estoy tratando de descubrir la parte de por qué no puedo hacer esto (no soluciones temporales, como ya se ha mencionado en muchas ocasiones). Estoy seguro de que esto es algo que muchos novatos como yo querrían saber.

+16

Hay una forma de lograr esto: utilizar un fondo translúcido en el elemento primario (por ejemplo, 'background-color: rgba (0, 0, 0, 0.5);', donde el fondo del elemento primario es un color 'rgba' , que tiene un canal alfa – JCOC611

+2

Sí, lo sé. ¿Qué tal si estoy usando una imagen de fondo en los elementos padre e hijo? Además, no estoy buscando soluciones en realidad. Estoy buscando entender por qué tal decisión de diseño fue hecha en CSS – techfoobar

Respuesta

43

Nunca he visto eso como "invalidación" o "anulación". Es una cuestión de opacidades relativas. Si el padre tiene una opacidad de 0.5, el niño también lo tiene (en relación con el contexto de apilamiento del padre). El niño puede tener su propio valor de opacidad entre 0 y 1, pero siempre será relativo a la opacidad del padre. Por lo tanto, si el niño también tiene opacity: 0.5 configurado, será 0.25 la opacidad de algunos de los hermanos del padre con la opacidad 1.

La spec la trata como una máscara alfa, donde la opacidad solo se puede eliminar. Un elemento es opaco o tiene algún grado de transparencia (cualquier cosa < 1):

La opacidad se puede considerar como una operación de posprocesamiento. Conceptualmente, una vez que el elemento (incluidos sus descendientes) se representa en una imagen fuera de pantalla RGBA, la configuración de opacidad especifica cómo combinar la representación fuera de pantalla en la representación compuesta actual.

y más adelante:

Si el objeto es un elemento contenedor, entonces el efecto es como si el contenido del elemento contenedor se mezclaron en el contexto actual utilizando una máscara donde el valor de cada píxel de la máscara es <alphavalue>

en cuanto a por qué que se llevó a cabo de esa manera, no creo que fue intencional en el sentido de "vamos lejos esté". Tal vez este enfoque fue elegido por ser más simple de calcular, y solo más tarde se reconoció la necesidad real de algo diferente (luego se introdujeron rgbacolor y background-color, y puedo estar equivocado acerca de la línea de tiempo aquí).

+0

Sí, esa parte es clara. La opacidad de 0.5 sobre una opacidad de 0.5 es como 0.25. Pero, lo que todavía me desconcierta es por qué los padres translúcidos no pueden tener hijos completamente opacos ? ¿Por qué no por diseño? – techfoobar

+1

Como los niños son * parte del padre *, su opacidad es intrínseca. – bfavaretto

+1

Eso significaría que podemos tener un niño opaco por encima de 0.5 padre opaco, si especificamos la opacidad del niño como 2.0. Pero eso no sucede, ¿verdad? Tiene que haber más razones para no permitir esto, creo. – techfoobar

Cuestiones relacionadas