Як перекрити! Важливо?


250

Я створив спеціальний аркуш стилів, який замінює оригінальний CSS для мого шаблону Wordpress. Однак на моїй сторінці календаря оригінальний CSS має висоту кожної комірки таблиці з !importantдекларацією:

td {height: 100px !important}

Чи є якийсь спосіб я це перекрити?


3
Ви також намагалися використовувати !important? Якщо ваш аркуш CSS визначений за оригінальним шаблоном, він повинен добре працювати.
Петро Янечек

1
Який аркуш останній, ваш або шаблон?
j08691

67
Ось чому !importantвважається шкідливим.
Спудлі

8
Найпотужніший спосіб такий: td [стиль] {висота: 110px! Важливо; }. він діє так, як якщо б ви ввели стиль, вкладений в HTML, тому що ви застосовуєте стилі до фактичного атрибуту стилю тегу.
DMTintner

Відповіді:


352

Переосмислення важливого модифікатора!

  1. Просто додайте ще одне правило CSS за допомогою !importantта надайте селектору більш високу специфіку (додавання додаткового тегу, ідентифікатора чи класу до селектора)
  2. додайте правило CSS з тим самим селектором пізніше, ніж існуюче (у нічиїх виграє останній визначений).

Деякі приклади з більш високою специфічністю (перший - найвищий / переорієнтований, третій - найнижчий):

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

Або додайте той самий селектор після наявного:

td {height: 50px !important;}

Відмова від відповідальності:

Це майже ніколи не корисна ідея !important. Це погана інженерія творцями шаблону WordPress. У вірусному відношенні він змушує користувачів шаблону додавати власні !importantмодифікатори, щоб перекрити його, і це обмежує можливості переосмислення його через JavaScript.

Але корисно знати, як це перекрити, якщо іноді доведеться.


7
Я знаю, що це трохи на старій стороні відповідей, але чи можете ви додати коментар, що це надзвичайно поганий спосіб написання вашої CSS (або заявіть, чому це прийнятно, якщо ви не згодні)? Я бачив, як люди посилаються на цю відповідь ... :)
ZenMaster

Чудова відповідь. Я згоден, це безлад. Це змушує мене хакнути навколо їхнього злому, потім когось зламати навколо моєї хаки тощо. У моєму випадку я маю справу з шаблонами, які десь витягують їх CSS з бази даних. Я перебираю дамп БД, і він показує, що він походить від 1 МБ блоку json. Мені не дуже корисно знаходити, де це змінити, змушуючи мене додавати CSS до файлу коду, як це слід зробити, за винятком цих неприємних хак.
Джош Рібакофф


може бути хорошою ідеєю додати ідентифікатор тегів, навіть якщо він уповільнює css. Просто довелося виправити туди, де мені довелося ввести div # header.class {style:; } для того, щоб це зайняло ... дуже дратує
Sparatan117,

Для цього є корисне використання !important. Як і перегляд стилю для веб-переглядача чи веб-сайту, який переглядає сценарій Стильний, AdBlock або uBlock. Або коли у вас немає досить простого доступу до базового CSS, який може бути дуже складним, поширюватись через багато файлів і змінюватися з часом (а також може використовувати !important). Як і будь-який інструмент, позитивний чи негативний потенціал ґрунтується на тому, як ви його використовуєте. Людям потрібно припиняти мавпа, коли подібні речі або goto / eval / globals / тощо. згадуються. Можна також сказати "уникати WordPress" або "уникати CSS", оскільки потенціал для "зіпсувати речі" занадто великий.
Bejjor

30

Використовувати їх !importantслід лише у тому випадку, коли у вашому аркуші стилів є селектори із суперечливою специфікою .

Але навіть якщо ви маєте суперечливу специфіку, краще створити для винятку більш конкретний селектор. У вашому випадку краще мати classсвій HTML, який ви можете використовувати для створення більш конкретного селектора, який не потребує !importantправила.

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

Я особисто ніколи не використовую !importantу своїх таблицях стилів. Пам'ятайте, що C у CSS призначений для каскадування. Використання !importantпорушить це.


17
Це не правда. !importantПравило в таблиці стилів буде перекривати нормальне правило в styleтезі, наприклад. Однак у деяких ситуаціях виявиться, що воно перекриває більш конкретне правило. Наприклад, якщо ви встановите font-size: 24pt !importantON body, ви можете перевизначити його з font-size: 12ptна p. Це відбувається тому , що ви не скасовуючи !importantправило, ви скасовуючи неявне font-size: inheritON p.
meustrus

23

Відмова: Уникайте! Важливо за будь-яку ціну.

Це брудний, брудний злом, але ви можете змінити важливе, без важливого значення, використовуючи (нескінченно циклічну або дуже довготривалу) анімацію у власність, на яку ви намагаєтеся замінити імпортерів.

@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>


2
потенційно напружують процесор користувача
Беррі Цакала

2
Здається, цей трюк вже не працює. У Firefox 78 та Chrome 83 коробка все ще пофарбована в червоний колір.
Енді Пан

13

Гаразд, ось короткий урок про важливість CSS. Сподіваюся, що нижче допоможе!

Перш за все, кожну частину стилів називають зважуючою, тому чим більше у вас є елементів, які стосуються цього стилю, тим важливішим є. Наприклад

#P1 .Page {height:100px;}

важливіше ніж:

.Page {height:100px;}

Тож при використанні важливого, в ідеалі це слід використовувати будь-коли, коли це дійсно потрібно. Отже, щоб перекреслити декларацію, зробіть стиль більш конкретним, але також із переоформленням. Дивись нижче:

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

Я сподіваюся, що це допомагає !!!


два !importantможна змінити, перезначивши .old-class-name {bla bla bla} як .old-class-name. overrided {bla bla bla} в <style></style>тезі над компонентом, це для мене працює
Tarek Kalaji

11

Заміна за допомогою JavaScript

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

Працювали для мене.


Я думав, що стилі вбудовування завжди переважають важливе значення для батьків! прапор.
Джошуа Рамірес

3
@JoshuaRamirez Ні, вони насправді не перекреслюють важливий прапор, якщо ви також не поставите важливий прапор на черзі
Cam

1
Якщо ви збираєтесь використовувати JS, ви можете також повністю видалити елемент, якщо тільки не існує віддаленої можливості, він вам знову знадобиться. Важлива укладка! Важлива через JS просто повертає вас до початкового питання.
SilverbackNet

@SilverbackNet Згідно з моїм розумінням, переосмислення використання JS є більш точним і, як правило, працює як завантаження CSS послідовно, так і блокування блоку JS jquery після завантаження всього. Отже, він переосмислює зміни, виконані css незалежно від послідовностей css.
Маніш Шрівастава

подібне переосмислення не працює для атрибутів стилю.
користувач2284570

6

Це теж може допомогти

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

Це змінить будь-який стиль інлайнера


0

У будь-якому випадку, ви можете перевизначити heightз max-height.


-5

Я хотів би додати відповідь на це, про яку не згадувалося, оскільки я намагався все вищезазначене безрезультатно. Моя конкретна ситуація полягає в тому, що я використовую seantic-ui, який вбудував !importantатрибути на елементи (вкрай дратує). Я спробував усе, щоб це перекрити, тільки врешті-решт одна справа спрацювала (використовуючи jquery). Це так:

$('.active').css('cssText', 'border-radius: 0px !important');

Це не працює, див. Відповідь Маніша, який використовує attr('style', ...натомість
Крістоф Руссі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.