1 / 28
CSS
3D
FLEX
GRID
POS
@
Informatika · Bab 6

CSS ADVANCED

Kuasai Layout & Animasi Modern

Kelas 10Semester 1Mata Pelajaran Informatika

Navigasi: atau geser layar · Tekan F11 untuk layar penuh

01 / 28
Mengapa belajar ini?

Tujuan Pembelajaran

Setelah menyelesaikan bab ini, kamu akan mampu:

Mengatur posisi elemen

Memahami position: relative, absolute, fixed, dan sticky.

Mengontrol tampilan elemen

Membedakan display block, inline, dan inline-block.

Membuat layout fleksibel

Menyusun antarmuka dengan Flexbox secara otomatis & rapi.

Membangun layout grid

Mendesain tata letak kompleks memakai CSS Grid.

Menghidupkan halaman

Menggunakan transition, animation, dan transform.

02 / 28
Daftar Isi

Peta Materi Bab 6

Klik salah satu topik untuk langsung melompat ke materinya.

PETA
CSS ADV
PositionSlide 4–8
DisplaySlide 9–11
FlexboxSlide 12–15
GridSlide 16–19
AnimasiSlide 20–23
03 / 28
P
CSS Position

Mengatur Posisi Elemen

Property position menentukan di mana sebuah elemen diletakkan di halaman. Ada 4 nilai utama: relative, absolute, fixed, dan sticky.

Analogi · Denah Rumah

🏠 Menata furnitur di dalam ruangan

Mengatur posisi elemen itu seperti menata furnitur. Ruangan = halaman, furnitur = elemen. Coba seret furnitur di bawah — kamu sedang memindahkan "posisi" mereka, persis seperti CSS!

🛋️
📺
🛏️
🪴
Konsep:static (default)relativeabsolutefixedsticky
04 / 28
Position · Bagian 1

Relative & Absolute

🧠 Inti — Hafalkan Dua Kalimat Ini

relative = "Jadikan saya patokan."

absolute = "Saya mau menempel berdasarkan patokan."

position: relative

Posisi asli:
[ KOTAK ]
Setelah left: 50px:
[ KOTAK ]
↑ geser 50px
⚠ Tempat aslinya masih dipesan oleh browser.

position: absolute

.kartu (relative = patokan)
BARU
top: 6px · right: 6px → menempel ke pojok kanan atas patokan

🔍 Bagaimana absolute mencari patokan?

.label (absolute) Cari parent terdekat yang punya position .kartu (relative) ✓ Patokan ditemukan! Posisi dihitung dari sini.

Jika tidak ada parent ber-position → acuan menjadi viewport/halaman (biasanya tidak diinginkan!).

05 / 28
Position · Bagian 1 (lanjutan)

Relative & Absolute — Contoh Nyata

📐 Artinya top, right, bottom, left

Berjarak dari tepi patokan

top: 10px10px dari atas patokan ⬇
right: 10px10px dari kanan patokan ⬅
bottom: 10px10px dari bawah patokan ⬆
left: 10px10px dari kiri patokan ➡

🛍️ Contoh Nyata: Kartu Produk

-50%
👟
Sepatu Keren
Rp 200.000
Rp 100.000

Badge -50% di pojok kiri atas menggunakan position: absolute; top:10px; left:10px

kartu-produk.css
.produk {
  position: relative; /* patokan */
}

.diskon {
  position: absolute; /* menempel */
  top: 10px;
  left: 10px;
}

⚡ Pola Wajib Hafal — Paling Sering Dipakai:

pola-utama.css
/* ✅ Parent menjadi patokan */
.parent {
  position: relative;
}

/* ✅ Child menempel ke patokan */
.child {
  position: absolute;
  top: 10px;
  right: 10px;
}
🟡 relative
  • → Geser dari posisi sendiri
  • → Ruang asli tetap dipesan
  • → Jadi patokan bagi anak absolute
🔵 absolute
  • → Keluar dari alur normal
  • → Menempel ke parent yang ber-position
  • → Posisi ditentukan dengan top/right/bottom/left
06 / 28
Position · Bagian 2

Fixed & Sticky

Analogi · Papan Pengumuman

📌 fixed = menempel di layar

Tetap di tempat yang sama walau halaman di-scroll. Cocok untuk tombol chat atau navbar yang selalu terlihat.

Analogi · Penanda Buku

🔖 sticky = menempel saat tertentu

Awalnya ikut mengalir, lalu "nempel" di tepi layar ketika kamu scroll melewatinya — seperti pembatas buku.

Coba sendiri:

Scroll area di bawah ini ke bawah. Perhatikan header ungu yang "menempel" (sticky) dan badge emas yang tetap di pojok (fixed-like).

📌 Header STICKY — aku menempel saat kamu scroll
Baris 1 — terus scroll ke bawah…
Baris 2
Baris 3
Baris 4
Baris 5
Baris 6
Baris 7
Baris 8 — lihat header tetap di atas!
Baris 9
Baris 10
sticky.css
.navbar {
  position: sticky;
  top: 0;          /* nempel di atas */
}
.tombol-chat {
  position: fixed;
  bottom: 20px;
  right: 20px;     /* selalu di pojok */
}
07 / 28
Position · Rangkuman Interaktif

Demo Posisi Lengkap

Tekan tombol untuk melihat 4 kotak terbang ke posisinya masing-masing — seperti puzzle yang menyusun diri.

relative
absolute
fixed
sticky
posisi-lengkap.css
.relative { position: relative; top: 10px; left: 10px; }
.absolute { position: absolute; top: 10px; right: 10px; }
.fixed    { position: fixed;    bottom: 10px; left: 10px; }
.sticky   { position: sticky;   top: 0; }
08 / 28
D
CSS Display

Tipe Tampilan Elemen

Analogi · Kemasan di Toko

📦 Block = dus besar · Sticker = inline

block seperti dus besar yang memakan satu baris penuh (kulkas, lemari). inline seperti stiker kecil yang menempel berjajar dalam satu baris. inline-block = stiker yang bisa diatur ukurannya seperti dus.

📦

block

Satu baris penuh. Contoh: <div>, <p>, <h1>

🏷️

inline

Berjajar, selebar isinya. Contoh: <span>, <a>, <b>

🎁

inline-block

Berjajar TAPI bisa diatur lebar/tinggi.

09 / 28
Display · Perbandingan

Block vs Inline vs Inline-Block

Klik tombol untuk melihat 4 kotak yang sama berubah tipe tampilan secara langsung.

Kotak 1Kotak 2Kotak 3Kotak 4
display.css
.block        { display: block; }        /* turun ke bawah */
.inline       { display: inline; }       /* berjajar */
.inline-block { display: inline-block; }  /* jajar + bisa diukur */
10 / 28
Display · Praktik

Membuat Menu Navigasi

Contoh nyata: mengubah daftar link menjadi menu horizontal dengan display: inline-block.

menu.css
nav a {
  display: inline-block;   /* link berjajar */
  padding: 8px 16px;
  color: #C9A84C;
}
nav a:hover {
  background: #7B2FBE;
  color: #fff;
}
Ingat

💡 Link <a> aslinya inline

Karena inline tidak bisa diberi padding atas-bawah dengan rapi, kita ubah ke inline-block agar tombol menu terlihat enak.

11 / 28
F
CSS Flexbox · Bagian 1

Layout Fleksibel Otomatis

Analogi · Tempat Parkir Mobil

🚗 Bayangkan kamu punya tempat parkir dan beberapa mobil

Daripada mengatur posisi setiap mobil satu per satu memakai margin (yang repot & mudah rusak), kita cukup memberi perintah kepada tempat parkirnya (container): "Rapikan mobil ke kiri", "Letakkan di tengah", atau "Beri jarak sama rata". Mobil di dalamnya otomatis menurut!

❌ Sebelum Flexbox (Normal Block)

Numpuk ke bawah
🚗 Mobil 1
🚙 Mobil 2
🚕 Mobil 3

Elemen <div> default-nya block, jadi mobil selalu menumpuk ke bawah satu per satu.

✅ Setelah display: flex

Berjajar otomatis
🚗 Mobil 1
🚙 Mobil 2
🚕 Mobil 3

Cukup pasang display: flex; pada container, semua mobil langsung berjajar mendatar!

🧠 Alur Berpikir Flexbox (5 Langkah):

1. CONTAINER 2. Pasang display: flex 3. FLEXBOX AKTIF 4. Ada beberapa ITEM 5. justify-content atur posisi
12 / 28
Flexbox · Bagian 2

justify-content: Mengatur Posisi Item

Mobil sudah berjajar. Sekarang kita atur posisi dan jarak mereka pada sumbu utama (kiri ↔ kanan).

flex-start

Kumpulkan semua mobil di awal (kiri).

center

Kumpulkan semua mobil tepat di tengah.

space-between

Ujung kiri & kanan mentok, sisa jarak dibagi rata (Wajib untuk Navbar: Logo ↔ Menu).

space-around

Setiap mobil diberi ruang rata di kiri & kanannya.

🚗 Hasil Visual Tempat Parkir:

🚗
🚙
🚕

Hubungan: KODEPERINTAHHASIL VISUAL

flex-live.css⚡ Real-Time Sync
.container {
  display: flex;
  justify-content: flex-start;
}
13 / 28
Flexbox · Bagian 3

Arah & Pembungkus: Direction & Wrap

Mengontrol arah aliran item (mendatar/menurun) dan perilaku saat tempat parkir penuh.

1
2
3
4
5
6

flex-direction

Mengubah sumbu utama: row (default, kiri ke kanan) atau column (atas ke bawah seperti daftar menu vertikal).

flex-wrap

Dengan wrap, item yang berlebih otomatis pindah ke baris bawahnya secara rapi — sangat penting untuk tampilan HP!

14 / 28
Flexbox · Bagian 4

align-items & Rumus Sakti Centering

Jika justify-content mengatur posisi horizontal, maka align-items mengatur posisi vertikal (sumbu silang).

A
B (Tinggi)
C

🔥 Rumus Sakti: Pas di Tengah Sempurna!

Kombinasi 3 baris ini adalah jurus paling terkenal di dunia web developer untuk menengahkan apapun (kotak login, tombol, popup, kartu):

1. display: flex; ➔ aktifkan flexbox
2. justify-content: center; ➔ tengah horizontal ⬅➡
3. align-items: center; ➔ tengah vertikal ⬆⬇
center-sempurna.css
.container {
  display: flex;
  justify-content: center; /* tengah mendatar */
  align-items: center;     /* tengah menurun */
  height: 100vh;
}
15 / 28
G
CSS Grid · Bagian 1

Tata Letak 2 Dimensi & Anatomi Grid

Analogi · Papan Catur & Tata Kota

♟️ Membangun tata kota di atas petak-petak baris & kolom

Jika Flexbox hanya mengatur 1 arah (1 Dimensi), CSS Grid mengatur 2 Dimensi sekaligus (Baris ➡ DAN Kolom ⬇). Saat sebuah elemen diberi display: grid;, elemen tersebut menjadi Grid Container dan anak-anak di dalamnya menjadi Grid Items.

📦 Grid Container vs Grid Items

.container (Grid Container)
Item 1
Item 2
Item 3

Induk = Container · Anak langsung = Items

🧩 5 Istilah Anatomi Grid

  • 1. Column: Jalur vertikal (kolom ke bawah ⬇)
  • 2. Row: Jalur horizontal (baris ke samping ➡)
  • 3. Cell: Satu petak pertemuan 1 baris & 1 kolom
  • 4. Gap: Jarak pemisah antar-petak
  • 5. Grid Line: Garis pembatas bernomor (1, 2, 3...)

🏙️ Petak-Petak Kota Grid (3 Kolom × 3 Baris = 9 Cell):

🏢
🏠
🏬
🏥
🏫
🏪
🏛️
🏨
16 / 28
Grid · Bagian 2

Membagi Ruang: Kolom, Baris, fr & repeat()

Mengatur pembagian kolom (lebar) dan baris (tinggi) secara fleksibel dengan satuan fr (fraction).

🍕 Satuan fr (Fraction) = Potongan Kue

1fr 1fr 1fr membagi sisa layar menjadi 3 bagian sama besar. Jika 1fr 2fr, kolom kedua dapat 2× lebih lebar!

🔁 Shorthand repeat() yang Praktis

Daripada mengetik 1fr 1fr 1fr 1fr, cukup tulis repeat(4, 1fr). Kode jadi jauh lebih rapi & bersih!

🖼️ Visual Petak Grid:

1
2
3
4
5
6
grid-kolom.css⚡ Real-Time
.galeri {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
17 / 28
Grid · Bagian 3

Penempatan Item & Konsep Grid Lines

Elemen bisa membentang beberapa kolom atau baris menggunakan nomor Grid Line.

📐 Konsep Garis Pembatas (Grid Lines 1 ➔ 4):

Line 1Line 2Line 3Line 4
grid-column: 1 / 3; (Garis 1 ➔ Garis 3 = span 2 kolom)
Kolom 3

Trik Pro: grid-column: 1 / -1; artinya membentang dari garis awal (1) sampai garis paling akhir (-1)!

HEADER (grid-column: 1 / -1)
SIDEBAR
(grid-row: span 2)
KONTEN UTAMA A (grid-column: span 2)
KONTEN UTAMA B (grid-column: span 2)
layout-website.css
.header  { grid-column: 1 / -1; } /* bentang penuh dari awal ke akhir */
.sidebar { grid-row: span 2; }    /* bentang 2 baris ke bawah */
.konten  { grid-column: span 2; } /* bentang 2 kolom ke samping */
.container { place-items: center; } /* teks & isi kotak pas di tengah! */
18 / 28
Grid · Bagian 4 (Pamungkas)

Responsive Grid & Perbandingan: Flexbox vs Grid

🪄 Responsive Grid Otomatis Tanpa Media Query!

Gunakan rumus ajaib: repeat(auto-fit, minmax(110px, 1fr)).
Artinya: "Buat kolom sebanyak mungkin yang muat. Tiap kolom minimal 110px, dan jika ada sisa ruang boleh membesar (1fr)."

⚔️ Kapan Pakai Flexbox? Kapan Pakai Grid?

Kriteria 🚗 CSS Flexbox ♟️ CSS Grid
Dimensi 1 Dimensi (1D) ➔ Baris atau Kolom 2 Dimensi (2D) ➔ Baris dan Kolom
Fokus Utama Penataan komponen & fleksibilitas isi Kerangka cetak biru tata letak (blueprint)
Cocok Untuk Navbar, barisan tombol, badge status Layout halaman penuh, dashboard, galeri foto

💡 Butuh 1 arah lurus? ➔ Pakai Flexbox | Butuh baris + kolom kotak-kotak? ➔ Pakai Grid

19 / 28
A
Animasi · Bagian 1

Transition

Analogi · Lampu Dimmer

💡 Perubahan halus, bukan tiba-tiba

Transition membuat perubahan terjadi perlahan, seperti lampu dimmer yang meredup pelan-pelan — bukan saklar yang langsung mati. Arahkan kursor ke tombol di bawah untuk merasakan perbedaan kurva waktunya.

transition.css
.tombol {
  transition: all 0.5s ease;   /* durasi 0.5 detik */
}
.tombol:hover {
  transform: scale(1.2);
  background: #00D4FF;
}
20 / 28
Animasi · Bagian 2

@keyframes Animation

Analogi · Film Animasi

🎬 Frame demi frame menjadi gerakan

Seperti film kartun yang tersusun dari banyak gambar, @keyframes mendefinisikan kondisi di tiap titik waktu (0%, 50%, 100%). Lihat karakter di bawah berjalan!

animation.css
@keyframes loncat {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-80px); }
}
.bola {
  animation: loncat 1.2s ease-in-out infinite;
}
21 / 28
Animasi · Bagian 3

Transform Playground

Geser slider untuk mengubah bentuk kotak secara real-time: rotate, scale, translate, dan skew.

CSS
transform.css
.kotak {
  transform: rotate(0deg) scale(1) translateX(0px) skewX(0deg);
}
/* rotate=putar · scale=besar-kecil · translate=geser · skew=miring */
22 / 28
Efek Interaktif

Galeri Hover Effects

Arahkan kursor ke setiap kartu untuk melihat 6 efek berbeda. Inilah gabungan transition + transform yang membuat web terasa hidup.

23 / 28
Proyek Mini

Membangun Landing Page Modern

Tekan "Langkah Berikutnya" untuk melihat halaman dibangun bertahap: struktur → layout → animasi.

1
Struktur HTML

header, hero, fitur, footer

2
Layout Flexbox & Grid

menata navbar & kartu fitur

3
Warna & Tipografi

tema gelap premium

4
Animasi & Hover

transition + transform

24 / 28
Rangkuman

Cheat Sheet CSS Advanced

Semua properti penting dalam satu layar. Boleh di-screenshot untuk catatan!

📍 Position & Display

position: relativegeser dari asal
position: absolutenempel ke parent
position: fixednempel ke layar
position: stickynempel saat scroll
display: blocksatu baris penuh
display: inlineberjajar
display: inline-blockjajar + bisa diukur

🧩 Flex · Grid · Animasi

display: flexlayout 1 arah
justify-contentrata sumbu utama
align-itemsrata sumbu silang
display: gridlayout 2 arah
grid-template-columnsatur kolom
transitionperubahan halus
@keyframes / animationgerak berulang
transformputar/skala/geser
25 / 28
Latihan 1 dari 3

Navigation Bar dengan Flexbox

📋 Instruksi: Buatlah sebuah navigation bar horizontal yang berisi logo di kiri dan 3 menu (Beranda, Tentang, Kontak) di kanan, menggunakan display: flex.

🎯 Output yang diharapkan:

★ LogoKu
BerandaTentangKontak

✅ Kriteria Penilaian:

  • Menggunakan display: flex pada container nav
  • Logo dan menu terpisah dengan justify-content: space-between
  • Menu sejajar rapi dengan gap
  • Ada efek hover pada item menu
💡 Butuh petunjuk? Klik di sini

Bungkus menu dalam satu <div>. Pada <nav> pakai display:flex; justify-content:space-between; align-items:center;. Untuk menu pakai <div> ber-flex dengan gap:18px.

26 / 28
Latihan 2 dari 3

Photo Gallery dengan CSS Grid

📋 Instruksi: Buat galeri foto menggunakan display: grid. Pilih tingkat tantanganmu:

MUDAH Grid 2×2 (4 foto), kolom sama lebar.
MENENGAH Grid 3 kolom responsif dengan auto-fit.
TANTANGAN Satu foto utama membentang 2×2, sisanya kecil.

🧱 Template Starter (silakan salin):

starter-gallery.html
.galeri {
  display: grid;
  grid-template-columns: /* TODO: atur kolom */ ;
  gap: 8px;
}
.foto-utama {
  /* TANTANGAN: grid-column: span 2; grid-row: span 2; */
}
💡 Petunjuk tingkat MENENGAH

Gunakan grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); agar galeri otomatis responsif.

27 / 28
Tugas Akhir Bab 6

Proyek: Landing Page Lengkap

🚀 Spesifikasi: Buat satu halaman landing page bertema bebas (produk, komunitas, atau profil) yang menggabungkan SEMUA materi Bab 6.

  • Minimal 3 section: Hero, Fitur/Konten, Footer
  • Wajib memakai Flexbox (mis. navbar) DAN Grid (mis. kartu fitur)
  • Minimal 1 position: sticky/fixed (navbar atau tombol)
  • Minimal 2 efek hover + 1 @keyframes animation
  • Rapi pada layar 1280×720 (tanpa scroll horizontal)

📊 Rubrik Penilaian:

AspekBobotIndikator
Layout (Flex & Grid)30%Struktur rapi & responsif
Position15%Penggunaan sticky/fixed tepat
Animasi & Hover25%Halus & relevan
Desain & Warna20%Konsisten & enak dilihat
Kerapian Kode10%Terstruktur & rapi

🗓️ Pengumpulan: [Deadline: ____] · Kumpulkan file index.html melalui [platform: ____].

🎉 Selamat! Kamu telah menyelesaikan Bab 6 — CSS Advanced

28 / 28