J'ai un ensemble de <a>
balises avec des couleurs d'arrière-plan rgba différentes mais le même alpha. Est-il possible d'écrire un seul style css qui ne changera que l'opacité de l'attribut rgba?
Un exemple rapide du code:
<a href="#"><img src="" /><div class="brown">Link 1</div></a>
<a href="#"><img src="" /><div class="green">Link 2</div></a>
Et les styles
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);}
Ce que je voudrais faire, c'est écrire un style unique qui changerait l'opacité lorsque le <a>
est survolé, tout en gardant la couleur inchangée.
Quelque chose comme
a:hover .green, a:hover .brown {background-color: rgba(inherit,inherit,inherit,1);}
css
hover
background-color
rgba
Vol de feu
la source
la source
div
éléments dans vosa
éléments?a
éléments de niveau bloc .a
balise par opposition à une autour deimg
et une autre autour du texte. Le fait qu'il soit pris en charge par HTML 5 est un avantage appréciable.Réponses:
C'est désormais possible avec les propriétés personnalisées:
Pour comprendre comment cela fonctionne, consultez Comment appliquer l'opacité à une variable de couleur CSS?
Si les propriétés personnalisées ne sont pas une option, consultez la réponse d'origine ci-dessous.
Malheureusement, non, vous devrez spécifier à nouveau les valeurs rouge, verte et bleue pour chaque classe individuelle:
Vous ne pouvez utiliser le
inherit
mot - clé seul que comme valeur de la propriété, et même dans ce cas, l'utilisation deinherit
n'est pas appropriée ici.la source
Vous pouvez faire diverses choses pour éviter d'avoir à coder en dur les nombres si vous le souhaitez. Certaines de ces méthodes ne fonctionnent que si vous utilisez un arrière-plan blanc uni car elles ajoutent vraiment du blanc sur le dessus plutôt que de réduire l'opacité. Le premier devrait fonctionner correctement pour tout ce qui est fourni:
position
sur relatif ou absolu sur la<div>
baliseOption 1:
::before
élément psuedo:Option 2: superposition de gif blanc:
Option 3:
box-shadow
méthode:Une variante de la méthode gif, mais peut avoir des problèmes de performances.
Exemples CodePen: http://codepen.io/chrisboon27/pen/ACdka
la source
Non, ce n'est pas possible.
Cependant, vous pouvez essayer un pré-processeur CSS si vous voulez faire ce genre de chose.
D'après ce que j'ai pu voir, au moins LESS et Sass ont des fonctions qui peuvent rendre les couleurs plus ou moins transparentes.
la source
Non, ce n'est pas possible.
Si vous souhaitez utiliser
rgba
, vous devez définir chaque valeur ensemble. Il n'y a aucun moyen de changer uniquement l'alpha.la source
Nous sommes maintenant en 2017 et c'est désormais possible avec
Propriétés personnalisées CSS / Variables CSS ( Caniuse )
Un cas d'utilisation classique des variables CSS est la possibilité d'individualiser des parties de la valeur d'une propriété.
Donc ici, au lieu de répéter toute l'expression rgba une fois de plus - nous divisons ou `` individualisons '' les
rgba
valeurs en 2 parties / variables (une pour la valeur rgb et une pour l'alpha)Ensuite, en survolant, nous pouvons maintenant simplement modifier la variable --alpha:
Afficher l'extrait de code
Codepen
Lectures complémentaires:
Personnalisation des propriétés CSS avec des variables CSS (Dan Wilson)
la source
il existe une alternative, vous pouvez ajouter une image d'arrière-plan à gradient linéaire sur la couleur d'origine.
aussi, avec la propriété de filtre css3, vous pouvez le faire aussi, mais il semble que cela changera la couleur du texte
voici un jsfiddle: https://jsfiddle.net/zhangyu911013/epwyL296/2/
la source
solution simple:
exemple: https://jsfiddle.net/epwyL296/14/
il suffit de jouer avec l'alpha du fond. si vous voulez de la lumière au lieu de l'obscurité, remplacez simplement # 000 par #fff
la source
Pourquoi ne pas utiliser
:hover
et spécifier une opacité différente dans la classe de survol?la source
fill-opacity
J'avais un problème similaire. J'avais 18 divs différents fonctionnant comme des boutons, et chacun avec une couleur différente. Plutôt que de trouver les codes de couleur pour chacun ou d'utiliser un sélecteur div: hover pour changer l'opacité (qui affecte tous les enfants), j'ai utilisé la pseudo-classe: avant comme dans la réponse de @Chris Boon.
Parce que je voulais faire la coloration sur les éléments individuels, j'ai utilisé: before pour créer un div blanc transparent sur: hover. C'est un lavage très basique.
Selon CanIUse.com, cela devrait avoir quelque chose comme 92% de soutien au début de 2014. ( http://caniuse.com/#feat=css-gencontent )
la source
Vous pouvez le faire avec des variables CSS, même si c'est un peu compliqué.
Tout d'abord, définissez une variable contenant uniquement les valeurs RVB, dans l'ordre, de la couleur que vous souhaitez utiliser:
Ensuite, vous pouvez attribuer une valeur RGBA pour une couleur et extraire tout sauf la valeur alpha de cette variable:
Ce n'est pas super joli, mais cela vous permet d'utiliser les mêmes valeurs RVB mais des valeurs alpha différentes pour une couleur.
la source
:root
, elle peut être sur la classe d'élément, définissant sa couleur de base. Merci!Mise à jour: ce n'est malheureusement pas possible. Vous devrez écrire deux sélecteurs distincts de:
Selon le W3C, la
rgba
propriété n'a pas / ne prend pas en charge lainherit
valeur.la source
inherit
n'est pas un argument de fonction valide. Vous remarquerez que cela ne fonctionne avec aucune autre fonction CSS.rgba
ettransitions
? Parce que je sais qu'il est pris en charge par un certain nombre de propriétés.url()
,attr()
etc. aussi.inherit
est une valeur de propriété uniquement.url()
déjà et les transitions. Je n'étais tout simplement pas sûr à 100%rgba
car il est utilisé pour les couleurs. Merci de m'avoir éduqué :)!J'ai fait face à un problème similaire. Voici ce que j'ai fait et cela fonctionne bien (
only alpha changes on hover and also the text is not affected
) par les étapes suivantes:1) Appliquez une classe en surbrillance (ou celle de votre choix) à l'élément dont vous souhaitez modifier l'alpha d'arrière-plan.
2) Obtenez la couleur de fond rgba
3) Stockez-le dans une chaîne et manipulez-le (changez l'alpha) comme vous le souhaitez en survol (mouseenter et mouseleave)
Code HTML:
Code CSS:
Code Javascript:
Violon de travail: http://jsfiddle.net/HGHT6/1/
la source
Solution de contournement simple avec
opacity
si vous pouvez accueillir un léger changement dansbackground-color
:la source
Il s'agit de la manière la plus simple; mettez ceci dans votre feuille de style css:
terminé!
la source