Sampul majalah ditentukan oleh satu cerita utama. Bagian 3 mengisi ruang kosong di <main> dengan artikel sorotan: kicker, judul ber-serif berskala besar, dek, byline, dan satu foto lebar di sebelah kanan. Karena course ini berjalan tanpa aset jaringan, foto digantikan gambar SVG inline bergradasi — struktur markup-nya identik dengan foto asli, jadi menggantinya nanti tidak menyentuh CSS.
Wadah Halaman #
Kelompok aturan keenam memperkenalkan .halaman { max-width: var(--lebar-konten); margin-inline: auto; padding-inline: 24px; } — wadah lebar isi yang pasangan mastheadnya sudah ada sejak Bagian 2. Wadah ini tidak menetapkan padding vertikal; jarak atas-bawah didelegasikan ke tiap section di dalamnya. Dengan begitu sorotan boleh punya ruang lebih lega daripada grid artikel nanti, tanpa wadah perlu mengetahui isi apa yang sedang dibungkusnya. Elemen <main class="halaman"> kini membungkus seluruh konten tengah, dan komentar penanda pada snapshot sebelumnya digantikan <section class="sorotan" aria-labelledby="judul-sorotan">.
Hero Dua Kolom dengan Grid #
Kelompok ketujuh menata sorotan sebagai grid dua kolom dengan porsi berbeda:
.sorotan {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
gap: var(--jarak-kolom);
align-items: center;
padding-block: 48px 56px;
}Kolom teks sedikit lebih lebar daripada kolom media karena judul panjang butuh ruang melipat baris yang lapang. minmax(0, …) pada kedua kolom mencegah isi panjang — URL, judul tanpa spasi — memaksa kolom melebihi porsinya. align-items: center menegakkan kedua kolom di tengah sehingga teks terasa sejajar dengan bidang foto, bukan menempel di tepi atasnya, dan padding-block: 48px 56px memberi jarak atas lega dengan sedikit lebih besar di bawahnya agar pemisah bagian berikutnya tidak terasa sesak. Di dalam kolom teks, markup memakai komponen Bagian 1 apa adanya: <p class="kicker">, <h1 class="judul-sorotan"> yang membungkus <a class="tautan-judul">, lalu .dek dan .byline. Ini uji nyata fondasi tipografi: tidak ada gaya baru yang ditulis untuk teks hero. Pratinjau susunannya:
Media Rasio 4:3 dan Pengganti Foto #
Dua aturan menutup bagian ini. .sorotan-media img memasang aspect-ratio: 4 / 3 bersama object-fit: cover, pasangan yang menjaga rasio bingkai tetap ketika sumber gambar berubah-ubah: bagian gambar yang melebihi bingkai terpotong, bukan terpelintir. .sorotan-media figcaption memberi kredit foto berukuran kecil berwarna tinta lunak. Markup gambarnya memakai data URI SVG bergradasi dua warna, lengkap dengan alt deskriptif serta atribut width="800" height="500":
<img src="data:image/svg+xml,%3Csvg ... %3C/svg%3E"
alt="Ilustrasi gradasi warna senja untuk foto jalur tebing kota lama"
width="800" height="500">Atribut dimensi itu memberi browser perkiraan ruang sebelum gambar termuat, sehingga layout tidak melompat. Teks alt ditulis sebagai deskripsi, bukan label: subjek dan suasana gambar disebut agar pembaca layar menerima konteks yang sama dengan pembaca visual. Gradasi warna juga dipilih senada dengan palet proyek — oranye senja menuju merah bata — sehingga menggantinya dengan foto asli kelak tidak menuntut penyesuaian warna di CSS. Dengan sorotan selesai, halaman sudah punya titik fokus; Bagian 4 menambahkan grid artikel dan sidebar di bawahnya.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Lentera — Beranda</title>
<link rel="icon" href="assets/logo.svg" type="image/svg+xml">
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<header class="masthead">
<div class="masthead-dalam">
<p class="masthead-edisi">Edisi Senin, 12 Oktober 2026</p>
<div class="masthead-baris">
<p class="masthead-logo"><a href="#">Lentera</a></p>
<button class="nav-toggle" id="tombol-nav" type="button" aria-expanded="false" aria-controls="nav-utama">Menu</button>
</div>
<nav class="nav-utama" id="nav-utama" data-terbuka="false" aria-label="Navigasi utama">
<ul>
<li><a href="#" aria-current="page">Terkini</a></li>
<li><a href="#">Budaya</a></li>
<li><a href="#">Teknologi</a></li>
<li><a href="#">Olahraga</a></li>
<li><a href="#">Opini</a></li>
</ul>
</nav>
</div>
</header>
<main class="halaman">
<section class="sorotan" aria-labelledby="judul-sorotan">
<article class="sorotan-artikel">
<p class="kicker">Liputan Utama</p>
<h1 class="judul-sorotan" id="judul-sorotan"><a class="tautan-judul" href="#">Kota Lama Membuka Kembali Jalur Tebing yang Delapan Tahun Tertutup</a></h1>
<p class="dek">Koridor sepanjang 1,2 kilometer di bibir tebing kini melayani pejalan kaki dan pesepeda. Penataan lampu dan area duduk baru selesai pekan lalu, dan pengunjung pertama memadati jalur sejak pagi.</p>
<p class="byline">Oleh Ratna Ayu Damayanti · 8 menit baca</p>
</article>
<figure class="sorotan-media">
<img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='800' height='500'%3E%3ClinearGradient id='g' x2='1' y2='1'%3E%3Cstop offset='0' stop-color='%23e9a05c'/%3E%3Cstop offset='1' stop-color='%237d3b3f'/%3E%3C/linearGradient%3E%3Crect width='800' height='500' fill='url(%23g)'/%3E%3C/svg%3E" alt="Ilustrasi gradasi warna senja untuk foto jalur tebing kota lama" width="800" height="500">
<figcaption>Jalur tebing kota lama sesaat setelah dibuka untuk publik. Foto: Tim Lentera/Nur Prasetyo</figcaption>
</figure>
</section>
</main>
</body>
</html>/* ============================================================
Lentera — beranda majalah digital
Proyek akhir Course CSS: tipografi editorial + grid layout
============================================================ */
/* ---------- 1. Token desain ---------- */
:root {
--kertas: #faf7f1;
--kertas-panel: #f0e9dd;
--tinta: #211c16;
--tinta-lunak: #6d635a;
--aksen: #93312a;
--garis: #ddd3c3;
--serif: Georgia, "Times New Roman", serif;
--sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
--lebar-konten: 1160px;
--jarak-kolom: 40px;
}
/* ---------- 2. Dasar dan reset ringkas ---------- */
*, *::before, *::after { box-sizing: border-box; }
body {
margin: 0;
background: var(--kertas);
color: var(--tinta);
font-family: var(--sans);
line-height: 1.6;
}
h1, h2, h3 {
margin: 0;
font-family: var(--serif);
font-weight: 700;
line-height: 1.15;
letter-spacing: -0.01em;
}
p { margin: 0; }
img { display: block; max-width: 100%; }
a { color: inherit; }
:focus-visible { outline: 2px solid var(--aksen); outline-offset: 2px; }
figure { margin: 0; }
/* ---------- 3. Komponen tipografi editorial ---------- */
.kicker {
margin-bottom: 8px;
font-size: 0.8125rem;
font-weight: 700;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--aksen);
}
.judul-sorotan { font-size: clamp(2.125rem, 4.5vw, 3.375rem); }
.judul-kartu { font-size: clamp(1.25rem, 2vw, 1.5rem); }
.dek { margin-top: 12px; font-size: clamp(1.0625rem, 1.5vw, 1.1875rem); line-height: 1.55; color: var(--tinta-lunak); }
.byline { margin-top: 14px; font-size: 0.875rem; color: var(--tinta-lunak); }
/* Tautan judul: garis bawah muncul saat hover atau fokus keyboard */
.tautan-judul { text-decoration: none; }
.tautan-judul:hover,
.tautan-judul:focus-visible {
text-decoration: underline;
text-decoration-color: var(--aksen);
text-decoration-thickness: 2px;
text-underline-offset: 5px;
}
/* ---------- 4. Masthead ---------- */
.masthead { border-bottom: 3px double var(--tinta); }
.masthead-dalam { max-width: var(--lebar-konten); margin-inline: auto; padding-inline: 24px; }
.masthead-edisi {
padding-block: 10px;
border-bottom: 1px solid var(--garis);
font-size: 0.8125rem;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--tinta-lunak);
}
.masthead-baris {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
padding-block: 20px 16px;
}
.masthead-logo { font-family: var(--serif); font-size: clamp(2.25rem, 6vw, 3.5rem); letter-spacing: 0.01em; text-transform: uppercase; }
.masthead-logo a { text-decoration: none; }
/* ---------- 5. Navigasi utama ---------- */
.nav-utama ul {
display: flex;
flex-wrap: wrap;
gap: 4px 28px;
margin: 0;
padding-block: 12px;
border-top: 1px solid var(--garis);
list-style: none;
}
.nav-utama a {
display: block;
font-size: 0.875rem;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
text-decoration: none;
}
.nav-utama a:hover,
.nav-utama a[aria-current="page"] { color: var(--aksen); }
/* Tombol menu: tersembunyi di desktop, aktif di layar sempit */
.nav-toggle {
display: none;
padding: 8px 16px;
border: 1px solid var(--tinta);
background: transparent;
font-family: var(--sans);
font-size: 0.875rem;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--tinta);
cursor: pointer;
}
.nav-toggle:hover { background: var(--tinta); color: var(--kertas); }
/* Mode seluler: menu tampil hanya saat data-terbuka="true" */
@media (max-width: 720px) {
.nav-toggle { display: inline-block; }
.nav-utama { display: none; }
.nav-utama[data-terbuka="true"] { display: block; }
.nav-utama ul { flex-direction: column; gap: 0; padding-block: 6px; }
.nav-utama a { padding-block: 12px; border-bottom: 1px solid var(--garis); }
.nav-utama li:last-child a { border-bottom: none; }
}
/* ---------- 6. Wadah halaman ---------- */
.halaman { max-width: var(--lebar-konten); margin-inline: auto; padding-inline: 24px; }
/* ---------- 7. Sorotan utama (hero) ---------- */
.sorotan {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
gap: var(--jarak-kolom);
align-items: center;
padding-block: 48px 56px;
}
.sorotan-media img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; }
.sorotan-media figcaption { margin-top: 8px; font-size: 0.8125rem; color: var(--tinta-lunak); }Ringkasan #
Bagian 3 menyelesaikan wadah .halaman, hero sorotan dua kolom berbasis grid, dan media rasio 4:3 dengan object-fit: cover plus pengganti foto SVG. Snapshot beranda.html dan styles.css di atas merekam kondisi selesaikan bagian ini.