Mam zestaw <a>
tagów z różnymi kolorami tła rgba, ale z tą samą alfa. Czy można napisać pojedynczy styl CSS, który zmieni tylko przezroczystość atrybutu rgba?
Szybki przykład kodu:
<a href="#"><img src="" /><div class="brown">Link 1</div></a>
<a href="#"><img src="" /><div class="green">Link 2</div></a>
I style
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);}
Chciałbym napisać jeden styl, który zmieniłby krycie po <a>
najechaniu kursorem, ale nie zmieniłby koloru.
Coś jak
a:hover .green, a:hover .brown {background-color: rgba(inherit,inherit,inherit,1);}
css
hover
background-color
rgba
Firelight
źródło
źródło
div
robią twojea
elementy w twoich elementach?a
elementy blokowe .a
tag w przeciwieństwie do jednego wokółimg
i drugiego wokół tekstu. Fakt, że jest obsługiwany przez HTML 5, jest miłym dodatkiem.Odpowiedzi:
Jest to teraz możliwe dzięki właściwościom niestandardowym:
Aby zrozumieć, jak to działa, zobacz Jak zastosować krycie do zmiennej koloru CSS?
Jeśli niestandardowe właściwości nie są opcją, zobacz oryginalną odpowiedź poniżej.
Niestety nie, będziesz musiał ponownie określić wartości czerwonego, zielonego i niebieskiego dla każdej indywidualnej klasy:
Możesz użyć samego
inherit
słowa kluczowego jako wartości właściwości, a nawet wtedy użycieinherit
nie jest właściwe w tym przypadku.źródło
Jeśli chcesz, możesz zrobić różne rzeczy, aby uniknąć sztywnego kodowania liczb. Niektóre z tych metod działają tylko wtedy, gdy używasz zwykłego białego tła, ponieważ tak naprawdę dodają biel na wierzchu, zamiast zmniejszać krycie. Pierwsza z nich powinna działać dobrze na wszystko, co zostało dostarczone:
position
na<div>
tagu można ustawić wartość względną lub bezwzględnąOpcja 1:
::before
pseudo-element:Opcja 2: biała nakładka gif:
Opcja 3:
box-shadow
metoda:Odmiana metody gif, ale może powodować problemy z wydajnością.
Przykłady CodePen: http://codepen.io/chrisboon27/pen/ACdka
źródło
Nie, to niemożliwe.
Możesz jednak wypróbować preprocesor CSS , jeśli chcesz zrobić coś takiego.
Z tego, co widziałem, przynajmniej LESS i Sass mają funkcje, które sprawiają, że kolory są mniej lub bardziej przezroczyste.
źródło
Nie, to niemożliwe.
Jeśli chcesz użyć
rgba
, musisz ustawić wszystkie wartości razem. Nie ma sposobu, aby zmienić tylko alfę.źródło
Jest teraz 2017 i jest to teraz możliwe dzięki
Właściwości niestandardowe CSS / zmienne CSS ( Caniuse )
Jednym z klasycznych przypadków użycia zmiennych CSS jest możliwość indywidualizacji części wartości właściwości.
Więc tutaj, zamiast ponownie powtarzać całe wyrażenie rgba - dzielimy lub „zindywidualizowujemy”
rgba
wartości na 2 części / zmienne (jedną dla wartości rgb i jedną dla alfa)Następnie po najechaniu myszą możemy teraz zmodyfikować zmienną --alpha:
Pokaż fragment kodu
Codepen
Dalsze czytanie:
Indywidualizacja właściwości CSS za pomocą zmiennych CSS (Dan Wilson)
źródło
istnieje alternatywa, możesz dodać obraz tła z liniowym gradientem do oryginalnego koloru.
również z właściwością filtra css3 możesz to zrobić, ale wygląda na to, że zmieni to kolor tekstu
tutaj jest jsfiddle: https://jsfiddle.net/zhangyu911013/epwyL296/2/
źródło
proste rozwiązanie:
przykład: https://jsfiddle.net/epwyL296/14/
po prostu graj z alfa tła. jeśli chcesz mieć światło zamiast ciemności, po prostu zastąp # 000 przez #fff
źródło
Dlaczego nie użyć
:hover
i nie określić innego krycia w klasie hover?źródło
fill-opacity
Miałem podobny problem. Miałem 18 różnych elementów div działających jako przyciski, a każdy z nich miał inny kolor. Zamiast wymyślać kody kolorów dla każdego z nich lub użyć selektora div: hover, aby zmienić krycie (który wpływa na wszystkie dzieci), użyłem pseudoklasy: wcześniej, jak w odpowiedzi @Chris Boon.
Ponieważ chciałem pokolorować poszczególne elementy, użyłem: wcześniej do stworzenia przezroczystego białego div na: hover. To bardzo podstawowe wymywanie.
Według CanIUse.com powinno to mieć około 92% poparcia na początku 2014 r. ( Http://caniuse.com/#feat=css-gencontent )
źródło
Możesz to zrobić za pomocą zmiennych CSS, chociaż jest to trochę bałaganiarskie.
Najpierw ustaw zmienną zawierającą tylko wartości RGB w kolejności koloru, którego chcesz użyć:
Następnie możesz przypisać wartość RGBA do koloru i wyciągnąć wszystko oprócz wartości alfa z tej zmiennej:
To nie jest super ładne, ale pozwala użyć tych samych wartości RGB, ale różnych wartości alfa dla koloru.
źródło
:root
, może znajdować się w klasie elementu, ustawiając jego kolor bazowy. Dzięki!Aktualizacja: niestety nie można tego zrobić. Musisz napisać dwa oddzielne selektory:
Według W3C
rgba
właściwość nie ma / nie obsługujeinherit
wartości.źródło
inherit
nie jest to prawidłowy argument funkcji. Zauważysz, że nie działa z żadną inną funkcją CSS.rgba
itransitions
? Ponieważ wiem, że jest obsługiwany przez kilka właściwości.url()
,attr()
etc też.inherit
jest tylko wartością właściwości.url()
przejściach. Po prostu nie byłem w 100% pewien,rgba
ponieważ jest używany do kolorów. Dziękuję za edukację :)!Miałem podobny problem. Oto, co zrobiłem i działa dobrze (
only alpha changes on hover and also the text is not affected
), wykonując następujące kroki:1) Zastosuj podświetloną (lub dowolną wybraną) klasę do dowolnego elementu, dla którego chcesz zmienić alfa tła.
2) Pobierz kolor tła rgba
3) Przechowuj go w ciągu i manipuluj nim (zmień alfa), jak chcesz po najechaniu kursorem (mouseenter i mouseleave)
Kod HTML:
Kod CSS:
Kod JavaScript:
Working Fiddle: http://jsfiddle.net/HGHT6/1/
źródło
Proste obejście,
opacity
jeśli możesz uwzględnić niewielką zmianę wbackground-color
:źródło
Chodzi o najprostszy sposób; umieść to w swoim arkuszu stylów css:
Gotowe!
źródło