Menu

CSS ::before ve ::after Sözde Elementleri, Örneklerle

::before ve ::after, doğrudan CSS'ten bir elementin ilk ve son çocuğu olarak üretilmiş içerik ekler. content özelliğini, boş bir content'in neden gerekli olduğunu, onları konumlandırmayı, attr() ile tooltip'leri, sayaçları ve çalışmadıkları yerleri öğren.

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

::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ğeriSonuç
"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-quoteElementin diline uygun tırnak işaretleri
none ya da normalSö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

  • content yok. 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-block ya da position: absolute vermeden width ve height hiç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: relative ekle.
  • Gerçek içeriği CSS'e koymak. content iç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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA