CSS İç İçe Yazım
Değişkenler değerlerinize ad verdi. calc ve arkadaşları onları hesapladı. Nesting, bu değerleri kullanan seçicileri düzenler: bir kartın başlığını, düğmesini ve hover stillerini dosya boyunca üst adını tekrarlamak yerine .card içinde tutun.
Alt seçiciyi iç içe yazın
Bir kuralı başka bir kuralın içine yazın. İç içe class veya type seçici, & ile başka bir şey demedikçe üstün torunu olarak (boşluk kombinatörü) bağlanır:
.card {
padding: 1.25rem;
border-radius: 0.75rem;
background: var(--surface, #fff);
.title {
margin: 0 0 0.5rem;
font-size: 1.25rem;
}
.body {
color: var(--muted, #444);
line-height: 1.5;
}
}
Tarayıcı bunu .card .title ve .card .body olarak genişletir. Hâlâ sıradan torun seçiciler alırsınız — nesting yapı ve yerellik için şekerdir, yeni bir eşleşme modeli değil.
& üst seçici
İç içe kuralın üstle aynı öğeye yapışması gerektiğinde — pseudo-class’lar, pseudo-element’ler veya üstte ekstra class — & kullanın:
.button {
display: inline-flex;
padding: 0.6rem 1.1rem;
border: 0;
border-radius: 0.5rem;
background: var(--brand, #2563eb);
color: #fff;
&:hover {
background: var(--brand-hover, #1d4ed8);
}
&:focus-visible {
outline: 2px solid var(--brand, #2563eb);
outline-offset: 2px;
}
&.is-primary {
background: var(--brand-strong, #1e40af);
}
}
&:hover demek .button:hover demektir. &.is-primary demek .button.is-primary demektir. & olmadan çıplak :hover { } yerel CSS’de geçersiz nesting’dir — & bağlantıyı açık kılar.
& ile kombinatörler
Doğrudan çocuk, kardeş veya başka açık bir bağ istediğinizde — düz torun boşluğu değil — kombinatörü & sonrasına koyun:
.nav {
display: flex;
gap: 0.75rem;
& > .item {
padding: 0.35rem 0.6rem;
}
& > .item + .item {
border-inline-start: 1px solid #ddd;
}
/* same as nesting .item without & — descendant */
.badge {
font-size: 0.75rem;
}
}
& > .item → .nav > .item. & olmadan iç içe .badge → .nav .badge. Bilinçli seçin: yanlışlıkla derin torunlar yaygın bir nesting kokusudur.
@media’yı bileşenle iç içe yazın
@media gibi at-rule’ları bir stil kuralının içine yazabilirsiniz; böylece breakpoint’ler değiştirdikleri bileşenin yanında yaşar:
.hero {
padding: 2rem 1.25rem;
h1 {
font-size: clamp(1.75rem, 1.2rem + 2vw, 2.75rem);
}
@media (min-width: 48rem) {
padding: 3rem 2rem;
h1 {
max-width: 20ch;
}
}
}
Genişletildiğinde media query hâlâ .hero (ve .hero h1) bildirimlerini sarar. Bunu önceki Modern Toolkit derslerindeki token’lar ve clamp() ile eşleştirin — nesting yalnızca kuralları taşır.
Nesting kalıplarına kısa bakış
📊 Yerel nesting kopya kâğıdı
| Yazarsınız | Anlamı | Ne zaman kullanın |
|---|---|---|
.card { .title { } } |
.card .title |
Bileşen altında torun stilleyin |
.btn { &:hover { } } |
.btn:hover |
Aynı öğede pseudo-class |
.btn { &.big { } } |
.btn.big |
Aynı öğede ekstra class |
.nav { & > a { } } |
.nav > a |
Açık çocuk kombinatörü |
.box { @media (…) { } } |
O kuralın seçicilerine bağlı media query | Breakpoint’leri bileşenle tutun |
Nest’leri sığ tutun
İki veya üç düzey genelde okunaklı kalır. Daha derin ağaçlar Sass ekiplerinin «seçici piramidi» sorununu geri getirir: zor diff’ler, daha yüksek specificity ve yalnızca bir dev üstün içinde anlamlı stiller. Net bir bileşen kökü (.card, .nav) tercih edin ve durumlar ile yakın çocukları iç içe yazın — tüm sayfayı değil.
Bileşen paketi: tokens + nest + durumlar
Gerçekçi bir dilim, calc veya variables derslerini tekrarlamadan toolkit’in son üç fikrini birleştirir:
.panel {
--panel-pad: 1rem;
padding: var(--panel-pad);
border: 1px solid #e5e7eb;
border-radius: 0.75rem;
.heading {
margin: 0 0 0.5rem;
font-weight: 600;
}
.actions {
display: flex;
gap: calc(var(--panel-pad) / 2);
margin-block-start: var(--panel-pad);
}
&.is-compact {
--panel-pad: 0.5rem;
}
@media (max-width: 36rem) {
.actions {
flex-direction: column;
}
}
}
Token’lar hâlâ custom property’dir; calc hâlâ boşluğu türetir; nesting heading, actions, kompakt durumu ve küçük ekran ayarını bir yerde tutar.
Kendiniz deneyin
- Düz kurallar
.card {},.card .title {},.card .meta {}alın ve.cardaltında nesting ile yeniden yazın. - Bir
.linküzerinde&:hoverekleyin ki yalnızca bağlantı (iç içe span değil) renk değiştirsin. .sidebariçinde@media (min-width: 40rem)iç içe yazarak padding’i genişletin — DevTools’ta genişletilmiş seçicileri doğrulayın.- Yanlışlıkla iç içe
:hover { }(&yok) ifadesini&:hover { }yapın ve geçerli olduğunu not edin. - Dağınık üç düzeyli bir nest’i, iç bloğu kendi class’ına yükselterek iki düzeye indirin.
Sık hatalar
&olmadan iç içe:hover { }yazmak — geçersiz veya kastettiğiniz şey değil;&:hoverkullanın- Çıplak
.child’ın.parent.childanlamına geleceğini beklemek — bunun için&.childgerekir - Sass
&__elementBEM hilelerini körü körüne kopyalamak — yerel nesting CSS seçici gramerini izler - Beş düzey iç içe yazmak «çünkü yapabiliyoruz» — okunabilirlik ve specificity zarar görür
- Nesting’in
var()veyacalc()yerine geçtiğini sanmak — yalnızca seçicileri ve at-rule’ları gruplar
Özet
- Bileşen stillerini yerel tutmak için alt seçicileri iç içe yazın; varsayılan olarak torunlara genişlerler
- Aynı öğe durumları (
:hover,.is-active) ve açık kombinatörler için&kullanın - İnce ayar yaptığınız bileşenin yanında
@mediaiç içe yazın - Nest’leri sığ tutun; nesting yapıdır, token veya matematik özelliği değil
- Modern Toolkit’te sıradaki: container queries — yalnızca viewport değil, üst boyutundan stil
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek