Bagaimana cara mengesampingkan! Penting?

250

Saya telah membuat lembar gaya khusus yang menimpa CSS asli untuk templat Wordpress saya. Namun, pada halaman kalender saya, CSS asli memiliki ketinggian setiap set tabel dengan !importantdeklarasi:

td {height: 100px !important}

Apakah ada cara saya bisa menimpanya?

pengguna1444027
sumber
3
Sudahkah Anda mencoba menggunakan !importantjuga? Jika lembar CSS Anda ditentukan setelah templat asli, itu harus bekerja dengan baik.
Petr Janeček
1
Lembar mana yang terakhir, milik Anda atau templatnya?
j08691
67
Inilah sebabnya mengapa !importantdianggap berbahaya.
Spudley
8
Cara yang paling kuat adalah seperti: td [style] {height: 110px! Important; }. ini bertindak seolah-olah Anda menyuntikkan style inline ke html karena Anda menerapkan style ke atribut style sebenarnya dari tag.
DMTintner

Jawaban:

352

Mengganti pengubah penting!

  1. Cukup tambahkan aturan CSS lain dengan !important, dan beri pemilih spesifisitas yang lebih tinggi (menambahkan tag, id, atau kelas tambahan ke pemilih)
  2. tambahkan aturan CSS dengan pemilih yang sama di titik yang lebih baru dari yang ada (dalam dasi, yang terakhir didefinisikan menang).

Beberapa contoh dengan spesifisitas lebih tinggi (pertama adalah tertinggi / override, ketiga adalah terendah):

table td    {height: 50px !important;}
.myTable td {height: 50px !important;}
#myTable td {height: 50px !important;}

Atau tambahkan pemilih yang sama setelah yang ada:

td {height: 50px !important;}

Penolakan:

Ini hampir tidak pernah merupakan ide yang baik untuk digunakan !important. Ini adalah rekayasa buruk oleh pembuat template WordPress. Dengan gaya viral, ini memaksa pengguna templat untuk menambahkan !importantpengubah mereka sendiri untuk menimpanya, dan membatasi opsi untuk menimpanya melalui JavaScript.

Tapi, penting untuk mengetahui cara menimpanya, jika Anda kadang harus melakukannya.

Matt Coughlin
sumber
7
Saya tahu bahwa ini sedikit di sisi yang lebih tua dari jawaban, tetapi bisakah Anda menambahkan komentar bahwa ini adalah cara yang sangat buruk untuk menulis CSS Anda (atau menyatakan mengapa itu dapat diterima jika Anda tidak setuju)? Saya telah melihat orang merujuk pada jawaban ini ... :)
ZenMaster
Jawaban yang bagus Saya setuju, ini berantakan. Ini memaksa saya untuk meretas hack mereka, kemudian seseorang untuk meretas hack saya, dll. Dalam kasus saya, saya harus berurusan dengan template yang menarik CSS mereka dari database di suatu tempat. Saya ambil DB dump dan itu menunjukkan saya itu berasal dari gumpalan json 1MB. Tidak terlalu berguna bagi saya dalam menemukan tempat untuk mengubahnya, memaksa saya untuk menambahkan CSS ke file kode, cara itu harus dilakukan, kecuali dengan peretasan jahat ini.
Josh Ribakoff
mungkin juga merupakan ide bagus untuk menambahkan tanda pengenal meskipun memperlambat css. Hanya harus memperbaiki satu di mana saya harus meletakkan di div # header.class {style:; } agar dapat mengambil ... sangat menjengkelkan
Sparatan117
Ada kegunaan yang baik untuk !important. Seperti penimpaan gaya peramban atau situs dari skrip Stylish, AdBlock, atau uBlock. Atau ketika Anda tidak memiliki akses yang mudah ke CSS dasar, yang mungkin sangat kompleks, menyebar melalui banyak file, dan berubah seiring waktu (dan mungkin juga menggunakan !important). Seperti alat apa pun, potensi positif atau negatif didasarkan pada cara Anda menggunakannya. Orang-orang perlu berhenti menjadi kera setiap kali hal-hal seperti ini atau goto / eval / global / dll. disebutkan. Mungkin juga mengatakan "hindari WordPress" atau "hindari CSS" karena potensi "mengacaukan segalanya" terlalu besar.
Beejor
30

The !importantseharusnya hanya digunakan ketika Anda memiliki pemilih dalam lembar gaya Anda dengan bertentangan spesifisitas .

Tetapi bahkan ketika Anda memiliki spesifisitas yang saling bertentangan, lebih baik untuk membuat pemilih yang lebih spesifik sebagai pengecualian. Dalam kasus Anda, lebih baik memiliki classHTML Anda yang dapat Anda gunakan untuk membuat pemilih yang lebih spesifik yang tidak memerlukan !importantaturan.

td.a-semantic-class-name { height: 100px; }

Saya pribadi tidak pernah menggunakan !importantstyle sheet saya. Ingat bahwa C dalam CSS adalah untuk cascading. Menggunakan !importantakan merusak ini.

Jasper de Vries
sumber
17
Ini tidak benar. Sebuah !importantaturan dalam stylesheet akan menimpa aturan yang normal dalam styletag, misalnya. Namun, dalam beberapa situasi akan terlihat bahwa aturan yang lebih spesifik menimpanya. Misalnya, jika Anda mengatur font-size: 24pt !importantpada body, Anda masih bisa menimpanya dengan font-size: 12ptpada p. Hal ini karena Anda tidak mengesampingkan !importantaturan, Anda mengesampingkan implisit font-size: inheritpada p.
meustrus
23

Penafian: Hindari! Penting apa pun risikonya.

Ini adalah peretasan yang kotor dan kotor, tetapi Anda dapat menimpa yang penting, tanpa yang penting, dengan menggunakan animasi (berulang tanpa henti atau sangat tahan lama) di properti yang Anda coba timpa pada importir.

@keyframes forceYellow {
  from {
    background-color: yellow;
  }
  to {
    background-color: yellow;
  }
}

div {
  width: 100px;
  height: 100px;
  margin: 0 auto;
  background: red !important;
  animation: 1s linear infinite forceYellow;
}
<div></div>

mariomc
sumber
2
berpotensi membebani CPU pengguna
Berry Tsakala
2
Tampaknya trik ini tidak berfungsi lagi. Di Firefox 78 dan Chrome 83, kotak masih berwarna merah.
Andy Pan
13

Oke di sini adalah pelajaran singkat tentang Pentingnya CSS. Saya berharap bahwa di bawah ini membantu!

Pertama-tama setiap bagian dari nama gaya sebagai pembobotan, sehingga semakin banyak elemen yang Anda miliki yang berhubungan dengan gaya itu, semakin penting hal itu. Sebagai contoh

#P1 .Page {height:100px;}

lebih penting daripada:

.Page {height:100px;}

Jadi saat menggunakan yang penting, idealnya ini hanya boleh digunakan, padahal benar-benar dibutuhkan. Jadi untuk mengatasi decleration, buat style lebih spesifik, tetapi juga dengan override. Lihat di bawah:

td {width:100px !important;}
table tr td .override {width:150px !important;}

Saya harap ini membantu!!!

KM123
sumber
dua !importantdapat ditimpa dengan mendefinisikan kembali .old-class-name {bla bla bla} sebagai .old-class-name.overrided {bla bla bla} pada <style></style>tag di atas komponen, itu berfungsi untuk saya
Tarek Kalaji
11

Ganti menggunakan JavaScript

$('.mytable td').attr('style', 'display: none !important');

Bekerja untukku.

Manish Shrivastava
sumber
Saya pikir gaya inline selalu mengesampingkan pentingnya orangtua! bendera.
Joshua Ramirez
3
@ JoshuaRamirez Tidak, mereka sebenarnya tidak mengesampingkan bendera penting kecuali jika Anda memasukkan inline bendera penting juga
Cam
1
Jika Anda akan menggunakan JS, Anda mungkin hanya menghapus elemen seluruhnya, kecuali ada kemungkinan jauh Anda akan membutuhkannya lagi. Susun! Penting melalui JS hanya membawa Anda kembali ke pertanyaan awal.
SilverbackNet
@ SilververbackNet Sesuai pemahaman saya, Mengganti menggunakan JS lebih akurat dan biasanya berfungsi sebagai CSS dimuat secara berurutan dan JS blok jquery memuat setelah semuanya dimuat. Jadi, ini mengesampingkan perubahan yang dilakukan oleh css terlepas dari urutan css.
Manish Shrivastava
menimpa seperti ini tidak berfungsi untuk atribut gaya.
user2284570
6

Ini juga bisa membantu

td[style] {height: 50px !important;}

Ini akan mengesampingkan gaya inline apa pun

DiChrist
sumber
0

Dalam hal apapun, Anda dapat mengganti heightdengan max-height.

pasquale
sumber
-5

Saya ingin menambahkan jawaban untuk ini yang belum disebutkan, karena saya telah mencoba semua hal di atas tetapi tidak berhasil. Situasi spesifik saya adalah bahwa saya menggunakan semantic-ui, yang telah membangun !importantatribut pada elemen (sangat menjengkelkan). Saya mencoba segalanya untuk menimpanya, hanya pada akhirnya satu hal berhasil (menggunakan jquery). Itu adalah sebagai berikut:

$('.active').css('cssText', 'border-radius: 0px !important');
IWI
sumber
Ini tidak berhasil, lihat jawaban oleh Manish yang menggunakan attr('style', ...sebagai gantinya
Christophe Roussy