CSS Grid adalah sistem tata letak paling powerful yang tersedia di CSS saat ini. Grid dirancang untuk memecah halaman menjadi area-area utama, atau menentukan hubungan antar bagian dari kontrol yang kompleks dalam hal ukuran, posisi, dan lapisan.

1. Perbedaan Mendasar: Flexbox vs Grid

Satu hal yang harus dipahami oleh setiap developer adalah kapan menggunakan Grid dan kapan menggunakan Flexbox. Flexbox bekerja dari dalam ke luar (konten mengatur layout), sedangkan Grid bekerja dari luar ke dalam (layout mengatur konten).

2. Anatomi CSS Grid

Sebelum masuk ke teknis, kita perlu mengenal istilah-istilah di dalam Grid:

  • Grid Container: Elemen tempat display: grid diterapkan.

  • Grid Line: Garis pemisah yang membentuk struktur grid (horizontal dan vertikal).

  • Grid Track: Ruang di antara dua garis grid (bisa berupa kolom atau baris).

  • Grid Cell: Unit terkecil dalam grid (seperti satu sel pada tabel).

  • Grid Area: Total ruang yang dikelilingi oleh empat garis grid.


    Implementasi Dasar: Mendefinisikan Kolom dan Baris

    Untuk memulai, kita cukup memberikan perintah pada container. Penggunaan unit fr (fractional unit) sangat disarankan karena unit ini secara cerdas membagi ruang kosong yang tersedia.

    .main-layout {
        display: grid;
        /* Membuat 3 kolom: kolom pertama 200px, sisanya berbagi ruang */
        grid-template-columns: 200px 1fr 1fr;
        /* Membuat 2 baris dengan tinggi otomatis sesuai konten */
        grid-template-rows: auto auto;
        /* Memberikan jarak antar sel tanpa menggunakan margin manual */
        gap: 20px;
    }

    Teknik Grid Template Areas (Layouting Visual)

    Salah satu fitur paling ajaib di CSS Grid adalah grid-template-areas. Fitur ini memungkinkan kita membuat "peta" layout secara visual langsung di dalam kode CSS. Teknik ini sangat memudahkan dalam pembuatan struktur halaman web yang kompleks. 

    HTML : 

    <div class="container">
        <header>Header</header>
        <nav>Navigasi</nav>
        <main>Konten Utama</main>
        <aside>Sidebar</aside>
        <footer>Footer</footer>
    </div>

    CSS : 

    .container {
        display: grid;
        grid-template-columns: 250px 1fr;
        grid-template-rows: auto 1fr auto;
        grid-template-areas: 
            "header header"
            "sidebar main"
            "footer footer";
        height: 100vh;
    }
    
    header { grid-area: header; }
    nav    { grid-area: sidebar; }
    main   { grid-area: main; }
    footer { grid-area: footer; }

    Responsivitas Tanpa Media Query: repeat & auto-fit

    CSS Grid memiliki kemampuan untuk membuat layout responsif secara otomatis tanpa perlu menulis puluhan baris Media Query. Kita bisa menggunakan fungsi repeat() dikombinasikan dengan minmax().

    .gallery-grid {
        display: grid;
        /* Kolom akan otomatis bertambah/berkurang sesuai lebar layar */
        /* Minimal lebar kolom 250px, maksimal 1fr */
        grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
        gap: 15px;
    }

    Dengan satu baris kode di atas, grid akan otomatis menyesuaikan jumlah kolomnya (misal: 4 kolom di desktop, 2 kolom di tablet, dan 1 kolom di mobile) secara instan.

    Kesimpulan

    CSS Grid bukan pengganti Flexbox, melainkan partner. Gunakan Grid untuk kerangka besar halaman (layout makro) dan gunakan Flexbox untuk detail di dalam elemen tersebut (layout mikro). Dengan menguasai keduanya, tidak ada desain UI yang mustahil untuk diwujudkan.