Eu tenho um conjunto de <a>
tags com cores de fundo rgba diferentes, mas o mesmo alfa. É possível escrever um único estilo css que alterará apenas a opacidade do atributo rgba?
Um exemplo rápido do código:
<a href="#"><img src="" /><div class="brown">Link 1</div></a>
<a href="#"><img src="" /><div class="green">Link 2</div></a>
E os 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);}
O que eu gostaria de fazer é escrever um único estilo que mudaria a opacidade quando o <a>
é pairado sobre ele, mas manteria a cor inalterada.
Algo como
a:hover .green, a:hover .brown {background-color: rgba(inherit,inherit,inherit,1);}
css
hover
background-color
rgba
Fireflight
fonte
fonte
div
elementos estão fazendo em seusa
elementos?a
elementos de nível de bloco .a
tag em oposição a uma ao redor doimg
e outra ao redor do texto. O fato de ser compatível com HTML 5 é um bom bônus.Respostas:
Isso agora é possível com propriedades personalizadas:
Para entender como isso funciona, consulte Como aplico opacidade a uma variável de cor CSS?
Se as propriedades personalizadas não forem uma opção, consulte a resposta original abaixo.
Infelizmente, não, você terá que especificar os valores de vermelho, verde e azul novamente para cada classe individual:
Você só pode usar a
inherit
palavra - chave sozinha como um valor para a propriedade e, mesmo assim, o uso deinherit
não é apropriado aqui.fonte
Você pode fazer várias coisas para evitar ter que codificar os números se quiser. Alguns desses métodos funcionam apenas se você usar um plano de fundo branco simples, pois eles realmente adicionam branco no topo em vez de reduzir a opacidade. O primeiro deve funcionar bem para tudo fornecido:
position
como relativo ou absoluto na<div>
tagOpção 1:
::before
elemento psuedo:Opção 2: sobreposição de gif branco:
Opção 3:
box-shadow
método:Uma variação do método GIF, mas pode ter problemas de desempenho.
Exemplos de CodePen: http://codepen.io/chrisboon27/pen/ACdka
fonte
Não, não é possível.
Você pode tentar um pré-processador CSS , no entanto, se quiser fazer esse tipo de coisa.
Pelo que pude ver, pelo menos LESS e Sass têm funções que podem tornar as cores mais ou menos transparentes.
fonte
Não, isso não é possível.
Se você deseja usar
rgba
, deve definir cada valor juntos. Não há como mudar apenas o alfa.fonte
Agora é 2017 e isso agora é possível com
Propriedades personalizadas CSS / Variáveis CSS ( Caniuse )
Um caso de uso clássico para variáveis CSS é a capacidade de individualizar partes do valor de uma propriedade.
Então aqui, em vez de repetir toda a expressão rgba mais uma vez - nós dividimos ou 'individualizamos' os
rgba
valores em 2 partes / variáveis (uma para o valor rgb e outra para o alfa)Então, ao passar o mouse, podemos agora apenas modificar a variável --alpha:
Exibir trecho de código
Codepen
Leitura adicional:
Individualizando propriedades CSS com variáveis CSS (Dan Wilson)
fonte
existe uma alternativa, você pode adicionar uma imagem de fundo gradiente linear na cor original.
também, com a propriedade de filtro css3, você pode fazer isso também, mas parece que mudará a cor do texto
aqui está um jsfiddle: https://jsfiddle.net/zhangyu911013/epwyL296/2/
fonte
solução simples:
exemple: https://jsfiddle.net/epwyL296/14/
apenas brinque com alfa de fundo. se você quiser luz em vez de escuridão, basta substituir # 000 por #fff
fonte
Por que não usar
:hover
e especificar uma opacidade diferente na classe de foco?fonte
fill-opacity
Eu tive um problema parecido. Eu tinha 18 divs diferentes trabalhando como botões, e cada um com uma cor diferente. Em vez de descobrir os códigos de cores de cada um ou usar um seletor div: hover para alterar a opacidade (que afeta todos os filhos), usei a pseudo-classe: antes, como na resposta de @Chris Boon.
Como eu queria colorir os elementos individuais, usei: before para criar um div branco transparente em: hover. Este é um washout muito básico.
De acordo com CanIUse.com, isso deveria ter algo em torno de 92% de suporte no início de 2014. ( http://caniuse.com/#feat=css-gencontent )
fonte
Você pode fazer isso com variáveis CSS, embora seja um pouco confuso.
Primeiro, defina uma variável contendo apenas os valores RGB, na ordem, da cor que deseja usar:
Em seguida, você pode atribuir um valor RGBA para uma cor e extrair tudo, exceto o valor alfa desta variável:
Isso não é muito bonito, mas permite que você use os mesmos valores RGB, mas diferentes valores alfa para uma cor.
fonte
:root
, pode estar na classe do elemento, definindo sua cor base. Obrigado!Atualização: Infelizmente não é possível fazer isso. Você precisará escrever dois seletores separados de:
De acordo com o W3C, a
rgba
propriedade não possui / suporta oinherit
valor.fonte
inherit
não é um argumento de função válido. Você notará que não funciona com nenhuma outra função CSS.rgba
etransitions
? Porque eu sei que é compatível com algumas das propriedades.url()
,attr()
etc. também.inherit
é apenas um valor de propriedade.url()
transições. Eu só não tinha 100% de certezargba
porque é usado para cores. Obrigado por me educar :)!Eu enfrentei um problema semelhante. Aqui está o que eu fiz e funciona bem (
only alpha changes on hover and also the text is not affected
) pelas seguintes etapas:1) Aplique uma classe destacada (ou qualquer de sua escolha) para qualquer elemento que você deseja alterar o alfa de fundo.
2) Obtenha a cor de fundo rgba
3) Armazene-o em uma string e manipule-o (altere o alfa) como quiser ao passar o mouse (entrada do mouse e deixa do mouse)
Código HTML:
Código CSS:
Código Javascript:
Working Fiddle: http://jsfiddle.net/HGHT6/1/
fonte
Uma solução simples
opacity
se você pode acomodar uma pequena mudança embackground-color
:fonte
Esta é a maneira mais simples; coloque isso em sua folha de estilo css:
feito!
fonte