Я ненавижу их, это противоречит каскадной природе CSS, и если вы не используете их осторожно, вы в конечном итоге добавляете больше !important
.
Но я хочу знать, это плохо для производительности?
РЕДАКТИРОВАТЬ
Из (быстрых) ответов я могу сделать вывод, что это не окажет (существенного) влияния на производительность. Но это приятно знать, даже если это всего лишь дополнительный аргумент для обескураживания других;).
EDIT 2
BoltClock указал, что если есть 2 !important
объявления, спецификации говорят, что он выберет наиболее конкретную.
css
performance
janw
источник
источник
!important
правила.Ответы:
Это не должно иметь никакого влияния на производительность на самом деле. Увидев анализатор CSS Firefox в,
/source/layout/style/nsCSSDataBlock.cpp#572
и я думаю, что это актуальная процедура, обрабатывающая перезапись правил CSS.это просто кажется простой проверкой «важности».
Также комментарии на
source/layout/style/nsCSSDataBlock.h#219
От: http://taligarsiel.com/Projects/howbrowserswork1.htm#CSS_parsing
Теперь вы можете легко увидеть, что в случае описанной выше объектной модели синтаксический анализатор может легко пометить правила, на которые влияют
!important
, без особых затрат. Ухудшение производительности не является хорошим аргументом против!important
.Тем не менее, ремонтопригодность требует успеха (как уже упоминалось в других ответах), что может быть вашим единственным аргументом против них.
источник
!important
правил, специально оптимизированных? Я так не думаю, но в этом трудно быть уверенным; директория layout / style в Firefox - это 80000 строк кода.Я не думаю, что
!important
это изначально плохо с точки зрения того, насколько быстро браузер соответствует правилам (он не является частью селектора, а только частью объявления)Однако, как уже было сказано, это снизит удобство сопровождения вашего кода и, следовательно, может привести к неоправданному увеличению его размера из-за будущих изменений. Использование
!important
также может снизить производительность разработчика.Если вы действительно требовательны, вы также можете сказать, что
!important
добавляет 11 дополнительных байтов к вашему CSS-файлу, это не так уж и много, но я думаю, если у вас!important
в таблице стилей достаточно много, это может сложиться.Только мои мысли, к сожалению, я не смог найти никаких ориентиров относительно того, как это
!important
может повлиять на производительность.источник
!important
имеет свое место. Доверься мне в этом. Это спасло меня много раз и часто более полезно в качестве краткосрочного решения, прежде чем можно будет найти более длинный и изящный метод решения вашей проблемы.Однако, как и большинство вещей, им злоупотребляют, но нет необходимости беспокоиться о «производительности». Могу поспорить, что один маленький GIF размером 1x1 имеет больший прирост производительности на веб-странице, чем!
Если вы хотите оптимизировать свои страницы, есть еще много важных маршрутов;);)
источник
За кулисами происходит то, что, когда ваш CSS обрабатывается, браузер читает его, встречает
!important
атрибут, и браузер возвращается, чтобы применить стили, определенные!important
. Этот дополнительный процесс может показаться небольшим дополнительным шагом, но если вы обслуживаете много запросов, то вы снизите производительность. (Источник)Мышление разработчика при использовании
!important
:!important
да .... теперь работает нормально.Однако использовать его не очень хорошо
!important
только потому, что мы плохо справились с CSS. Это создает много проблем проектирования - которые хуже, чем проблемы производительности - но также заставляет нас использовать много дополнительных строк кода, так как мы переопределяем другие свойства,!important
и наш CSS становится загроможденным бесполезным кодом. Вместо этого мы должны сначала очень хорошо управлять CSS, и не позволять свойствам перекрывать друг друга.Мы можем использовать
!important
. Но используйте его экономно и только тогда, когда другого выхода нет.источник
Я согласен с вами не использовать его, потому что это плохая практика, независимо от производительности. На этих основаниях я бы избегал использования
!important
везде, где это возможно.Но по вопросу производительности: нет, это не должно быть заметно. Это может иметь какой-то эффект, но оно должно быть настолько крошечным, что вы никогда не заметите этого, и вам не следует об этом беспокоиться.
Если он достаточно важен, чтобы его можно было заметить, то в вашем коде, скорее всего, есть большие проблемы, чем просто
!important
. Простое использование обычного синтаксического элемента основных языков, которые вы используете, никогда не будет проблемой производительности.Позвольте мне ответить на ваш вопрос ответным вопросом в ответ; угол, который вы, вероятно, не рассматривали: какой браузер вы имеете в виду
Каждый браузер, очевидно, имеет свой собственный движок рендеринга со своими оптимизациями. Теперь возникает вопрос: каковы последствия для производительности в каждом браузере? Возможно,
!important
плохо работает в одном браузере, но действительно хорошо в другом? И, возможно, в следующих версиях все будет наоборот?Я предполагаю, что моя точка зрения заключается в том, что мы, как веб-разработчики, не должны думать (или должны думать) о влиянии на производительность отдельных синтаксических конструкций языков, которые мы используем. Мы должны использовать эти синтаксические конструкции, потому что они являются правильным способом достижения того, что мы хотим сделать, а не из-за того, как они работают.
Вопросы производительности следует задавать в сочетании с использованием профилировщиков для анализа того, где находятся точки в вашей системе. Исправьте вещи, которые действительно замедляют вас в первую очередь. Почти наверняка вам придется решить гораздо более серьезные проблемы, прежде чем вы перейдете на уровень отдельных конструкций CSS.
источник
Это заметно не влияет на производительность. Это, однако, снижает удобство сопровождения вашего кода и, следовательно, может ухудшить производительность в долгосрочной перспективе.
источник
Раньше
!important
мне приходилось использовать несколько раз, и я лично не заметил заметного снижения производительности при его использовании.В качестве примечания см. Ответ на этот вопрос стека по причине, которую вы, возможно, захотите использовать
!important
.Также я упомяну кое-что, что все остальные не упомянули.
!important
это единственный способ переопределить встроенную CSS, за исключением написания функции JavaScript (которая повлияет на вашу производительность, хотя бы чуть-чуть). Так что это может сэкономить вам некоторое время, если вам нужно переопределить встроенный CSS.источник
хм ... важно или !! важно?
Давайте пройдем этот шаг за шагом:
Так что, я думаю, вы хотите, чтобы!
и как @ryan упоминает ниже, единственный способ переопределить встроенный CSS и избегать использования JavaScript ... так что еще один способ избежать ненужного снижения производительности
хм ... оказывается, что важно важно
а также,
Так что, думаю, использование! Важный может сделать разработчиков счастливыми, и я думаю, что это очень важно : D
источник
!important
объявлений. Браузер должен будет проверить их все. Итак, вернемся к шагу 1, правда.Я не могу предвидеть
!important
препятствие производительности, по сути, по сути. Если, однако, ваш CSS пронизан!important
, это означает, что вы перевыполнили селекторы и слишком конкретны, и у вас закончились родители или квалификаторы, чтобы добавить специфичность. Следовательно, ваш CSS будет становиться раздутой (что будет препятствовать производительности) и трудно поддерживать.Если вы хотите , чтобы написать эффективный CSS , то вы хотите быть только в качестве конкретного , как вы должны быть , и написать модульный CSS . Рекомендуется воздерживаться от использования идентификаторов (с хэшами), цепочек селекторов или квалифицированных селекторов.
Идентификаторы с префиксом
#
в CSS очень специфичны, так что 255 классов не будут переопределять идентификатор (fiddle by: @Faust ). У ID тоже есть проблема с более глубокой маршрутизацией, они должны быть уникальными, это означает, что вы не можете повторно использовать их для дублирующих стилей, поэтому вы в конечном итоге пишете линейный CSS с повторяющимися стилями. Последствия этого будут варьироваться от проекта к проекту, в зависимости от масштаба, но ремонтопригодность сильно пострадает, а в крайних случаях - и производительность.Как вы можете добавить специфичность без
!important
, цепочки, квалификации или идентификаторов (а именно#
)HTML
CSS
JSFiddle
Хорошо, так как это работает?
Первый и второй примеры работают одинаково, первый буквально является классом, а второй - селектором атрибутов. Селекторы классов и атрибутов имеют одинаковую специфику.
.eg1/2-bar
не наследует свой цвет,.eg1/2-foo
потому что у него есть собственное правило.Третий пример выглядит как квалификатор или цепочка селекторов, но это не так. Цепочка - это когда вы добавляете префиксы к родителям, предкам и т. Д .; это добавляет специфичности. Квалификация похожа, но вы определяете элемент, к которому применяется селектор. квалификация:
ul.class
и цепочка:ul .class
Я не уверен, что вы бы назвали эту технику, но поведение является преднамеренным и задокументировано W3C
Что происходит, когда специфика между двумя правилами идентична?
Как указал @BoltClock , если существует несколько! Важных объявлений, то спецификация диктует, что наиболее конкретное должно иметь приоритет.
В приведенном ниже примере, как
.foo
и.bar
имеют одинаковую специфичность, поэтому поведение fallsback к каскадным природе CSS, в результате чего последнее правило , объявленной в CSS претензий очередностью т.е..foo
.HTML
CSS
JSFiddle
источник