Sebagian elemen HTML tidak berisi konten yang ditulis langsung di dalam dokumen. Elemen img adalah kotak kosong yang browser isi dengan berkas gambar dari luar; input dan textarea digambar oleh browser sebagai kontrol antarmuka. Kategori ini disebut replaced elements — elemen yang isinya diganti (replaced) oleh sumber daya eksternal. Karena isinya bukan teks biasa, replaced elements punya aturan ukuran tersendiri: ukuran intrinsik dan rasio aspek, yang membuat perilaku width dan height-nya berbeda dari elemen pada dua chapter sebelumnya.
Apa Itu Replaced Element #
Replaced element adalah elemen yang kontennya berada di luar cakupan CSS dokumen: browser menggantikan isi elemen dengan sumber daya lain (MDN: Replaced element ). Anggota utamanya:
img— gambar dari atributsrc;videodaniframe— konten media atau dokumen lain;input,textarea, danselect— kontrol form yang digambar browser.
Dua ciri khasnya menentukan cara kita mengukurnya. Pertama, replaced element memiliki ukuran intrinsik: berkas gambar membawa lebar dan tinggi aslinya, misalnya 400×300 piksel. Kedua, dari ukuran intrinsik itu tersimpan rasio aspek — perbandingan lebar terhadap tinggi, misalnya 4:3 — yang dipakai browser saat salah satu dimensi kita ubah. Untuk elemen yang tidak membawa rasio dari berkasnya, CSS menyediakan properti aspect-ratio agar rasio tetap dapat dinyatakan secara eksplisit (MDN: aspect-ratio
).
Ukuran Intrinsik dan Rasio Aspek #
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="utf-8">
<style>
* { box-sizing: border-box; margin: 0; }
#img-asli { /* tanpa aturan ukuran: memakai ukuran intrinsik */ }
#img-200 { width: 200px; /* tinggi mengikuti rasio 4:3 */ }
#input-nama { width: 200px; }
</style>
</head>
<body>
<p>
<img id="img-asli" src="ilustrasi-400x300.svg" alt="Ilustrasi lingkaran biru 400×300">
<img id="img-200" src="ilustrasi-400x300.svg" alt="Ilustrasi yang dipadatkan menjadi 200px">
</p>
<p>
<input id="input-nama" type="text" placeholder="Nama pengguna">
</p>
</body>
</html>Hasil di Browser (demo memakai gambar SVG inline, bukan berkas terpisah):
Gambar pertama tampil selebar 400px setinggi 300px — persis ukuran
intrinsik berkasnya; computed display-nya inline.
Gambar kedua diberi width 200px; tingginya otomatis menjadi 150px
karena rasio aspek 4:3 dipertahankan.
Input teks menerima width 200px; computed display-nya inline-block.Mari kita telaah aturan ukurannya:
- Baris 5 (
#img-asli): tanpawidthdanheight, browser memakai ukuran intrinsik berkas — pada demo, SVG 400×300 piksel. Nilai computedwidth: 400pxdanheight: 300pxmencerminkan ukuran asli tersebut. - Baris 6 (
#img-200 { width: 200px; }): hanya satu dimensi dinyatakan, maka browser menghitung dimensi satunya dari rasio aspek: 200 ÷ (4/3) = 150px. Propertiheighttidak perlu ditulis — dan justru sebaiknya dibiarkan agar rasio terjaga. - Baris 7 (
#input-nama { width: 200px; }): kontrol form menerimawidthmeskipun termasuk elemen sejajar — perilaku yang pada elemen inline biasa mustahil terjadi.
Ketika kedua dimensi dipaksakan dan rasio berbeda dari aslinya, isi gambar akan terdistorsi. Di sinilah properti object-fit berperan untuk mengatur bagaimana gambar mengisi kotaknya (misalnya cover untuk memotong, contain untuk memuat utuh) — dasar-dasarnya kita singgung pada demo, dan pembahasan penuhnya menanti pada Section Modern CSS
(MDN: object-fit
).
Replaced Element dan Display #
Replaced elements mengejutkan dari sisi tipe kotak. img bernilai display: inline secara bawaan, tetapi tetap menerima width dan height — pengecualian terhadap aturan Chapter Block dan Inline
. Alasannya: yang diukur browser bukan teks di dalam elemen, melainkan kotak pengganti yang ukurannya telah pasti. Kontrol form seperti input bahkan dilaporkan browser sebagai inline-block.
Karena img dan kawan-kawannya sangat umum, memahami kategori ini membayar dividennya cepat: caption yang tidak bergeser, galeri yang rasionya terjaga, dan form yang lebarnya bisa diatur tanpa mengubah tipe kotaknya. Simpan pula kebiasaan menulis atribut width dan height pada img di HTML — browser memakai nilainya untuk menghitung rasio sebelum berkas gambar selesai diunduh, sehingga layout tidak melompat saat gambar tiba.