Menu

CSS opacity: przezroczystość elementów, tła i wygaszanie

opacity sprawia, że cały element i wszystko w nim staje się przezroczyste, od 0 (niewidoczny) do 1 (pełny). Poznaj wartości, powód, dla którego opacity wygasza też tekst, sposób na przezroczyste samo tło, opacity: 0 kontra visibility kontra display i wygaszanie po najechaniu.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Co robi opacity

opacity ustala, jak bardzo przezroczysty jest element: 1 to pełny (domyślnie), 0 to niewidoczny, a wszystko pomiędzy przepuszcza tło. Pudełka poniżej stoją na pasiastym tle, żeby było to widać:

Ostatnie pudełko nadal tam jest: zajmuje swoje 90px w wierszu, tylko nic nie rysuje. Zwróć uwagę, że białe liczby blakną razem ze swoimi pudełkami. opacity działa na element i wszystko w jego wnętrzu.

Przezroczyste tło, pełny tekst

Ponieważ opacity wygasza też dzieci, to złe narzędzie do "przezroczystego tła pod czytelnym tekstem". Zamiast tego użyj koloru tła z kanałem alfa:

Oba białe panele przepuszczają paski w tym samym stopniu. W pierwszym tekst blaknie razem z panelem. W drugim przezroczysty jest tylko kolor tła (rgb(255 255 255 / 0.6), to samo co rgba(255, 255, 255, 0.6)), więc tekst pozostaje pełny i łatwy do czytania. Kolory z kanałem alfa omawia strona o kolorach.

Dziecko nie ucieknie przed opacity rodzica: opacity: 1 na dziecku nic nie robi, bo rodzic jest rysowany jako jedna wygaszona warstwa, w której dziecko już jest.

Wartości

WartośćWynik
1 lub 100%całkowicie nieprzezroczysty (domyślnie)
0.5 lub 50%w połowie przezroczysty
0 lub 0%całkowicie przezroczysty, nadal w układzie i klikalny
1.5, -1przycięte do 1 i 0

Opacity dziedziczy się wizualnie, ale nie jako właściwość: obliczone opacity dziecka pozostaje 1, choć jest ono rysowane wewnątrz wygaszonego rodzica.

opacity: 0 kontra visibility: hidden kontra display: none

Wszystkie trzy sprawiają, że element znika, ale różnią się we wszystkim innym:

opacity: 0visibility: hiddendisplay: none
Zajmuje miejscetaktaknie
Odbiera kliknięcia i fokustaknienie
Odczytywany przez czytniki ekranutaknienie
Można animować przejściemtak, płynnieprzełącza się na jednym końcu, bez wygaszanianie

Różnica, która najczęściej zaskakuje, jest w drugim wierszu. Przycisk z opacity: 0 nadal można kliknąć i przejść do niego Tabem:

Odczyt pyta przeglądarkę, który element jest pod punktem wewnątrz każdego ukrytego przycisku. Przycisk z opacity: 0 odpowiada "clickable", a ten z visibility: hidden nie. Przycisk Visible zaczyna się po dwóch pustych miejscach po 150px, bo tylko przycisk z display: none oddał swoje miejsce. Żeby coś wygasić, a potem usunąć, animuj opacity i na końcu ustaw visibility: hidden.

Wygaszanie po najechaniu

opacity to jedna z najtańszych właściwości do animowania, więc to standardowy sposób na płynne pokazywanie i ukrywanie elementów. Podpis, który pojawia się nad obrazkiem:

:focus-within pokazuje podpis także osobom korzystającym z klawiatury. Pamiętaj o tabeli powyżej: gdy podpis jest niewidoczny, czytniki ekranu nadal go odczytują, a przy podpisie właśnie o to chodzi.

Dostępność: wygaszony tekst traci kontrast

Obniżenie opacity obniża kontrast. Szary tekst na białym tle z opacity: 0.5 może spaść znacznie poniżej współczynnika 4.5:1, którego potrzebuje tekst główny. Dla tekstu drugorzędnego wybierz kolor, który spełnia wymagania kontrastu, zamiast wygaszać ciemny. Przy wyłączonych kontrolkach obniżone opacity to częsty sygnał, ale łącz je z atrybutem disabled, żeby kontrolka była też nieosiągalna z klawiatury i ogłaszana jako wyłączona.

Efekt uboczny: kontekst nakładania

Każde opacity poniżej 1 tworzy nowy kontekst nakładania, tak jak transform. Dzieci z wysokim z-index nakładają się wtedy tylko wewnątrz wygaszonego elementu i nie mogą wznieść się ponad elementy na zewnątrz. Jeśli rozwijane menu wewnątrz wygaszonego panelu chowa się pod innym elementem, to właśnie jest powód (strona o z-index wyjaśnia nakładanie).

Częste błędy

  • Wygaszanie karty, żeby jej tło było przezroczyste. Tekst też blaknie. Użyj rgb(... / 0.5) na tle.
  • Próba przywrócenia pełnej nieprzezroczystości dziecku. Opacity rodzica ogranicza każde dziecko.
  • Ukrywanie samym opacity: 0. Element nadal odbiera kliknięcia i fokus. Dodaj visibility: hidden albo użyj display: none (pointer-events: none blokuje kliknięcia, ale nie fokus z klawiatury).
  • Pisanie opacity: 50. Opacity ma zakres od 0 do 1; 50 zostaje przycięte do 1. Napisz 0.5 albo 50%.
  • Tekst o niskim kontraście przez opacity. Sprawdzaj kontrast wyniku, a nie oryginalnego koloru.

Najczęściej zadawane pytania

Co robi opacity w CSS?

Ustala, jak bardzo przezroczysty jest element, od 0 (całkowicie przezroczysty) do 1 (całkowicie nieprzezroczysty). Działa na cały element, łącznie z tekstem, obramowaniem, obrazkami i każdym dzieckiem, jako jedną spłaszczoną warstwę.

Jak sprawić, żeby przezroczyste było tylko tło, a nie tekst?

Nie ruszaj opacity, tylko nadaj tłu kolor z kanałem alfa: background-color: rgb(37 99 235 / 0.5); albo rgba(37, 99, 235, 0.5). Tekst i dzieci pozostają całkowicie nieprzezroczyste.

Czy dziecko może być mniej przezroczyste niż rodzic?

Nie. Opacity rodzica działa na całą grupę, więc opacity: 1 na dziecku jej nie cofnie. Dziecko rodzica z 0.5 jest rysowane co najwyżej z połową nieprzezroczystości. Zamiast tego przenieś przezroczystość do koloru tła rodzica.

Czym różnią się opacity: 0, visibility: hidden i display: none?

opacity: 0 ukrywa element, ale nadal zajmuje on miejsce, można go kliknąć i czytniki ekranu go odczytują. visibility: hidden zachowuje miejsce, ale elementu nie da się kliknąć ani nie jest odczytywany. display: none całkowicie usuwa go z układu.

Czy opacity może być w procentach?

Tak. opacity: 50% to we wszystkich aktualnych przeglądarkach to samo co opacity: 0.5. Wartości poniżej 0 lub powyżej 1 są przycinane do tego zakresu.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ