Setiap deklarasi yang kita tulis bersaing di dalam cascade, tetapi CSS juga menyediakan tiga kata kunci yang berdiri di luar kompetisi nilai biasa: initial, inherit, dan unset. Ketiganya dapat dipakai pada properti mana pun untuk menyatakan dengan gamblang nilai mana yang kita inginkan — nilai awal spesifikasi, nilai induk, atau nilai yang mengikuti sifat properti. Kata kunci ini berguna ketika komponen harus mengikuti konteks di sekelilingnya, atau justru harus dilepaskan dari gaya global. Pada Chapter ini kita memahami logika ketiganya, mengujinya pada elemen nyata, dan menutup dengan jebakan shorthand all: unset.
Tiga Kata Kunci dengan Satu Logika #
Ketiga kata kunci berlaku universal dan terdokumentasi pada MDN untuk initial , inherit , dan unset . Logikanya ringkas:
| Kata kunci | Nilai yang dihasilkan |
|---|---|
initial | Nilai awal properti menurut spesifikasi, terlepas dari induk |
inherit | Nilai computed induk, dipaksa — juga untuk properti yang tidak mewarisi |
unset | Mengikuti sifat properti: inherit bila propertinya mewarisi, initial bila tidak |
Kata kunci ini menjawab dua kebutuhan yang tidak bisa diselesaikan cascade biasa. Pertama, memaksa properti non-inherited mengikuti induk — misalnya border-style: inherit agar elemen meniru garis induknya. Kedua, melepaskan gaya yang menempel tanpa menebak-nebak nilai penggantinya: font-style: initial pada <em> langsung menghasilkan normal tanpa perlu kita hafal nilai awalnya.
Satu hal penting untuk ditegaskan: kata kunci ini adalah nilai biasa dalam kompetisi cascade. Deklarasi color: inherit masih dapat dikalahkan deklarasi color lain yang lebih spesifik atau ditulis belakangan, sama seperti nilai apa pun. Yang berbeda hanyalah sumber nilainya — induk atau spesifikasi — bukan kekuatannya di dalam cascade. Karena itu, kombinasi kata kunci dengan selector yang tepat (class komponen, misalnya) adalah cara memastikan perilakunya stabil.
Shorthand all
menerima ketiga kata kunci itu sekaligus dan menerapkannya ke semua properti, kecuali direction, unicode-bidi, dan custom properties. Dengan kata lain, all: unset mereset seluruh properti elemen mengikuti sifat masing-masing.
Contoh Penerapan pada Elemen #
Demo chapter ini menaruh semua uji di dalam satu wadah .wadah yang menetapkan color biru dan font-weight: 600:
.wadah {
color: rgb(2, 132, 199);
font-weight: 600;
font-size: 16px;
}
.paksa { color: inherit; }
.awal { font-style: initial; }
.garis { border-style: initial; border-width: 4px; border-color: rgb(220, 38, 38); }
.berat-hapus{ font-weight: unset; }
.garis-hapus{ border-style: unset; border-width: 4px; border-color: rgb(220, 38, 38); }
.total { all: unset; }<div class="wadah">
<p>Default: <span class="turun">mewarisi biru 600</span>.</p>
<p>inherit: <span class="paksa">dipaksa mewarisi</span>.</p>
<p>initial pada em: <em class="awal">tidak miring lagi</em>.</p>
<p>initial pada border: <span class="garis">garisnya tidak muncul</span>.</p>
<p>unset pada font-weight: <span class="berat-hapus">kembali mewarisi 600</span>.</p>
<p>unset pada border: <span class="garis-hapus">garisnya tidak muncul</span>.</p>
<p>all: unset: <span class="total">teks tanpa gaya penulis</span>.</p>
</div>Hasil di Browser:
Span default dan span dengan color: inherit sama-sama tampil biru
(rgb(2, 132, 199)) dengan font-weight 600 dari .wadah.
em dengan font-style: initial tampil tegak (normal), bukan miring.
Span dengan border-width 4px merah tetapi border-style: initial tidak
menampilkan garis apa pun karena nilai awal border-style adalah none.
font-weight: unset mengikuti sifat propertinya — font-weight mewarisi,
sehingga kembali ke 600 milik .wadah.
border-style: unset jatuh ke initial (none) karena border tidak mewarisi.
Span dengan all: unset tampil seperti teks polos: color kembali rgb(2, 132, 199)
(unset pada properti yang mewarisi berarti inherit), border-style none, dan
display kembali inline.Mari kita telaah mekanismenya baris demi baris:
.paksa { color: inherit; }:colormemang mewarisi secara alami, sehingga hasilnya identik dengan span default. Deklarasi ini berguna justru pada properti non-inherited..awal { font-style: initial; }: elemen<em>menerimaitalicdari origin user-agent; kata kunciinitialmemindahkan nilainya ke nilai awal spesifikasi, yaitunormal..garis { border-style: initial; ... }: kita memberiborder-width: 4pxdan warna merah, tetapiborder-style: nonemembuat garis tidak digambar — bukti bahwa nilai awalborder-styleadalahnone..berat-hapus { font-weight: unset; }:font-weightadalah properti yang mewarisi, sehinggaunsetberperilaku sepertiinheritdan span kembali menerima 600 dari induknya..garis-hapus { border-style: unset; }:bordertidak mewarisi, sehinggaunsetberperilaku sepertiinitialdan menghasilkannone..total { all: unset; }: seluruh properti span direset sekaligus — latar, padding, border hilang, dandisplaykembali ke nilai awalnya.
Jebakan all: unset #
Bila tujuan kita bukan “kembali ke nilai awal spesifikasi” melainkan “kembali ke gaya yang berlaku sebelum aturan ini”, kata kunci yang tepat adalah revert — topik Chapter Revert dan Revert-layer
. Demo pada chapter ini membawa data-expected untuk setiap span dan em, sehingga perilaku ketiga kata kunci diverifikasi otomatis oleh harness Course.