Menu

CSS Saydamlık (opacity): Saydam Element, Arka Plan ve Solma

opacity bütün bir elementi ve içindeki her şeyi 0'dan (görünmez) 1'e (düz) kadar yarı saydam yapar. Değerleri, opacity'nin neden metni de soldurduğunu ve yalnızca arka planın nasıl saydam yapılacağını, opacity: 0 ile visibility ve display farkını ve hover'da solmayı öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

opacity ne yapar

opacity bir elementin ne kadar yarı saydam olduğunu ayarlar: 1 düzdür (varsayılan), 0 görünmezdir ve aradaki her değer arka planın görünmesine izin verir. Aşağıdaki kutular, görebilesin diye çizgili bir arka planın üzerinde duruyor:

Son kutu hâlâ orada: satırdaki 90px'lik yuvasını kaplıyor, yalnızca hiçbir şey çizmiyor. Beyaz sayıların kutularıyla birlikte solduğuna dikkat et. opacity elemente ve içindeki her şeye uygulanır.

Saydam arka plan, düz metin

Opacity çocukları da soldurduğu için "okunaklı metnin arkasında yarı saydam bir arka plan" için yanlış araçtır. Bunun yerine alfa kanallı bir arka plan rengi kullan:

İki beyaz panel de çizgilerin aynı miktarda görünmesine izin veriyor. İlkinde metin panelle birlikte soluyor. İkincisinde yalnızca arka plan rengi saydam (rgb(255 255 255 / 0.6), rgba(255, 255, 255, 0.6) ile aynı), bu yüzden metin düz ve kolay okunur kalıyor. Alfalı renkleri renkler sayfası anlatıyor.

Bir çocuk ebeveyninin opaklığından kaçamaz: çocuktaki opacity: 1 hiçbir şey yapmaz, çünkü ebeveyn, çocuk zaten içinde olan tek bir soluk katman olarak çizilir.

Değerler

DeğerSonuç
1 ya da 100%tamamen opak (varsayılan)
0.5 ya da 50%yarı saydam
0 ya da 0%tamamen saydam, hâlâ düzende ve tıklanabilir
1.5, -11 ve 0'a sıkıştırılır

Opaklık görsel olarak miras alınır ama bir özellik olarak alınmaz: bir çocuğun hesaplanmış opacity değeri 1 kalır, ama soluk bir ebeveynin içinde çizilir.

opacity: 0, visibility: hidden ve display: none

Üçü de bir elementi kaybettirir, ama diğer her şeyde farklıdırlar:

opacity: 0visibility: hiddendisplay: none
Yer kaplarevetevethayır
Tıklama ve odak alırevethayırhayır
Ekran okuyucular okurevethayırhayır
Transition verilebilirevet, yumuşakçabir uçta birden geçer, solma yokhayır

Can yakan fark ikinci satırdır. opacity: 0 olan bir buton hâlâ tıklanabilir ve Tab ile ona gelinebilir:

Gösterge, tarayıcıya gizli her butonun içindeki bir noktanın altında hangi elementin olduğunu soruyor. opacity: 0 olan buton "tıklanabilir" diye cevap veriyor; visibility: hidden olan vermiyor. Visible butonu iki boş 150px'lik yuvadan sonra başlıyor, çünkü yerini geri veren tek buton display: none olandır. Bir şeyi soldurup sonra kaldırmak için opacity'yi canlandır ve sonunda visibility: hidden ayarla.

Hover'da solma

opacity canlandırması en ucuz özelliklerden biridir, bu yüzden bir şeyleri soldurup belirginleştirmenin standart yoludur. Bir resmin üzerinde beliren bir altyazı:

:focus-within altyazıyı klavye kullanıcılarına da gösterir. Yukarıdaki tabloyu aklında tut: görünmezken altyazı hâlâ ekran okuyucular tarafından okunur; bir altyazı için istediğin de budur.

Erişilebilirlik: soluk metin kontrast kaybeder

Opaklığı düşürmek kontrastı düşürür. opacity: 0.5 ile beyaz üzerindeki gri metin, gövde metninin ihtiyaç duyduğu 4.5:1 oranının çok altına düşebilir. İkincil metin için koyu bir rengi soldurmak yerine kontrastı geçen bir renk seç. Devre dışı kontroller için düşürülmüş opaklık yaygın bir işarettir, ama kontrolün klavyeyle de erişilemez olması ve devre dışı olarak duyurulması için onu disabled özniteliğiyle eşleştir.

Yan etki: stacking context

1'in altındaki her opacity, tıpkı transform gibi yeni bir stacking context oluşturur. Yüksek z-index değerli çocuklar bu durumda yalnızca soluk elementin içinde istiflenir ve onun dışındaki elementlerin üstüne çıkamaz. Soluk bir panelin içindeki bir açılır menü başka bir elementin altına kayıyorsa nedeni budur (istiflemeyi z-index sayfası açıklıyor).

Sık yapılan hatalar

  • Arka planını saydam yapmak için bir kartı soldurmak. Metin de solar. Arka planda rgb(... / 0.5) kullan.
  • Bir çocuğu yeniden opak yapmaya çalışmak. Bir ebeveynin opaklığı her çocuğu sınırlar.
  • Tek başına opacity: 0 ile gizlemek. Element hâlâ tıklama ve odak alır. visibility: hidden ekle ya da display: none kullan (pointer-events: none tıklamaları durdurur ama klavye odağını durdurmaz).
  • opacity: 50 yazmak. Opaklık 0 ile 1 arasındadır; 50, 1'e sıkıştırılır. 0.5 ya da 50% yaz.
  • Opaklık yüzünden düşük kontrastlı metin. Orijinal rengin değil sonucun kontrastını kontrol et.

Sıkça Sorulan Sorular

CSS'te opacity ne işe yarar?

Bir elementin ne kadar yarı saydam olduğunu 0'dan (tamamen saydam) 1'e (tamamen opak) kadar ayarlar. Metni, kenarlığı, resimleri ve her çocuğu dahil bütün elemente tek bir düzleştirilmiş katman olarak uygulanır.

Metin değil de yalnızca arka plan nasıl saydam yapılır?

opacity'ye dokunma ve arka plana alfalı bir renk ver: background-color: rgb(37 99 235 / 0.5); ya da rgba(37, 99, 235, 0.5). Metin ve çocuklar tamamen opak kalır.

Bir çocuk element ebeveyninden daha opak olabilir mi?

Hayır. Bir ebeveynin opaklığı bütün gruba uygulanır, bu yüzden bir çocuktaki opacity: 1 onu geri alamaz. 0.5 olan bir ebeveynin çocuğu en fazla yarı opaklıkta çizilir. Bunun yerine saydamlığı ebeveynin arka plan rengine taşı.

opacity: 0, visibility: hidden ve display: none arasındaki fark nedir?

opacity: 0 elementi gizler ama element hâlâ yer kaplar, tıklanabilir ve ekran okuyucular tarafından okunur. visibility: hidden yeri korur ama tıklanamaz ve okunmaz. display: none onu düzenden tamamen kaldırır.

opacity yüzde olabilir mi?

Evet. Bütün güncel tarayıcılarda opacity: 50%, opacity: 0.5 ile aynıdır. 0'ın altındaki ya da 1'in üstündeki değerler bu aralığa sıkıştırılır.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA