Bahasa Indonesia

Kuasai CSS container queries untuk desain web yang benar-benar responsif. Pelajari cara menyesuaikan tata letak berdasarkan ukuran kontainer, bukan hanya viewport, untuk pengalaman pengguna yang lancar di semua perangkat.

Membuka Desain Responsif: Panduan Komprehensif untuk CSS Container Queries

Selama bertahun-tahun, desain web responsif terutama mengandalkan media queries, yang memungkinkan situs web menyesuaikan tata letak dan gayanya berdasarkan lebar dan tinggi viewport. Meskipun efektif, pendekatan ini terkadang terasa membatasi, terutama saat berhadapan dengan komponen kompleks yang perlu beradaptasi secara independen dari ukuran layar keseluruhan. Masuklah CSS Container Queries – alat baru yang kuat yang memungkinkan elemen merespons ukuran elemen penampungnya, bukan viewport itu sendiri. Ini membuka tingkat fleksibilitas dan presisi baru dalam desain responsif.

Apa itu CSS Container Queries?

CSS Container Queries adalah fitur CSS yang memungkinkan Anda menerapkan gaya ke elemen berdasarkan ukuran atau karakteristik lain dari kontainer induknya. Tidak seperti media queries, yang menargetkan viewport, container queries menargetkan elemen tertentu. Ini memungkinkan pembuatan komponen yang menyesuaikan gayanya berdasarkan ruang yang tersedia di dalam kontainernya, terlepas dari ukuran layar.

Bayangkan sebuah komponen kartu yang ditampilkan secara berbeda tergantung pada apakah ia ditempatkan di sidebar yang sempit atau area konten utama yang lebar. Dengan media queries, Anda mungkin harus menyesuaikan gaya kartu berdasarkan ukuran layar, yang bisa menyebabkan inkonsistensi. Dengan container queries, Anda dapat mendefinisikan gaya yang berlaku secara spesifik ketika kontainer kartu mencapai lebar tertentu, memastikan pengalaman yang konsisten dan responsif di berbagai tata letak.

Mengapa Menggunakan Container Queries?

Container queries menawarkan beberapa keuntungan dibandingkan media queries tradisional:

Cara Mengimplementasikan CSS Container Queries

Mengimplementasikan CSS container queries melibatkan dua langkah kunci: mendefinisikan kontainer dan menulis query.

1. Mendefinisikan Kontainer

Pertama, Anda perlu menetapkan sebuah elemen sebagai *kontainer*. Ini dilakukan dengan menggunakan properti container-type. Ada dua nilai utama untuk container-type:

Anda juga dapat menggunakan container-name untuk memberi nama pada kontainer Anda, yang dapat membantu untuk menargetkan kontainer tertentu dalam query Anda. Contohnya:

.card-container {
  container-type: inline-size;
  container-name: cardContainer;
}

Kode ini mendeklarasikan elemen dengan kelas .card-container sebagai kontainer. Kami menetapkan inline-size untuk memungkinkan query berdasarkan lebar kontainer. Kami juga memberinya nama cardContainer.

2. Menulis Container Queries

Setelah Anda mendefinisikan kontainer, Anda dapat menulis container queries menggunakan at-rule @container. Sintaksnya mirip dengan media queries:

@container cardContainer (min-width: 400px) {
  .card {
    flex-direction: row;
  }
  .card-image {
    width: 40%;
  }
  .card-content {
    width: 60%;
  }
}

Query ini menerapkan gaya di dalam kurung kurawal hanya ketika kontainer bernama cardContainer memiliki lebar minimum 400px. Ini menargetkan elemen .card (kemungkinan anak dari .card-container) dan menyesuaikan tata letaknya. Jika kontainer lebih sempit dari 400px, gaya ini tidak akan diterapkan.

Singkatan: Anda juga dapat menggunakan versi singkatan dari aturan `@container` ketika Anda tidak perlu menentukan nama kontainer:

@container (min-width: 400px) {
  /* Gaya yang diterapkan saat kontainer memiliki lebar minimal 400px */
}

Contoh Praktis Container Queries

Mari kita lihat beberapa contoh praktis tentang bagaimana Anda dapat menggunakan container queries untuk membuat tata letak yang lebih responsif dan mudah beradaptasi.

Contoh 1: Komponen Kartu

Contoh ini menunjukkan cara menyesuaikan komponen kartu berdasarkan lebar kontainernya. Kartu akan menampilkan kontennya dalam satu kolom ketika kontainer sempit dan dalam dua kolom ketika kontainer lebih lebar.

HTML:

Card Image

Card Title

This is some sample content for the card.

Learn More

CSS:

.card-container {
  container-type: inline-size;
  border: 1px solid #ccc;
  margin-bottom: 20px;
}

.card {
  display: flex;
  flex-direction: column;
}

.card-image {
  width: 100%;
  height: auto;
}

.card-content {
  padding: 10px;
}

@container (min-width: 500px) {
  .card {
    flex-direction: row;
  }
  .card-image {
    width: 40%;
  }
  .card-content {
    width: 60%;
  }
}

Dalam contoh ini, .card-container dideklarasikan sebagai kontainer. Ketika lebar kontainer kurang dari 500px, .card akan menggunakan tata letak kolom, menumpuk gambar dan konten secara vertikal. Ketika lebar kontainer 500px atau lebih, .card akan beralih ke tata letak baris, menampilkan gambar dan konten berdampingan.

Contoh 2: Menu Navigasi

Contoh ini menunjukkan cara menyesuaikan menu navigasi berdasarkan ruang yang tersedia. Ketika kontainer sempit, item menu akan ditampilkan dalam dropdown. Ketika kontainer lebih lebar, item menu akan ditampilkan secara horizontal.

HTML:


CSS:

.nav-container {
  container-type: inline-size;
  background-color: #f0f0f0;
  padding: 10px;
}

.nav-container ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.nav-container li {
  margin-bottom: 5px;
}

.nav-container a {
  display: block;
  padding: 5px 10px;
  text-decoration: none;
  color: #333;
}

@container (min-width: 600px) {
  .nav-container ul {
    display: flex;
  }

  .nav-container li {
    margin-right: 10px;
    margin-bottom: 0;
  }

  .nav-container a {
    display: inline-block;
  }
}

Dalam contoh ini, .nav-container dideklarasikan sebagai kontainer. Ketika lebar kontainer kurang dari 600px, item menu akan ditampilkan sebagai daftar vertikal. Ketika lebar kontainer 600px atau lebih, item menu akan ditampilkan secara horizontal menggunakan flexbox.

Contoh 3: Daftar Produk

Daftar produk e-commerce dapat menyesuaikan tata letaknya berdasarkan lebar kontainer. Dalam kontainer yang lebih kecil, daftar sederhana dengan gambar produk, judul, dan harga dapat berfungsi dengan baik. Seiring kontainer membesar, informasi tambahan seperti deskripsi singkat atau peringkat pelanggan dapat ditambahkan untuk meningkatkan presentasi. Ini juga memungkinkan kontrol yang lebih granular daripada hanya menargetkan viewport.

HTML:

Product 1

Product Name 1

$19.99

Product 2

Product Name 2

$24.99

CSS:

.product-listing-container {
  container-type: inline-size;
  display: flex;
  flex-wrap: wrap;
}

.product-item {
  width: 100%;
  margin-bottom: 20px;
  border: 1px solid #eee;
  padding: 10px;
}

.product-item img {
  width: 100%;
  height: auto;
  margin-bottom: 10px;
}

.product-item h3 {
  margin-top: 0;
  font-size: 1.2em;
}

.product-item .price {
  font-weight: bold;
  color: #007bff;
}

@container (min-width: 400px) {
  .product-item {
    width: 50%;
    padding: 15px;
  }
}

@container (min-width: 768px) {
  .product-item {
    width: 33.33%;
  }
}

Kode CSS ini pertama-tama menetapkan `product-listing-container` sebagai sebuah kontainer. Untuk kontainer yang sempit (kurang dari 400px), setiap item produk memakan 100% dari lebar. Seiring kontainer tumbuh melebihi 400px, item produk diatur dalam dua kolom. Melebihi 768px, item produk ditampilkan dalam tiga kolom.

Dukungan Browser dan Polyfill

Container queries memiliki dukungan browser yang baik di browser modern, termasuk Chrome, Firefox, Safari, dan Edge. Namun, browser lama mungkin tidak mendukungnya secara bawaan.

Untuk mendukung browser lama, Anda dapat menggunakan polyfill. Opsi populer adalah container-query-polyfill, yang dapat ditemukan di npm dan GitHub. Polyfill mengisi celah untuk fitur yang tidak didukung, memungkinkan Anda menggunakan container queries bahkan di browser lama.

Praktik Terbaik Menggunakan Container Queries

Berikut adalah beberapa praktik terbaik yang perlu diingat saat menggunakan container queries:

Kesalahan Umum dan Cara Menghindarinya

Container Queries vs. Media Queries: Memilih Alat yang Tepat

Meskipun container queries menawarkan keuntungan yang signifikan, media queries masih memiliki tempatnya dalam desain responsif. Berikut adalah perbandingan untuk membantu Anda memutuskan alat mana yang terbaik untuk situasi yang berbeda:

Fitur Container Queries Media Queries
Target Ukuran kontainer Ukuran viewport
Responsivitas Berbasis komponen Berbasis halaman
Fleksibilitas Tinggi Sedang
Duplikasi Kode Lebih rendah Lebih tinggi
Kasus Penggunaan Komponen yang dapat digunakan kembali, tata letak kompleks Penyesuaian tata letak global, responsivitas dasar

Secara umum, gunakan container queries ketika Anda perlu menyesuaikan gaya komponen berdasarkan ukuran kontainernya, dan gunakan media queries ketika Anda perlu melakukan penyesuaian tata letak global berdasarkan ukuran viewport. Seringkali, kombinasi kedua teknik adalah pendekatan terbaik.

Masa Depan Desain Responsif dengan Container Queries

Container queries merupakan langkah maju yang signifikan dalam desain responsif, menawarkan fleksibilitas dan kontrol yang lebih besar atas bagaimana elemen beradaptasi dengan konteks yang berbeda. Seiring dukungan browser terus meningkat, container queries kemungkinan akan menjadi alat yang semakin penting bagi pengembang web. Mereka memberdayakan desainer dan pengembang untuk membuat situs web yang benar-benar adaptif dan ramah pengguna yang memberikan pengalaman yang lancar di semua perangkat dan ukuran layar.

Kesimpulan

CSS Container Queries adalah tambahan yang kuat untuk perangkat desain responsif. Dengan memungkinkan elemen merespons ukuran elemen penampungnya, mereka memungkinkan responsivitas berbasis komponen yang sesungguhnya dan membuka tingkat fleksibilitas dan presisi baru dalam desain web. Dengan memahami cara mengimplementasikan dan menggunakan container queries secara efektif, Anda dapat membuat situs web yang lebih mudah beradaptasi, mudah dipelihara, dan ramah pengguna yang memberikan pengalaman yang lebih baik untuk semua orang.

Sumber Daya