White Space dan Text Overflow
Mengatur spasi dan baris baru (white-space), serta teks terpotong dengan ellipsis.
white-space: siapa yang atur baris?
Secara default, browser menggabungkan spasi berlebih dan memutus baris otomatis (normal). Nilai lain mengubah perilaku ini:
.kode {
white-space: pre; /* seperti <pre>: spasi & baris baru dihormati */
}
.satu-baris {
white-space: nowrap; /* tidak boleh pindah baris */
}
.chat {
white-space: pre-wrap; /* hormati baris baru TAPI tetap wrap */
}pre-wrap adalah favorit untuk konten user (komentar, chat): baris baru yang diketik user dipertahankan, tapi teks panjang tetap wrap.
Text overflow: ellipsis
Trio wajib untuk teks terpotong dengan "...":
.judul-kartu {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}Ketiganya harus ada: nowrap mencegah pindah baris, overflow: hidden memotong, ellipsis menampilkan "...". Tanpa salah satu, triknya gagal.
Untuk multi-baris, pakai teknik line-clamp:
.deskripsi {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}Catatan teknis:
-webkit-line-clampaslinya properti vendor, tapi kini didukung semua browser modern dan sedang distandarisasi sebagailine-clamp. Aman dipakai saat ini.
Analogi: mesin tik vs Word
white-space: normal seperti Word: teks mengalir dan wrap otomatis. white-space: pre seperti mesin tik: apa yang kamu ketik persis itu yang tampil, termasuk spasi ganda dan baris baru. nowrap seperti papan pengumuman satu baris: semua dipaksa sebaris.
Kenapa ini penting?
HTML secara default "melipat" spasi ganda dan baris baru menjadi satu spasi. Kadang kamu BUTUH format asli: kode program, puisi, atau alamat. Di sisi lain, kadang kamu butuh teks tetap sebaris: judul kartu yang tidak boleh turun baris.
Contoh bertahap: tiga kebutuhan
Kebutuhan 1, tampilkan kode apa adanya:
pre {
white-space: pre;
overflow-x: auto; /* kode panjang bisa di-scroll */
background: #0f172a;
color: #e2e8f0;
padding: 16px;
border-radius: 8px;
}Kebutuhan 2, judul satu baris dengan ellipsis:
.judul-kartu {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}Tiga properti wajib bersamaan: nowrap (jangan wrap), hidden (potong), ellipsis (tampilkan ...).
Kebutuhan 3, chat bubble yang menghormati enter pengguna tapi tetap wrap:
.pesan-chat {
white-space: pre-wrap; /* baris baru dihormati + wrap otomatis */
}pre-wrap adalah pilihan terbaik untuk konten buatan pengguna (komentar, chat): enter mereka tampil, tapi teks panjang tetap wrap.
Kesalahan umum pemula
Salah: nowrap tanpa overflow. Teks nowrap yang kepanjangan MELUBER keluar wadah dan merusak layout. Selalu pasangkan dengan overflow: hidden/auto.
Salah: pre untuk teks biasa. white-space: pre mematikan wrap otomatis: paragraf panjang meluber di HP. Pakai pre hanya untuk kode/teks yang memang butuh format asli.
Salah: lupa bahwa HTML melipat spasi. Mengetik spasi ganda di HTML tidak berpengaruh tanpa white-space yang tepat. Bukan bug, itu spesifikasi.
Latihan kilat
- Judul kartu harus satu baris dengan "..." bila kepanjangan. Tulis tiga properti wajibnya.
- Kamu membuat kolom komentar. Pengguna menekan Enter untuk baris baru, tapi teks panjang harus tetap wrap. Properti apa yang tepat?
- Apa akibat memakai
white-space: nowrapTANPA overflow? Dan memakaiwhite-space: preuntuk paragraf biasa di HP?
Kunci: (1) white-space: nowrap; overflow: hidden; text-overflow: ellipsis;. (2) white-space: pre-wrap;. (3) Teks meluber merusak layout; paragraf pre tidak wrap dan meluber di layar kecil.
Istilah kunci
- normal: perilaku default (spasi dilipat, wrap otomatis).
- nowrap: paksa satu baris.
- pre: hormati format asli seperti diketik.
- pre-wrap: format asli + wrap otomatis (terbaik untuk konten pengguna).
- Collapse: pelipatan spasi ganda/baris baru oleh HTML.
Kasus nyata: aplikasi chat
.bubble {
white-space: pre-wrap; /* hormati Enter pengguna */
word-break: break-word; /* potong kata super panjang (URL) */
max-width: 75%;
}Kombinasi ini menangani semua input chat: baris baru tampil, URL panjang tidak meluber, bubble tidak memenuhi layar.
Rangkuman
white-space mengatur perilaku spasi dan wrap. Untuk ellipsis satu baris: nowrap + overflow hidden + text-overflow. Untuk beberapa baris: line-clamp.
export default function App(): JSX.Element { return <h1>Hello world</h1> }
Tantangan
Kartu Rapi Seragam
Di playground:
- Hapus trio ellipsis dari
.judul, amati judul mendorong layout. Kembalikan. - Ubah
.deskripsimenjadi clamp 2 baris, bukan 3. - Buat class
.chatbaru denganwhite-space: pre-wrapdan uji dengan teks yang mengandung baris baru di HTML. Tulis di komentar bedanya denganpre.
<!doctype html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="styles.css" /> </head> <body> <h1>Halo CSS</h1> <p>Edit styles.css dan lihat hasilnya.</p> </body> </html>
Kuis Bab
Uji pemahamanmu: Background dan Tipografi
Jawab 5 soal berikut, lalu tekan "Periksa Jawaban".
1.Bagaimana membuat background gambar menutupi seluruh elemen tanpa gepeng?
2.Mengapa font-family ditulis sebagai tumpukan (font stack)?
3.line-height: 1.5 berarti?
4.Properti apa yang membuat teks satu baris dengan ellipsis (...) saat kepanjangan?
5.Fungsi @font-face digunakan untuk?