Как переопределить! Важно?

250

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

td {height: 100px !important}

Есть ли способ, которым я могу переопределить это?

user1444027
источник
3
Вы !importantтоже пытались использовать ? Если ваш CSS-лист определен после исходного шаблона, он должен хорошо работать.
Петр Янечек
1
Какой лист будет последним, ваш или шаблон?
j08691
68
Вот почему !importantсчитается вредным.
Спадли
9
Самый мощный способ выглядит так: td [style] {height: 110px! Important; }. он действует так, как будто вы внедрили стиль, встроенный в 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. Например, переопределение в стиле браузера или сайта из скрипта Stylish, AdBlock или uBlock. Или когда у вас нет достаточно простого доступа к базовому CSS, который может быть очень сложным, распространяться по многим файлам и изменяться со временем (и может также использоваться !important). Как и любой инструмент, положительный или отрицательный потенциал зависит от того, как вы его используете. Люди должны перестать быть обезьяньими, когда такие вещи или goto / eval / globals / etc. упоминаются. Можно также сказать «избегать WordPress» или «избегать CSS», потому что вероятность «испортить вещи» слишком велика.
Beejor
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>

mariomc
источник
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;}

Надеюсь, это поможет!!!

KM123
источник
два !importantможно переопределить, переопределив .old-class-name {бла бла бла} как .old-class-name.overrided {бла бла бла} в <style></style>теге над компонентом, для меня это работа
Тарек Каладжи
11

Переопределить с помощью JavaScript

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

Работал на меня.

Маниш Шривастава
источник
Я думал, что встроенные стили всегда имеют приоритет перед родителями! флаг.
Джошуа Рамирес
3
@JoshuaRamirez Нет, на самом деле они не отменяют важный флаг, если только вы не вставили важный флаг!
Cam
1
Если вы собираетесь использовать JS, вы также можете просто полностью удалить элемент, если только не существует удаленной возможности, что он вам понадобится снова. Stacking! Важный через JS просто возвращает вас к первоначальному вопросу.
SilverbackNet
@SilverbackNet Насколько я понимаю, переопределение с использованием JS является более точным и обычно работает, когда CSS загружается последовательно, а JS-блок JS загружается после загрузки всего. Таким образом, он отменяет изменения, сделанные css, независимо от последовательностей css.
Маниш Шривастава
переопределение как это не работает для атрибутов стиля.
user2284570
6

Это тоже может помочь

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

Это заменит любой встроенный стиль

DiChrist
источник
0

В любом случае вы можете переопределить heightс помощью max-height.

Pasquale
источник
-5

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

$('.active').css('cssText', 'border-radius: 0px !important');
IWI
источник
Это не работает, см. Ответ Маниша, который использует attr('style', ...вместо этого
Кристоф Русси