Menempatkan setiap wilayah halaman dengan angka garis bisa dilakukan, tetapi cepat melelahkan: header dari garis 1 sampai 3, sidebar membentang dua baris, dan seterusnya. grid-template-areas menawarkan cara lain yang jauh lebih mudah dibaca: kita menggambar layout sebagai denah teks bernama, persis seperti denah di atas kertas. Setiap elemen kemudian cukup duduk di areanya lewat grid-area. Pada chapter ini kita menyusun layout holy grail — header, sidebar, konten, footer — dan mendefinisikan ulang bentuknya untuk layar sempit.
Memberi Nama Wilayah Grid #
.halaman {
display: grid;
grid-template-columns: 240px 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas: "header header" "sidebar main" "footer footer";
}Mari kita baca potongan kode di atas:
- Satu string = satu baris grid:
"header header"adalah baris pertama,"sidebar main"baris kedua, dan"footer footer"baris ketiga. - Satu kata = satu sel: baris pertama terdiri dari dua sel; keduanya bernama
header, sehingga area header membentang dua kolom. - Nama berulang = area melebar: nama yang sama berdampingan membentuk satu area persegi panjang.
- Ukuran tetap ditangani template:
grid-template-columnsdangrid-template-rowsmenentukan lebar serta tinggi tiap track; areas hanya menggambar strukturnya.
Selanjutnya setiap elemen ditempatkan ke areanya:
.kepala-halaman { grid-area: header; }
.panel-samping { grid-area: sidebar; }
.konten-utama { grid-area: main; }
.kaki-halaman { grid-area: footer; }Demo berikut merakit pola holy grail klasik dengan empat area bernama:
Coba bandingkan markup demo dengan denah di CSS-nya: tidak ada satu property penempatan pun pada masing-masing elemen selain grid-area bernama.
Aturan Penulisan dan Sel Kosong #
Denah areas hanya valid bila memenuhi aturan berikut:
- Jumlah sel pada setiap baris harus sama.
- Satu nama harus membentuk persegi panjang utuh; bentuk L tidak diterima browser.
- Nama bersifat case-sensitive:
Headerdanheaderdianggap dua nama berbeda. - Sel yang dibiarkan kosong ditandai titik (
.).
Contoh memakai titik untuk menciptakan celah di sudut kiri baris tengah:
.halaman {
grid-template-areas: "header header header" ". main sidebar" "footer footer footer";
}Titik boleh ditulis satu (.) atau berjajar (...); keduanya berarti sel kosong. Contoh ini juga memperlihatkan kebebasan lain: sidebar cukup dipindah ke kanan dengan menukar urutan kata, tanpa menyentuh markup sama sekali.
Menggambar Ulang untuk Layar Sempit #
Kekuatan terbesar areas muncul saat layout perlu berubah bentuk antar ukuran layar. Kita cukup menulis denah baru di dalam media query:
@media (max-width: 640px) {
.halaman {
grid-template-columns: 1fr;
grid-template-areas: "header" "main" "sidebar" "footer";
}
}Demo berikut memakai denah yang sama; perkecil lebar bingkainya hingga di bawah 640 piksel dan keempat wilayah menumpuk dengan urutan baru:
Pembahasan lengkap media query menunggu di section Responsive Web Design; di sini cukup dicatat bahwa satu deklarasi areas sudah mengubah seluruh susunan halaman.
Ringkasan #
grid-template-areas mengubah layout menjadi denah teks yang bisa dibaca manusia: string melambangkan baris, kata melambangkan sel, titik melambangkan celah, dan grid-area menghubungkan elemen ke namanya. Chapter berikutnya membahas sisi grid yang selama ini tidak terlihat: perbedaan track explicit yang kita definisikan dan track implicit yang dibuat browser saat konten melebihi denah.