Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
CSS ::before, seçilen HTML öğesinin kendi içeriğinden önce görünen bir sözde öğe oluşturur. Bu içerik HTML'ye yeni bir düğüm olarak eklenmez; CSS tarafından üretilir. Görünür olması için genellikle content özelliği gerekir. Dekoratif simge, etiket, ayraç veya kısa görsel vurgu eklemek için kullanışlıdır; ana metni, önemli bilgiyi ya da erişilebilirlik açısından gerekli içeriği yalnızca ::before ile üretmek doğru değildir.

Nasıl çalışır?​


::before, hedef öğenin içerik akışında çocuk içeriklerinden önce konumlanır. Örneğin bir bağlantının metni "Dokümantasyon" ise ::before ile eklenen → karakteri görsel olarak metnin önünde görünür. Örneğin img gibi replaced öğelerde ::before oluşturulmaz. Pseudo-element, hedef öğenin kendisi değildir; bu nedenle JavaScript ile normal bir HTML öğesi gibi seçilip işlem yapılması beklenmemelidir.

En küçük çalışan örnekte üç şey bulunur: bir hedef öğe, ::before seçicisi ve content değeri.

Kod:
<a class="external-link" href="https://example.com">Dokümantasyon</a>

<style>
.external-link::before {
  content: "→ ";
  color: #555;
}
</style>

Bu kodu bir HTML dosyasına yerleştirdiğinizde bağlantı metninin önünde ok ve bir boşluk görünür. Ok görünmüyorsa önce seçicinin hedef öğenin sınıfıyla eşleştiğini, CSS dosyasının yüklendiğini ve content özelliğinin yazıldığını kontrol edin. content: none veya content: normal kullanılması da üretilen içeriği kaldırabilir.

Yaygın kullanım kararları​


  1. Yalnızca görsel bir işaret ekliyorsanız ::before kullanın. Örneğin bir etiketin başına renkli nokta veya bir bağlantının önüne dekoratif ok eklemek uygundur.
  2. Üretilecek metni content ile belirtin. Metin için tırnak kullanın; boş bir pseudo-element oluşturmak istiyorsanız content: "" yazın.
  3. Pseudo-elementin boyut, arka plan veya konum almasını istiyorsanız display değerini açıkça belirleyin. Özellikle genişlik ve yükseklik verilen dekoratif kutularda inline-block tercih edilebilir.
  4. İçeriğin öğenin önünde görünmesi yeterli değilse position ile konumlandırın. Bu durumda hedef öğeye çoğunlukla position: relative vererek referans alanını netleştirin.
  5. İçeriğin anlamı kullanıcı tarafından mutlaka bilinmeliyse onu HTML'ye gerçek metin olarak ekleyin. ::before ile eklenen metin kopyalama, ekran okuyucu ve etkileşim davranışlarında normal HTML içeriğiyle aynı kabul edilmez.

Aşağıdaki karşılaştırma, hangi yaklaşımın daha uygun olduğunu hızlıca gösterir:

İhtiyaçUygun yaklaşımNeden
Dekoratif ok veya nokta::beforeHTML'yi gereksiz işaretlemeyle doldurmaz
Kullanıcının okuması gereken uyarıGerçek HTML metniAnlam ve erişilebilirlik korunur
Bir öğenin sonuna ek görsel içerik::afterİçeriği hedef öğeden sonra üretir

Dekoratif rozet örneği​


Bir başlığın başına "Yeni" rozeti eklemek için aşağıdaki örnek kullanılabilir:

Kod:
<h2 class="new-title">CSS bileşenleri</h2>

<style>
.new-title::before {
  content: "Yeni";
  display: inline-block;
  margin-right: 6px;
  padding: 2px 5px;
  border-radius: 4px;
  background: #2457a6;
  color: #fff;
  font-size: 0.75em;
  font-weight: 700;
  vertical-align: middle;
}
</style>

Başlığın başında mavi bir rozet görünmesi beklenir. Rozet görünmüyorsa .new-title sınıfının gerçekten h2 öğesinde bulunduğunu ve başka bir CSS kuralının display, renk veya content değerini ezmediğini inceleyin. Rozetin kendisi yalnızca görsel bir durum bildiriyorsa bu kullanım uygundur. "Yeni" bilgisi sayfanın anlamının parçasıysa aynı bilgiyi HTML içinde de erişilebilir biçimde vermek daha güvenlidir.

Sık yapılan hatalar​


En sık hata, content yazmadan yalnızca .sinif::before seçicisini tanımlamaktır. İkinci hata, ::before ile hedef öğenin içine gerçek bir HTML öğesi eklendiğini sanmaktır. Pseudo-element üzerinde karmaşık alt işaretleme, form kontrolü üretme veya tıklanabilir bir düğme kurma yerine gerçek HTML kullanın. Ayrıca z-index ile katmanlama yapıldığında hedef öğenin konumlandırma ve yığılma bağlamını kontrol edin; aksi halde pseudo-element başka bir içerik tarafından örtülebilir.

Kaynaklar​



Sık sorulan sorular​


::before ile ::after arasındaki fark nedir?​


::before hedef öğenin içeriğinden önce, ::after ise sonra üretilir. İkisi de aynı content ve stil mantığıyla çalışır.

::before ile bir arka plan resmi eklenebilir mi?​


Evet. Pseudo-elemente boş bir content değeri verip background-image, boyut ve konumlandırma özellikleri uygulanabilir. Ancak yalnızca dekoratif görseller için kullanılması ve gerçek bilgi taşıyan görselin uygun metinle desteklenmesi gerekir.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic