¿Es posible establecer la opacidad de una imagen de fondo sin afectar la opacidad de los elementos secundarios?
Ejemplo
Todos los enlaces en el pie de página necesitan una viñeta personalizada (imagen de fondo) y la opacidad de la viñeta personalizada debe ser del 50%.
HTML
<div id="footer">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
</ul>
</div>
CSS
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
}
Lo que he probado
Intenté establecer la opacidad de los elementos de la lista al 50%, pero luego la opacidad del texto del enlace también es del 50%, y no parece haber una manera de restablecer la opacidad de los elementos secundarios:
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
/* will also set the opacity of the link text */
opacity: 0.5;
}
También intenté usar rgba, pero eso no tiene ningún efecto en la imagen de fondo:
#footer ul li {
/* rgba doesn't apply to the background image */
background: rgba(255, 255, 255, 0.5) url(/images/arrow.png) no-repeat 0 50%;
}
Respuestas:
Puedes usar CSS
linear-gradient()
conrgba()
.fuente
Lleva tu imagen a un editor de imágenes, baja la opacidad, guárdala como .png y úsala en su lugar.
fuente
Esto funcionará con todos los navegadores
Si no desea que la transparencia afecte a todo el contenedor y sus elementos secundarios, consulte esta solución alternativa. Debe tener un hijo absolutamente posicionado con un padre relativamente posicionado.
Consulte la demostración en http://www.impressivewebs.com/css-opacity-that-doesnt-affect-child-elements/
fuente
position:relative;
y el img enposition:absolute;
NO me permite anular la opacidad heredada en el img, y no puedo usar el posicionamiento absoluto para los <li> 's (eso es un desastre ;-). En Javascript lo intentéimgs[i].style.opacity = '1';
, pero eso tampoco funciona para anular la opacidad heredada. Si entiendo correctamente, tampoco puedo usar rgba porque necesito afectar las imágenes en sí mismas, no solo un color de fondo. ¿Alguien tiene una recomendación para mí?Si está utilizando la imagen como una viñeta, puede considerar el pseudo elemento: before.
fuente
*zoom: expression( … );
(ver : after y: before css pseudo elements hack for IE 7 ), pero IE7 finalmente se está volviendo pasado.Puede poner la imagen en el div: after o div: before y establecer la opacidad en ese "div virtual"
encontrado aquí http://css-tricks.com/snippets/css/transparent-background-images/
fuente
Hackear con opacidad .99 (menos de 1) crea un contexto de índice z para que no pueda preocuparse por los valores globales del índice z. (Intente eliminarlo y vea qué sucede en la próxima demostración donde el contenedor principal tiene un índice z positivo).
Si su elemento ya tiene un índice z, entonces no necesita este truco.
Demostración de esta técnica .
fuente
Desafortunadamente, al momento de escribir esta respuesta, hay hay una forma directa de hacerlo. Necesitas:
fuente
Otra opción es el enfoque de CSS Tricks de insertar un pseudo elemento del tamaño exacto del elemento original justo detrás de él para simular el efecto de fondo opaco que estamos buscando. A veces necesitará establecer una altura para el pseudo elemento.
fuente
La propiedad "filtro" necesita un número entero para el porcentaje de opacidad en lugar de doble, para que funcione para IE7 / 8.
PD: publico esto como respuesta, ya que SO necesita al menos 6 caracteres modificados para una edición.
fuente
Para ajustar realmente las cosas, recomiendo colocar las selecciones apropiadas en los contenedores de orientación del navegador. Esto fue lo único que funcionó para mí cuando no pude lograr que IE7 e IE8 "jugaran bien con los demás" (ya que actualmente estoy trabajando para una compañía de software que continúa apoyándolos).
Es posible que tenga redundancias en el código anterior; si alguien desea limpiarlo más, ¡no dude en hacerlo!
fuente
-moz-border-radius
en Firefox 13 y solo busca laborder-radius
propiedad estándar ahora). IE7 e IE8 son una historia diferente, pero eso es solo IE :-p-khtml-opacity
porque no entiende la consulta de medios, por lo que es inútil 2) IE es más estable de lo que piensa; no "explotará" solo porque agrega prefijos que no son de IE a una regla que se aplica a IE. El problema, en el momento en que lo enfrentó, debe haber venido de otra parte.Si tiene que establecer la opacidad solo en la viñeta, ¿por qué no establece el canal alfa directamente en la imagen? Por cierto, no creo que haya una manera de establecer la opacidad de una imagen de fondo a través de CSS sin cambiar la opacidad de todo el elemento (y sus hijos también).
fuente
Solo para agregar a lo anterior ... puede usar el canal alfa con los nuevos atributos de color, por ejemplo. rgba (0,0,0,0) ok, entonces esto es negro pero con opacidad cero para que, como padre, no afecte al niño. Esto solo funciona en Chrome, FF, Safari y ... Adelgazo O.
convierte tus colores hexadecimales a RGBA
fuente
background-image
solicitado por el OP.Encontré un tutorial bastante bueno y simple sobre este tema. Creo que funciona muy bien (y aunque es compatible con IE, les digo a mis clientes que usen otros navegadores):
Transparencia de fondo CSS sin afectar elementos secundarios, a través de RGBa y filtros
Desde allí puede agregar soporte de gradiente, etc.
fuente
Puedes probar este código. Creo que se trabajará. Puedes visitar la demo
fuente