::before ve ::after ne yapar
::before, bir elementin ilk çocuğu olarak bir kutu ekler, ::after ise son çocuğu olarak. Kutunun içine ne gireceğini content özelliği belirler. HTML'e hiçbir şey eklenmez: tarayıcı onu CSS'ten üretir.
HTML yalnızca 9 ve Tests pass içeriyor. Dolar işareti, "/ month" etiketi ve onay işaretinin hepsi CSS'ten geliyor. Yukarıdaki örneklerin yaptığı gibi sen ezmedikçe elementin stillerini (yazı tipi, renk) miras alırlar.
Söz dizimi
selector::before {
content: "text"; /* required */
/* any other styles */
}
selector::after {
content: ""; /* empty string: a box with no text */
}
content değeri | Sonuç |
|---|---|
"text" | Bir metin. Satır sonu için "\A" (white-space: pre ile birlikte), bir Unicode karakteri için "\2192" (→) kullan |
"" | Şekiller ve süslemeler için boş bir kutu |
attr(data-label) | Elementin bir özniteliğinin değeri |
counter(step) | Bir CSS sayacının değeri |
open-quote / close-quote | Elementin diline uygun tırnak işaretleri |
none ya da normal | Sözde element yok (normal varsayılandır) |
content zorunludur. O olmadan, onlara kaç başka özellik verirsen ver ::before ve ::after hiç oluşturulmaz.
content: "" ile dekoratif şekiller
content: "" ile sözde element, boyutlandırıp renklendirebileceğin boş bir kutudur. Varsayılan olarak satır içidir ve satır içi bir kutu width ile height değerlerini yok sayar, bu yüzden ona display: block, inline-block ya da position: absolute ver:
Bir sözde elementi konumlandırmak
Elementin üzerinde ya da çevresinde duran bir süsleme için sözde elemente position: absolute, elementin kendisine position: relative ver; böylece uzaklıklar elemente göre ölçülür:
Bir sözde sınıfla birleştirirken sıraya dikkat et: önce durum, sonra sözde element gelir, .link:hover::after, asla .link::after:hover değil.
attr() ile öznitelik okumak: bir tooltip
attr(), bir özniteliğin değerini content içine çeker; böylece tek bir kural her elementte farklı bir metin gösterebilir:
Yalnızca hover ile açılan bir tooltip, klavye ve dokunmatik ekran kullanıcıları için görünmezdir. Önemli olan her şey için metni sayfaya koy ya da elemente tabindex="0" verip onu :focus ile de göster.
Sayaçlarla numaralandırma
CSS sayaçları ve ::before, sayıları elle yazmadan öğeleri numaralandırır:
Bir adım ekle ya da çıkar, numaralar kendiliğinden güncellenir.
::before ve ::after'ın çalışmadığı yerler
Sözde elementler elementin içine, etiketlerinin arasına eklenir. Onlar için bir içi olmayan elementler onları gösteremez:
<img>,<video>,<iframe>(değiştirilen elementler)<input>,<select>,<textarea>(form kontrolleri) ve<br>
Bazı tarayıcılar onları bir checkbox ya da bozuk bir resim üzerinde çizer, ama bu tutarlı değildir. Bunun yerine sözde elementi bir sarmalayıcıya koy: <span class="field"><input></span> yaz ve .field::after stilini ver.
Sık yapılan hatalar
contentyok. Hiçbir şeyin görünmemesinin en yaygın nedeni.content: ""ekle.- Satır içi bir sözde elementi boyutlandırmak.
display: block,inline-blockya daposition: absolutevermedenwidthveheighthiçbir şey yapmaz. - Durumla yanlış sıra.
a:hover::afterçalışır;a::after:hoverçalışmaz. - Konumlandırılmış bir ebeveyn olmadan absolute konum. Sözde element bu durumda uzaktaki bir ataya hizalanır. Elemente
position: relativeekle. - Gerçek içeriği CSS'e koymak.
contentiçindeki metin seçilemez ya da kopyalanamaz. Bilgiyi HTML'de tut.
Sıkça Sorulan Sorular
CSS'te ::before ne işe yarar?
Seçilen elementin ilk çocuğu olan ve içi content özelliğinin söylediği şeyle dolan bir sözde element oluşturur. ::after aynısını son çocuk olarak yapar. İkisi de HTML'de yoktur, bu yüzden ikonlar, etiketler ve süslemeler için kullanışlıdır.
::before ya da ::after'ım neden görünmüyor?
En yaygın neden eksik bir content özelliğidir: o olmadan sözde element üretilmez. Boş bir dekoratif kutu için content: "" kullan. Diğer nedenler: genişlik ve yüksekliği olan satır içi bir sözde element (ona display: block ya da inline-block ver) ya da onları barındıramayan <img> veya <input> gibi bir element.
:before ile ::before arasındaki fark nedir?
Davranışta hiçbir fark yok. Çift iki noktalı ::before, sözde elementleri işaretleyen güncel söz dizimidir; tek iki noktalı :before ise tarayıcıların before, after, first-line ve first-letter için hâlâ kabul ettiği eski CSS2 yazımıdır.
img ya da input üzerinde ::before kullanabilir miyim?
Güvenilir şekilde hayır. Sözde elementler elementin içeriğinin içine eklenir; <img> gibi değiştirilen elementlerin ve <input> gibi form kontrollerinin onlar için bir içerik kutusu yoktur. Elementi bir <span> ya da <div> ile sar ve sözde elementi sarmalayıcıya koy.
Ekran okuyucular CSS ::before içeriğini okuyabilir mi?
Genellikle evet: content içindeki metin çoğunlukla erişilebilir ada dahil edilir, ama seçilemez ya da kopyalanamaz. Gerçek bilgiyi HTML'de tut, sözde elementleri süsleme ve küçük görsel ipuçları için kullan.