Menu

!important di CSS: Cara Kerja dan Kapan Memakainya

!important membuat sebuah deklarasi menang atas deklarasi normal, berapa pun specificity-nya. Pelajari dengan tepat apa yang dikalahkannya, apa yang mengalahkannya, cara kerja specificity di baliknya, dan cara yang lebih rapi untuk memenangkan konflik style.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

Fungsi !important

Menambahkan !important setelah sebuah nilai membuat deklarasi itu menang atas setiap deklarasi normal untuk properti yang sama pada elemen yang sama. Specificity selector dan urutan di kode tidak lagi berpengaruh.

Tanpa !important, ID selector yang akan menang dan teksnya berwarna biru. Hapus !important di editor untuk melihatnya.

Sintaks

selector {
  property: value !important;
}

Tanda ini ditulis setelah nilai dan sebelum titik koma. Tanda ini hanya berlaku untuk satu deklarasi itu, bukan seluruh aturan. Tanda ini juga berfungsi di shorthand (margin: 0 !important; membuat keempat sisi menjadi important) dan di atribut style.

Apa mengalahkan apa

Untuk style yang ditulis oleh pembuat halaman, dari yang paling lemah sampai yang paling kuat:

PeringkatDeklarasiContoh
1Deklarasi normal di stylesheetp { color: blue; }
2Deklarasi normal di atribut style<p style="color: blue">
3!important di stylesheetp { color: blue !important; }
4!important di atribut style<p style="color: blue !important">

Di dalam satu peringkat, specificity yang menentukan, lalu urutan munculnya deklarasi: yang belakangan yang menang.

Inilah satu-satunya pemakaian !important sehari-hari yang sah: menimpa inline style yang tidak bisa kamu edit, seperti yang ditulis oleh widget pihak ketiga.

Saat dua deklarasi sama-sama !important

!important melawan !important kembali ke aturan biasa: specificity yang lebih tinggi menang, dan jika seri, deklarasi yang belakangan yang menang.

Begitulah !important makin meningkat: begitu satu aturan memakainya, aturan yang harus menimpanya juga harus memakainya, dan specificity mulai naik lagi.

Specificity CSS dalam satu tabel

Specificity adalah bobot sebuah selector. Hitung tiga angka:

KolomYang dihitungContoh selectorSpecificity
AID selector#nav(1,0,0)
BClass, atribut, pseudo-class.btn, [type="text"], :hover(0,1,0) masing-masing
CType selector, pseudo-elementp, ::before(0,0,1) masing-masing
tidak ada*, combinator (>, +, ~, spasi)*, ul > litidak menambah apa-apa

Bandingkan kolom A lebih dulu; hanya jika seri, lihat B, lalu C. Jadi #nav a (1,0,1) mengalahkan .menu .item .link a (0,3,1): satu ID lebih berat dari class sebanyak apa pun.

Memahami tabel ini membuatmu bisa menghindari !important: sebagian besar masalah "CSS saya tidak diterapkan" disebabkan aturan lain yang lebih spesifik, yang bisa dilihat di panel Styles DevTools dengan deklarasimu dicoret.

Alternatif yang lebih rapi

  • Samakan specificity-nya, lalu andalkan urutan. Muat stylesheet-mu setelah milik library dan pakai selector yang setidaknya sama spesifiknya.
  • Turunkan specificity aturan lain dengan :where(). Semua yang ada di dalam :where() dihitung nol, jadi style dasar yang ditulis dengannya mudah ditimpa.
  • Pakai variabel CSS sebagai pengait. Komponen yang membaca var(--btn-bg) bisa diberi tema tanpa harus melawan selector-nya. Lihat variabel CSS.

Mengatur !important dari JavaScript

element.style.color = 'red !important' tidak berfungsi: nilainya tidak valid dan diabaikan. Pakai setProperty dengan argumen ketiga:

el.style.setProperty('color', '#f59e0b', 'important');

Kesalahan umum

  • Menaruhnya di tempat yang salah. color: !important red; tidak valid; tanda ini ditulis setelah nilai.
  • Memakainya di @keyframes. Deklarasi yang ditandai !important di dalam keyframe diabaikan.
  • Memperbaiki setiap konflik dengannya. Cari aturan yang menang di DevTools, lalu samakan atau turunkan specificity-nya.
  • Berharap tanda ini memengaruhi properti lain. color: red !important tidak berpengaruh apa-apa pada background.
  • Lupa bahwa !important inline mengalahkan milikmu. Tidak ada aturan di stylesheet halaman yang bisa menimpa style="color: red !important"; ubah atributnya sendiri, misalnya dengan JavaScript.

Pertanyaan yang sering diajukan

Apa fungsi !important di CSS?

!important memberi satu deklarasi prioritas di atas setiap deklarasi normal untuk properti yang sama pada elemen yang sama, apa pun specificity selector atau urutannya. Tulis setelah nilainya: color: red !important;.

Bagaimana cara menimpa !important?

Dengan deklarasi !important lain yang specificity-nya lebih tinggi, atau specificity-nya sama dan posisinya lebih belakang di stylesheet. style inline dengan !important mengalahkan setiap !important di stylesheet.

Apakah !important menimpa inline style?

Ya. Deklarasi di stylesheet dengan !important mengalahkan deklarasi normal di atribut style. Tetapi tidak mengalahkan deklarasi inline yang juga ditandai !important.

Apakah memakai !important itu kebiasaan buruk?

Jika dipakai untuk memenangkan pertarungan specificity, ya: penimpaan berikutnya jadi butuh !important juga, dan stylesheet menjadi sulit diubah. Pemakaiannya wajar untuk utility class yang harus selalu berlaku (seperti .hidden), untuk menimpa inline style dari pihak ketiga, dan di user stylesheet.

Bagaimana cara menghitung specificity CSS?

Hitung tiga kolom: ID selector, lalu class, atribut, dan pseudo-class, lalu type selector dan pseudo-element. Bandingkan kolom demi kolom dari awal, jadi #nav a (1,0,1) mengalahkan .menu .item a (0,2,1). Selector universal * dan combinator tidak menambah apa-apa.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai