Panduan lengkap CSS Nesting untuk styling web modern
CSS Nesting memungkinkan Anda menulis rules CSS dalam struktur bersarang yang lebih intuitif, mirip dengan HTML.
/* Traditional CSS */
.header {
background: #9333ea;
}
.header h1 {
color: white;
}
/* Dengan CSS Nesting */
.header {
background: #9333ea;
& h1 {
color: white;
}
}
đ Penjelasan Detail:
âĸ &
- Nesting selector merujuk ke parent selector
âĸ Bisa nested hingga beberapa level (tapi jangan berlebihan)
âĸ Mendukung semua jenis selector (class, id, pseudo-class, dll)
âĸ Lebih mudah dibaca dan di-maintain untuk komponen kompleks
/* Nesting dengan pseudo-class */
.button {
background: #9333ea;
color: white;
&:hover {
background: #a855f7;
}
&:active {
transform: scale(0.98);
}
}
/* Nesting media queries */
.card {
padding: 1rem;
@media (min-width: 768px) {
padding: 2rem;
}
}
CSS Nesting didukung di Chrome 112+, Firefox 117+, Safari 16.5+, Edge 112+. Untuk browser lama, bisa menggunakan PostCSS untuk kompilasi.
/* Multiple nesting */
.article {
max-width: 800px;
& h2 {
color: #9333ea;
margin-bottom: 1rem;
& span {
font-weight: normal;
}
}
& p {
line-height: 1.6;
}
}
/* Nesting dengan combinators */
.menu {
& > li {
display: inline-block;
}
}
đ Penjelasan Detail:
âĸ & bisa digunakan dengan semua combinator (>, +, ~)
âĸ Bisa menggabungkan dengan pseudo-class/elements
âĸ Support nesting media queries dan container queries
âĸ Bisa digunakan bersama @scope dan @layer
âĸ Tidak meningkatkan specificity dibanding CSS biasa
/* Nesting dengan @scope */
@scope (.card) {
:scope {
border: 1px solid #9333ea;
}
h2 {
color: #a855f7;
}
}
/* Nesting dengan @layer */
@layer components {
.button {
padding: 0.5rem 1rem;
&--primary {
background: #9333ea;
}
}
}
Fitur advanced seperti @scope dan @layer dengan nesting membutuhkan browser terbaru (Chrome 118+, Firefox 115+, Safari 17+).
Gunakan nesting dengan bijak - maksimal 3-4 level kedalaman. Hindari nesting berlebihan yang membuat CSS sulit dibaca dan di-maintain.
/* â
Good - Moderate nesting */
.card {
border-radius: 8px;
& .header {
padding: 1rem;
background: #9333ea;
& h2 {
color: white;
}
}
}
/* â Avoid - Too deep nesting */
.page {
& .content {
& .article {
& .header {
& h1 {
color: #9333ea;
}
}
}
}
}
đ Penjelasan Detail:
âĸ Gunakan BEM dengan nesting - kombinasikan manfaat keduanya
âĸ Hindari over-qualification - jangan nested selector yang sudah spesifik
âĸ Group related styles - nesting bagus untuk komponen yang terkait
âĸ Perhatikan output CSS - nesting bisa menghasilkan CSS yang lebih besar
âĸ Gunakan tools - PostCSS atau Sass jika butuh kompatibilitas luas