Yapısal Seçiciler
Bu dersin sonunda elemanları sırasına göre seçebilecek, bir koşulu dışarıda bırakabilecek ve içeriğine göre üst elemana stil verebileceksiniz.
Sıraya göre seçmek
Bir listenin ilk maddesini veya tablonun her ikinci satırını seçmek için her elemana sınıf yazmanız gerekmez. Yapısal seçiciler bunu kardeşler arasındaki sıraya bakarak yapar.
:first-childÜst elemanın ilk çocuğu.:last-childÜst elemanın son çocuğu.:only-childÜst elemanın tek çocuğu.:nth-child(3)Üçüncü çocuk.:nth-last-child(2)Sondan ikinci çocuk.
<ul>
<li>Bir</li>
<li>İki</li>
<li>Üç</li>
<li>Dört</li>
</ul>li:first-child {
color: teal;
}
li:last-child {
color: crimson;
}
li:nth-child(2) {
font-weight: bold;
}:nth-child formülleri
Parantezin içine bir sayıdan fazlası yazılabilir:
| Yazım | Seçilenler |
|---|---|
odd | Tek sıradakiler: 1, 3, 5… |
even | Çift sıradakiler: 2, 4, 6… |
3n | Her üçüncü: 3, 6, 9… |
3n+1 | 1, 4, 7, 10… |
n+3 | Üçüncüden itibaren hepsi |
-n+3 | İlk üç |
n sırasıyla 0, 1, 2… değerlerini alır ve 1’den küçük sonuçlar yok sayılır. 3n+1 için 1, 4, 7 çıkar.
En yaygın kullanımı satırları sırayla renklendirmektir. Değerleri değiştirip deneyin:
<table>
<tr><td>Ali</td><td>90</td></tr>
<tr><td>Ayşe</td><td>85</td></tr>
<tr><td>Can</td><td>70</td></tr>
<tr><td>Deniz</td><td>95</td></tr>
<tr><td>Ece</td><td>80</td></tr>
</table>table {
border-collapse: collapse;
width: 100%;
}
td {
padding: 8px;
}
tr:nth-child(even) {
background-color: whitesmoke;
}Tuzak: :first-child ve :first-of-type
p:first-child “ilk paragraf” demek değildir. “Üst elemanının ilk çocuğu olan paragraf” demektir. İlk çocuk bir başlıksa hiçbir paragraf seçilmez.
Türe göre saymak için -of-type kullanılır:
:first-of-typeTürünün ilki.:last-of-typeTürünün sonuncusu.:nth-of-type(2)Türünün ikincisi.
<article>
<h2>Başlık</h2>
<p>İlk paragraf</p>
<p>İkinci paragraf</p>
</article>/* Bu kural çalışmaz, ilk çocuk h2 etiketidir */
p:first-child {
color: crimson;
}
/* Bu kural ilk paragrafı bulur */
p:first-of-type {
font-weight: bold;
}:not: Hariç tutmak
:not() parantezin içindeki koşula uymayan elemanları seçer. Listelerde son madde hariç çizgi çekmek klasik bir kullanımıdır.
<ul class="liste">
<li>Bir</li>
<li>İki</li>
<li>Üç</li>
</ul>.liste {
list-style-type: none;
padding: 0;
}
.liste li {
padding: 8px 0;
}
.liste li:not(:last-child) {
border-bottom: 1px solid lightgray;
}Özgüllük hesabında :not kendisi puan getirmez ama parantezinin içindeki seçicinin puanı sayılır.
:is ve :where: Kısaltmak
İkisi de parantezin içindeki herhangi bir seçiciye uyan elemanları seçer ve uzun listeleri kısaltır:
/* Uzun yazım */
article h1, article h2, article h3 {
color: teal;
}
/* Aynı anlam */
article :is(h1, h2, h3) {
color: teal;
}
Aralarındaki fark özgüllüktür. :is en güçlü içeriği kadar puan alır. :where ise hiç puan almaz, bu yüzden üzerine yazması en kolay seçimdir.
:has: İçeriğe göre seçmek
CSS’te uzun yıllar yalnızca aşağı doğru seçim yapılabiliyordu. :has() bunu değiştirdi: Bir elemanı içindekilere göre seçer. Modern tarayıcıların tamamı destekler.
<article class="kart">
<h2>Resimli kart</h2>
<img src="baldiyetapanadam.png" alt="Örnek resim" width="80">
</article>
<article class="kart">
<h2>Resimsiz kart</h2>
</article>
<label class="secim">
<input type="checkbox">
Beni işaretleyin
</label>.kart {
padding: 12px;
margin-bottom: 8px;
border: 1px solid lightgray;
}
.kart:has(img) {
background-color: lightyellow;
}
.secim:has(input:checked) {
background-color: lightgreen;
}Diğer yararlı seçiciler
:emptyHiç içeriği olmayan eleman.:rootBelgenin kökü, yanihtmlelemanı. Değişkenler dersinde kullanacaksınız.
p:first-child ile ilk paragrafı seçtiğini sanmak. İlk çocuk başka bir elemansa çalışmaz. p:first-of-type kullanın.
:nth-child saymaya 0’dan başlamak. CSS’te sayım 1’den başlar.
:not içine virgülsüz birden çok seçici yazmak. Birden çok koşul için virgül kullanın: :not(.a, .b)
Stil için fazla uzun sıra zincirleri yazmak. HTML’e bir madde eklendiğinde bozulur. Gerekirse sınıf kullanın.
Tablodaki her ikinci satırı hangi seçici seçer?
-
tr:nth-child(even):: Doğru. -
tr:nth-child(1):: Bu yalnızca ilk satırı seçer. -
tr:even::eventek başına seçici değildir.
Bir h2 ve ardından iki paragraf içeren bir article var. p:first-child kaç eleman seçer?
- Hiçbirini :: Doğru. İlk çocuk
h2etiketidir. - İlk paragrafı :: İlk paragraf üst elemanın ilk çocuğu değildir.
- İki paragrafı da :: Paragrafların hiçbiri ilk çocuk değildir.
İçinde img bulunan kartları hangi seçici seçer?
-
.kart img:: Bu, kartı değil resmi seçer. -
.kart:has(img):: Doğru. -
.kart:not(img):: Bu,imgolmayan kartları seçer.
Hedefteki kodu yazın. li:nth-child(odd) için background-color değeri whitesmoke olsun. Altına Bir, İki ve Üç yazan üç maddeli bir ul ekleyin.
<style>
li:nth-child(odd) {
background-color: whitesmoke;
}
</style>
<ul>
<li>Bir</li>
<li>İki</li>
<li>Üç</li>
</ul>Hedefteki kodu yazın. p:not(:last-child) için border-bottom değeri 1px solid gray olsun. Altına bir div içinde Birinci ve Son yazan iki paragraf ekleyin.
<style>
p:not(:last-child) {
border-bottom: 1px solid gray;
}
</style>
<div>
<p>Birinci</p>
<p>Son</p>
</div>Bu derste öğrendikleriniz
:first-child,:last-childve:nth-child()kardeşler arasındaki sıraya bakar.-of-typeseçicileri yalnızca aynı türdeki elemanları sayar.:not()bir koşulu dışarıda bırakır,:is()ve:where()listeleri kısaltır.:has()bir elemanı içindekilere göre seçer.
Dersi bitirdin mi?Bu dersi tamamladın.
İlerlemen bu tarayıcıda saklanır.