๐ŸŽจ Phase 2 โ€” CSS
P13 ยท Pertemuan 13 dari 20

CSS Grid & Responsive Design

Membuat layout dua dimensi dengan CSS Grid dan menjadikan halaman responsif di semua ukuran layar dengan media queries.

Phase
Phase 2 โ€” CSS
Topik
CSS Fundamentals
Durasi
90 Menit
Deadline Tugas
Sebelum Pertemuan Berikutnya โ€” Pukul 23.59 WIB
๐ŸŽฏTujuan Pembelajaran
  • 01Menggunakan grid-template-columns dan grid-template-rows
  • 02Menerapkan gap, grid-column, grid-row, dan grid-area
  • 03Menggunakan fr unit, auto-fill, dan auto-fit
  • 04Menulis Media Queries: @media (max-width: 768px)
  • 05Menerapkan mobile-first approach
  • 06Memahami breakpoint umum: 480px, 768px, 1024px
๐Ÿ“–Sub-topik & Materi
  • 01Grid container: grid-template-columns, grid-template-rows
  • 02gap (row-gap, column-gap), grid-column, grid-row, grid-area
  • 03fr unit: fractional unit (1fr = 1 bagian dari ruang tersisa)
  • 04repeat(auto-fill, minmax(250px, 1fr)) โ€” grid responsif otomatis
  • 05Media Queries: @media (max-width: breakpoint)
  • 06Mobile-first: mulai dari layar kecil, tambahkan untuk layar besar
๐Ÿ’กPenjelasan Konsep
Konsep 1
CSS Grid: 2D Layout
CSS Grid adalah sistem layout 2 dimensi (baris DAN kolom sekaligus). Ideal untuk layout halaman kompleks. grid-template-columns mendefinisikan jumlah dan ukuran kolom. fr (fractional unit) membagi ruang yang tersedia secara proporsional. repeat() mempersingkat penulisan kolom yang berulang.
css
/* Grid 3 kolom sama rata */
.galeri {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

/* Grid dengan kolom berbeda ukuran */
.layout {
  display: grid;
  grid-template-columns: 240px 1fr; /* sidebar + konten utama */
  grid-template-rows: auto 1fr auto; /* header + main + footer */
  gap: 0;
  min-height: 100vh;
}
Konsep 2
Grid Responsif Otomatis dengan minmax()
repeat(auto-fill, minmax(min, max)) adalah satu-satunya kode CSS Grid yang membuat grid OTOMATIS responsif tanpa media query. auto-fill = buat sebanyak mungkin kolom yang muat. minmax(280px, 1fr) = kolom minimal 280px, maksimal 1fr. Saat layar mengecil, kolom otomatis pindah ke baris bawah.
css
/* Grid responsif TANPA media query */
.kartu-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px;
}
/* Desktop: 3 kolom, Tablet: 2 kolom, Mobile: 1 kolom โ€” otomatis! */
Konsep 3
Media Query dan Responsive Design
Media query mengubah CSS berdasarkan kondisi tertentu (biasanya lebar layar). Mobile-first approach: tulis CSS untuk mobile dulu (default), lalu tambahkan media query min-width untuk layar yang lebih besar. Ini lebih efisien karena mobile biasanya lebih sederhana. Breakpoint umum: 768px (tablet), 1024px (desktop).
css
/* Mobile-first: default untuk mobile */
.container {
  display: grid;
  grid-template-columns: 1fr; /* 1 kolom */
  padding: 16px;
}

/* Tablet ke atas */
@media (min-width: 768px) {
  .container {
    grid-template-columns: repeat(2, 1fr); /* 2 kolom */
    padding: 24px;
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .container {
    grid-template-columns: repeat(3, 1fr); /* 3 kolom */
    padding: 48px;
  }
}
๐Ÿ’ปContoh Kode Lengkap
css
/* Layout 3 Kolom dengan Grid */
.layout {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

/* Auto-responsive Grid */
.grid-produk {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 20px;
}

/* Grid Area untuk Layout Halaman */
.halaman {
  display: grid;
  grid-template-areas: "header header"
    "sidebar main"
    "footer footer";
  grid-template-columns: 250px 1fr;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

/* Media Queries */
@media (max-width: 1024px) {
  .layout { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 768px) {
  .layout { grid-template-columns: 1fr; }
  .halaman { grid-template-columns: 1fr; }
}
โšกLatihan Kelas ยท Buat layout majalah 3 kolom dengan Grid, lalu buat responsif dengan media query
1
Buat div.grid-artikel dengan 6 artikel di dalamnya
2
Terapkan display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
3
Buat artikel pertama span 2 kolom dengan grid-column: span 2
4
Tambahkan @media (max-width: 1024px) untuk 2 kolom
5
Tambahkan @media (max-width: 768px) untuk 1 kolom
6
Test responsivitas dengan DevTools Device Toolbar (Ctrl+Shift+M)
๐Ÿ“ Tugas 3.6 โ€” Grid & Responsive
โฐ Deadline: Sebelum Pertemuan Berikutnya โ€” Pukul 23.59 WIB

Buat landing page responsif dengan 3 breakpoint: desktop (3 kolom Grid), tablet (2 kolom), mobile (1 kolom). Halaman harus: tidak ada horizontal scroll di semua ukuran, menggunakan CSS Grid, dan menggunakan minmax() untuk grid yang adaptif.

Kriteria PenilaianPoin
Grid terbentuk benar di desktop (3 kolom)25
Media query tablet (max 1024px) berfungsi โ€” 2 kolom25
Media query mobile (max 768px) berfungsi โ€” 1 kolom25
Tidak ada horizontal scroll di semua breakpoint25
Total100
โš ๏ธKesalahan yang Sering Dibuat
Menggunakan fr tanpa display: grid pada container โ€” fr tidak berlaku di luar Grid/Flex
Lupa menambahkan viewport meta tag di HTML โ€” media query tidak berfungsi di mobile tanpa <meta name="viewport">
Breakpoint terlalu banyak โ€” cukup 2-3 breakpoint (mobile, tablet, desktop)
Menggunakan px untuk breakpoint dengan zoom โ€” gunakan rem untuk breakpoint (1rem = 16px, jadi 48rem = 768px)
Tidak test di DevTools mode mobile โ€” layout bisa berbeda dari perkiraan
๐Ÿ’ก Tips Instruktur
repeat(auto-fill, minmax(250px, 1fr)) untuk grid responsif tanpa media query
Mobile-first: tulis CSS untuk mobile dulu, tambah media query untuk desktop
DevTools Ctrl+Shift+M untuk simulasi berbagai ukuran layar
min-width di media query untuk mobile-first, max-width untuk desktop-first
๐Ÿ“‹ Checklist Belajar
Pahami konsep sebelum latihan
Coba kode sendiri tanpa copy-paste
Kerjakan tugas sebelum deadline
Tanya instruktur jika ada yang belum jelas
Parelabs Academy - Kursus Bahasa Inggris Terbaik Offline & Online