CSS Modern yang Harus Kamu Tahu: Container Queries, :has(), dan Cascade Layers

CSS berkembang sangat pesat. Fitur-fitur baru ini mengubah cara kita menulis styling — dan sudah didukung semua browser modern tanpa polyfill.
CSS Modern yang Harus Kamu Tahu: Container Queries, :has(), dan Cascade Layers

CSS 2024 jauh berbeda dari CSS yang kamu pelajari 5 tahun lalu. Ini bukan tentang tren visual — ini fitur fundamental yang mengubah cara pendekatan styling.

1. Container Queries — Game Changer untuk Responsive Design

Selama ini kita responsive berdasarkan lebar viewport. Container queries memungkinkan komponen responsive berdasarkan lebar container induknya sendiri.

/* Definisikan container */
.card-wrapper {
  container-type: inline-size;
  container-name: card;
}

/* Style berdasarkan ukuran container, bukan viewport */
@container card (min-width: 400px) {
  .card {
    display: grid;
    grid-template-columns: 200px 1fr;
  }
}

@container card (max-width: 399px) {
  .card {
    flex-direction: column;
  }
}

Artinya: komponen Card-mu bisa di-reuse di sidebar yang sempit dan di area konten yang lebar, dan tampilnya otomatis menyesuaikan — tanpa perlu tahu ukuran viewport.

2. :has() — CSS yang Bisa "Lihat ke Bawah"

Ini yang developer CSS minta selama lebih dari satu dekade. :has() memungkinkan kamu select parent berdasarkan anak-anaknya.

/* Style form yang punya input dengan error */
.form-group:has(input:invalid) {
  border-color: red;
}

/* Card yang punya gambar — beri padding berbeda */
.card:has(img) {
  padding: 0;
}

/* Navigation dengan submenu yang sedang di-hover */
.nav-item:has(.submenu:hover) {
  background: var(--accent);
}

3. CSS Cascade Layers — Kontrol Spesifisitas yang Sesungguhnya

Ini solusi untuk masalah spesifisitas CSS yang selama ini bikin !important bertebaran di mana-mana.

/* Definisikan urutan layer — layer terakhir menang */
@layer reset, base, components, utilities;

@layer reset {
  * { margin: 0; padding: 0; box-sizing: border-box; }
}

@layer base {
  h1 { font-size: 2rem; }
}

@layer components {
  .btn { padding: 8px 16px; border-radius: 4px; }
}

@layer utilities {
  .mt-4 { margin-top: 1rem; }
}
/* .mt-4 akan selalu override .btn meski spesifisitas lebih rendah,
   karena layer utilities didefinisikan setelah components */

4. CSS Nesting — Tidak Perlu Sass Lagi untuk Ini

.card {
  padding: 1rem;
  border-radius: 8px;

  /* Nested selector — sudah native! */
  & .title {
    font-size: 1.25rem;
    font-weight: 600;
  }

  &:hover {
    transform: translateY(-2px);
  }

  @media (max-width: 640px) {
    padding: 0.75rem;
  }
}

Browser Support

Semua fitur di atas sudah didukung Chrome 111+, Firefox 117+, dan Safari 17+. Coverage global sekitar 90%+. Tidak butuh polyfill untuk target browser modern.

Butuh Solusi Digital Custom?

Kami siap membuatkan solusi digital sesuai kebutuhan bisnis Anda.

Konsultasi Gratis