Tengo un conjunto de <a>
etiquetas con diferentes colores de fondo rgba pero con el mismo alfa. ¿Es posible escribir un solo estilo CSS que cambie solo la opacidad del atributo rgba?
Un ejemplo rápido del código:
<a href="#"><img src="" /><div class="brown">Link 1</div></a>
<a href="#"><img src="" /><div class="green">Link 2</div></a>
Y los estilos
a {display: block; position: relative}
.brown {position: absolute; bottom: 0; background-color: rgba(118,76,41,.8);}
.green {position: absolute; bottom: 0; background-color: rgba(51,91,11,.8);}
Lo que me gustaría hacer es escribir un estilo único que cambie la opacidad cuando se <a>
pasa el cursor sobre él, pero que mantenga el color sin cambios.
Algo como
a:hover .green, a:hover .brown {background-color: rgba(inherit,inherit,inherit,1);}
css
hover
background-color
rgba
Fireflight
fuente
fuente
div
haciendo tusa
elementos en tus elementos?a
elementos a nivel de bloque .a
etiqueta en lugar de una alrededor del textoimg
y otra alrededor del texto. El hecho de que sea compatible con HTML 5 es una buena ventaja.Respuestas:
Esto ahora es posible con propiedades personalizadas:
Para comprender cómo funciona esto, consulte ¿Cómo aplico opacidad a una variable de color CSS?
Si las propiedades personalizadas no son una opción, consulte la respuesta original a continuación.
Desafortunadamente, no, tendrá que especificar los valores rojo, verde y azul nuevamente para cada clase individual:
Solo puede usar la
inherit
palabra clave sola como valor para la propiedad, e incluso entonces el uso deinherit
no es apropiado aquí.fuente
Puede hacer varias cosas para evitar tener que codificar los números si lo desea. Algunos de estos métodos solo funcionan si usa un fondo blanco liso, ya que en realidad agregan blanco en la parte superior en lugar de reducir la opacidad. El primero debería funcionar bien para todo lo proporcionado:
position
en relativo o absoluto en la<div>
etiquetaOpción 1:
::before
psuedo-elemento:Opción 2: superposición de gif blanco:
Opción 3:
box-shadow
método:Una variación del método gif, pero puede tener problemas de rendimiento.
Ejemplos de CodePen: http://codepen.io/chrisboon27/pen/ACdka
fuente
No, no es posible.
Sin embargo, podrías probar un preprocesador CSS si quieres hacer este tipo de cosas.
Por lo que pude ver, al menos LESS y Sass tienen funciones que pueden hacer que los colores sean más o menos transparentes.
fuente
No, eso no es posible.
Si desea utilizar
rgba
, debe establecer cada valor juntos. No hay forma de cambiar solo el alfa.fuente
Ahora es 2017 y esto ahora es posible con
Propiedades personalizadas CSS / Variables CSS ( Caniuse )
Un caso de uso clásico de las variables CSS es la capacidad de individualizar partes del valor de una propiedad.
Entonces, aquí, en lugar de repetir toda la expresión rgba una vez más, dividimos o 'individualizamos' los
rgba
valores en 2 partes / variables (una para el valor rgb y otra para el alfa)Luego, al pasar el mouse, ahora podemos modificar la variable --alpha:
Mostrar fragmento de código
Codepen
Otras lecturas:
Individualización de propiedades CSS con variables CSS (Dan Wilson)
fuente
hay una alternativa, puede agregar una imagen de fondo de degradado lineal al color original.
también, con la propiedad de filtro css3, también puede hacer eso, pero parece que cambiará el color del texto
aquí hay un jsfiddle: https://jsfiddle.net/zhangyu911013/epwyL296/2/
fuente
Solución simple :
ejemplo: https://jsfiddle.net/epwyL296/14/
solo juega con alfa de fondo. si desea luz en lugar de oscuridad, simplemente reemplace # 000 por #fff
fuente
¿Por qué no usar
:hover
y especificar una opacidad diferente en la clase de desplazamiento?fuente
fill-opacity
Tuve un problema similar. Tenía 18 divs diferentes trabajando como botones, y cada uno con un color diferente. En lugar de averiguar los códigos de color para cada uno o usar un selector div: hover para cambiar la opacidad (que afecta a todos los niños), usé la pseudo-clase: antes como en la respuesta de @Chris Boon.
Como quería colorear los elementos individuales, usé: before para crear un div blanco transparente en: hover. Este es un lavado muy básico.
Según CanIUse.com, esto debería tener un soporte del 92% a principios de 2014. ( http://caniuse.com/#feat=css-gencontent )
fuente
Puede hacer esto con variables CSS, aunque es un poco complicado.
Primero, configure una variable que contenga solo los valores RGB, en orden, del color que desea usar:
Luego, puede asignar un valor RGBA para un color y extraer todo menos el valor alfa de esta variable:
Esto no es muy bonito, pero te permite usar los mismos valores RGB pero diferentes valores alfa para un color.
fuente
:root
, puede estar en la clase de elemento, estableciendo su color base. ¡Gracias!Actualización: Lamentablemente, no es posible hacer eso. Deberá escribir dos selectores separados de:
Según el W3C, la
rgba
propiedad no tiene / soporta elinherit
valor.fuente
inherit
no es un argumento de función válido. Notarás que no funciona con ninguna otra función CSS.rgba
ytransitions
? Porque sé que es compatible con bastantes de las propiedades.url()
,attr()
etc. también.inherit
es un valor de propiedad solamente.url()
transiciones. Simplemente no estaba 100% segurorgba
porque se usa para colores. ¡Gracias por educarme :)!Enfrenté un problema similar. Esto es lo que hice y funciona bien (
only alpha changes on hover and also the text is not affected
) siguiendo los siguientes pasos:1) Aplique una clase resaltada (o cualquiera de su elección) a cualquier elemento del que desee cambiar el alfa de fondo.
2) Obtenga el color de fondo rgba
3) Guárdelo en una cadena y manipúlelo (cambie alfa) como desee al pasar el mouse (mouseenter y mouseleave)
Código HTML:
Código CSS:
Código Javascript:
Violín de trabajo: http://jsfiddle.net/HGHT6/1/
fuente
Solución alternativa simple
opacity
si puede adaptarse a un ligero cambio enbackground-color
:fuente
Esta es la forma más sencilla; pon esto en tu hoja de estilo CSS:
¡hecho!
fuente