Cara membuat header di HTML
Bungkus bagian atas halamanmu (logo, nama situs, menu utama) dengan elemen <header>. Header adalah kotak blok tanpa tampilan default, jadi beberapa baris CSS sudah cukup untuk mengubahnya menjadi sebuah bar:
margin-inline-end: auto di logo mendorong menu dan tombol ke ujung bar. Hapus elemen <style> dan kamu tetap punya header: yang membuatnya header adalah tag-nya, bukan background gelapnya.
header vs head vs h1
Tiga nama yang terdengar mirip tapi tugasnya berbeda:
| Elemen | Letaknya | Terlihat | Berapa banyak |
|---|---|---|---|
<head> | Langsung di dalam <html>, sebelum <body> | Tidak: berisi <title>, <meta>, <link> | Tepat satu |
<header> | Di dalam <body> | Ya: konten pembuka sebuah halaman atau bagian | Berapa pun |
<h1> sampai <h6> | Di mana saja di dalam <body> | Ya: sebuah heading | Berapa pun |
<head> di bawah ini mengatur judul halaman yang ditampilkan browser di tab-nya. Semua yang bisa kamu lihat di pratinjau berasal dari <body>:
Header sering berisi heading, tapi tidak harus, dan heading tidak perlu dibungkus header.
Header di dalam artikel
<header> memperkenalkan artikel atau bagian terdekatnya, bukan hanya halaman. Daftar postingan blog yang setiap postingannya punya header sendiri itu valid dan umum:
Bagi screen reader, hanya header tingkat halaman (yang tidak berada di dalam article, aside, main, nav atau section) yang menjadi landmark banner. Header artikel adalah grup biasa, jadi kamu tidak akan punya beberapa banner.
Sticky header
position: sticky menjaga header tetap di atas sementara konten di bawahnya bergulir. Gulir di dalam kotak di bawah ini:
Tiga detail yang membuatnya berhasil: top: 0 (sticky tidak berpengaruh tanpa offset), warna background (kalau tidak, baris-barisnya akan terlihat menembus), dan z-index supaya konten yang diposisikan tidak tergambar di atasnya. Di halaman sungguhan, kotak yang bergulir adalah halamannya sendiri, jadi header berada langsung di <body>.
Header dengan position: fixed juga tetap di tempatnya, tapi keluar dari alur halaman, jadi konten bergeser ke bawahnya dan butuh padding di bagian atas. Sticky tetap memakan ruangnya di layout.
Apa saja yang boleh ada di header
Header bisa berisi hampir semua konten: heading, gambar logo, <nav>, form pencarian, tombol. Header tidak boleh berisi <header> lain atau <footer>, dan tidak boleh berada di dalam <footer>, <address>, atau <header> lain.
<header>
<a href="/"><img src="logo.svg" alt="Acme home"></a>
<nav aria-label="Main">...</nav>
<form role="search">...</form>
</header>
Saat logo menjadi link ke halaman utama, teks alt-nya harus menyebut ke mana link itu mengarah ("Acme home"), karena itulah yang diumumkan screen reader.
Kesalahan umum
- Tertukar antara
<header>dan<head>. Metadata ditaruh di<head>; konten yang terlihat tidak pernah ditaruh di sana. - Memakai
<header>untuk setiap heading. Heading saja tidak perlu dibungkus header. Pakai<header>saat ada sekelompok konten pembuka. - Sticky header tanpa background. Teks halaman terlihat bergulir menembusnya. Atur
background. - Sticky yang tidak menempel. Elemen leluhur dengan
overflow: hiddenatauoverflow: automenjadi kotak gulir untuk sticky, jadi header menempel di dalam kotak itu (atau tidak menempel sama sekali). Periksa elemen-elemen leluhurnya. - Menaruh menu situs di
<div>di dalam header. Pakai<nav>supaya pengguna screen reader bisa melompat ke sana.
Pertanyaan yang sering diajukan
Apa itu tag header di HTML?
<header> adalah elemen semantik untuk konten pembuka: logo situs dan menu di bagian atas halaman, atau judul dan nama penulis di bagian atas artikel. Header adalah kotak blok biasa tanpa gaya default.
Apa perbedaan head dan header di HTML?
<head> adalah bagian dokumen yang tidak terlihat, berisi <title>, tag <meta>, dan link stylesheet, dan jumlahnya tepat satu. <header> adalah konten yang terlihat di dalam <body>, dan satu halaman bisa punya beberapa.
Bolehkah satu halaman punya lebih dari satu elemen header?
Boleh. Halaman biasanya punya satu header situs, dan setiap <article> atau <section> bisa punya <header> sendiri untuk judul dan informasi meta-nya. Hanya header yang tidak berada di dalam article, aside, main, nav atau section yang dihitung sebagai banner halaman bagi screen reader.
Apakah nav harus ditaruh di dalam header?
Boleh, dan sering begitu saat menu utama berada di bagian atas halaman. Menaruh <nav> di luar <header> juga valid; pilih yang sesuai dengan layout-mu.
Bagaimana cara membuat header tetap di atas saat halaman digulir?
Beri position: sticky; top: 0; ditambah warna background dan z-index, supaya konten bergulir di bawahnya. Sticky hanya berfungsi selama induk header lebih tinggi dari header-nya, dan elemen leluhur dengan overflow: hidden mencegahnya menempel di halaman.