content: kural değil zorunluluk
Sözde eleman yalnızca content özelliği tanımlıysa oluşur. Değeri boş dize olabilir (content: "") ama bildirim mutlaka bulunmalıdır; yoksa tarayıcı sözde elemanı hiç üretmez ve diğer bütün bildirimlerin sessizce etkisiz kalır. "Kodum neden çalışmıyor" sorularının büyük kısmı unutulmuş bir content satırıdır.
content sadece metin almaz. Sayaç değeri, HTML özniteliğinin içeriği, gradyan görüntüsü ve bunların birleşimi yazılabilir. attr() ile bir data-* özniteliğini okumak, ipucu balonu (tooltip) yazmanın en kısa yoludur.
Varsayılan olarak sözde eleman display: inline'dır. Genişlik, yükseklik ve dikey dolgu vermek istiyorsan display: block ya da konumlandırma (position: absolute) gerekir; ikisi de kutu modelini açar.
.kart::before { content: ""; } /* boş boyama yüzeyi */
.uyari::before { content: "Dikkat: "; } /* metin */
.ipucu::after { content: attr(data-ipucu); } /* öznitelikten oku */
.bolum::before { content: counter(bolum) ". "; } /* CSS sayacı */<button class="ipucu" data-ipucu="Panoya kopyala">Kopyala</button>.ipucu { position: relative; }
.ipucu::after {
content: attr(data-ipucu);
position: absolute;
bottom: calc(100% + 8px);
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
padding: 0.35rem 0.6rem;
border-radius: 0.5rem;
background: #0f172a;
color: #e2e8f0;
font-size: 12px;
opacity: 0;
pointer-events: none; /* balon farenin önünü kesmesin */
transition: opacity 160ms ease;
}
.ipucu:hover::after,
.ipucu:focus-visible::after { opacity: 1; }