{"componentChunkName":"component---src-templates-post-js","path":"/html-css/css-important-i-chto-my-mozhem-s-nim-podelat/","result":{"pageContext":{"slug":"css-important-i-chto-my-mozhem-s-nim-podelat","content":"\n<p>Используя&nbsp;<code>!important</code>&nbsp;вы даете максимально больше важности CSS правилу на котором его применяете. Вы можете применять его не только в таблице сталей, но и в инлайновых стилях. И кстати, если вы так делаете, то вы совершаете большую ошибку. Сейчас узнаем почему.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"700\" height=\"303\" src=\"https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_JVgiKsV02qczV8MG2gu7Ug.png\" alt=\"\" class=\"wp-image-90\" srcset=\"https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_JVgiKsV02qczV8MG2gu7Ug.png 700w, https://stasonmars.ru/wp/wp-content/uploads/2021/01/1_JVgiKsV02qczV8MG2gu7Ug-300x130.png 300w\" sizes=\"(max-width: 700px) 100vw, 700px\" /></figure>\n\n\n\n<p>Правило&nbsp;<code>!important</code>&nbsp;представлено в спецификации CSS1 с целью перезаписи буквально любых стилевых значений. Для разработчиков это куда более важный элемент, нежели для простых пользователей. Как вы уже наверное догадались, этот подход был мало связан с доступностью и поэтому пришлось его переосмыслить, но уже в CSS2.</p>\n\n\n\n<p class=\"author\"><a rel=\"noreferrer noopener\" href=\"https://pineco.de/css-important-and-what-we-can-use-for-it/?ct=t(hamail_20180615)\" target=\"_blank\"><em>Перевод статьи CSS !important and What We Can Use for It</em></a></p>\n\n\n\n<p id=\"7532\">Правило с&nbsp;<code>!important</code>&nbsp;само по себе не обращает внимания на специфику или каскадирование. Поведение зависит от контекста, но практически всё в CSS может быть перезаписано с&nbsp;<code>!important</code>.</p>\n\n\n\n<p id=\"4195\">Если вы почитаете о CSS архитектуре, то вы увидите, что никто не советует использование&nbsp;<code>!important</code>. Применяя его, по факту, вы делаете код только хуже. По большому счету это правда, так как вы полностью убиваете каскадирование и специфичность перезаписываемого стиля элемента. Если вы используете его, чтобы перезаписать правило в коде посложнее, то тут каждый человек заверит вас, что это обернется для вас кошмаром.</p>\n\n\n\n<p id=\"97d0\">И так, зная это, зачем тогда нам использовать&nbsp;<code>!important</code>? Как вы уже предположили, это удобный инструмент, но мы должны использовать его с осторожностью. Давайте посмотрим несколько возможных примеров использования, но сначала немного простого CSS.</p>\n\n\n\n<h2 id=\"3fa3\"><strong>Специфичность CSS и каскадирование</strong></h2>\n\n\n\n<p id=\"62d1\">Говоря о специфичности, мы имеем ввиду более точный селектор, как в следующем примере:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>.entry-content {\n    color: red;\n}\n\n.entry-content p {\n    color: black;\n}</code></pre>\n\n\n\n<p id=\"f3bc\">Последнее правило более точное, так как мы выбрали&nbsp;<code>&lt;p&gt;</code>&nbsp;элементы внутри&nbsp;<code>.entry-content</code>, следовательно&nbsp;<code>&lt;p&gt;</code>&nbsp;теги будут черного цвета.</p>\n\n\n\n<p id=\"e3ce\">Менее специфичные селекторы это типовые селекторы (<code>h1</code>,&nbsp;<code>p</code>,&nbsp;<code>span</code>,&nbsp;<code>div</code>), следующие за классовыми селекторами (<code>.entry-content</code>), селекторами атрибутов (<code>type='radio'</code>) и псевдоклассами(<code>:hover</code>,&nbsp;<code>:focus</code>). Самые весомые в этом случае это ID селекторы (<code>#main</code>).</p>\n\n\n\n<p id=\"76f8\">Под каскадированием мы подразумеваем естественный каскадный поток CSS. Где по важности находится правило? Чем оно ближе к концу в цепочке правил, тем больше важности оно имеет. Порядок таков: объявления из браузера, затем от пользователя, затем от автора, затем от автора с&nbsp;<code>!important</code>, затем от пользователя с&nbsp;<code>!important</code>. Если у браузера есть дефолтный стиль для тегов заголовков, то вы как автор легко можете перезаписать его с селекторами меньшей специфичности. И мы еще не упоминали наследование, которое случается довольно часто.</p>\n\n\n\n<p id=\"4b00\">Конечно же, такое каскадирование тоже работает в таблице стилей: более позднее правило с той же специфичностью побьёт предыдущее.</p>\n\n\n\n<p id=\"69f7\">Вообще понимание&nbsp;<a rel=\"noreferrer noopener\" href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity\" target=\"_blank\"><em>специфичности</em></a>&nbsp;и&nbsp;<a rel=\"noreferrer noopener\" href=\"https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Cascade_and_inheritance\" target=\"_blank\"><em>каскадирования</em></a>&nbsp;могло бы быть посложнее. Для большей информации проверьте ссылки.</p>\n\n\n\n<h2 id=\"92eb\"><strong>И так, для чего мы можем его использовать?</strong></h2>\n\n\n\n<p id=\"585a\">Безусловно&nbsp;<code>!important</code>&nbsp;имеет плохую репутацию, так как иногда для ленивых разработчиков — особенно для меня — гораздо удобнее перезаписать всё с помощью этого не совсем элегантного способа, вместо того, чтобы копаться в коде и решать реальную проблему, которая обычно кроется в плохой архитектуре.</p>\n\n\n\n<h3 id=\"a063\">Дебажиим код</h3>\n\n\n\n<p id=\"dda3\">Самый очевидный способ использовать это слово — это дебаггинг вашего кода, обычно в браузере. Временно используя !important в вашем коде, вы можете устранить некоторые конфликты и можете изолировать проблему. В Chrome, вы можете также добавить инлайновые стили, которые также переписывают необходимые авторские значения.</p>\n\n\n\n<p id=\"ca38\">Это удобно для быстрых правок и целей исследования. Если вам всё таки понадобилось это правило, то возможно вам пора заняться  рефакторингом кода.</p>\n\n\n\n<h2 id=\"0872\">Скрытие элементов</h2>\n\n\n\n<p id=\"b81f\">Есть разные способы что-нибудь спрятать от обычных пользователей, но если вы хотите точно убедиться в результате, то !important может быть полезным. Конечно, если вы работаете над своим проектом, вы знаете точно — так ли это вам нужно.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>.visually-hidden {\n    position: absolute !important;\n    height: 1px; width: 1px; \n    overflow: hidden;\n    clip: rect(1px 1px 1px 1px); \n    clip: rect(1px, 1px, 1px, 1px);\n}</code></pre>\n\n\n\n<p>В этом примере, вы заставляете элемент выставить позиционирование на абсолютное, несмотря на каскадирование и специфичность. Обратите внимание, что тут может быть несколько случаев, где этого не совсем достаточно, но это несомненно паршивый подход в плане долгосрочной перспективы.</p>\n\n\n\n<h2 id=\"3244\">Защитный CSS</h2>\n\n\n\n<p id=\"5f5c\">Это концепция в которой вы, как разработчик пытаетесь убедиться в том, что пользователь может сделать наименьшее количество ошибок во время редактирования контента. Вот например как тут, где конкретно указывается, что все изображения будут блочными элементами.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>.entry-content img {\n    display: block !important;\n}</code></pre>\n\n\n\n<p id=\"8d21\">Используя этот коды вы убедитесь в том, что пользователь по ошибке не сможет сделать изображение строчным или строчно-блочным , даже если теоретически может.</p>\n\n\n\n<h3 id=\"f1fd\">Хакнуть восхитительный WYSIWYG редактор</h3>\n\n\n\n<p id=\"8ce0\">В WordPress стандартным WYSIWYG редактором является TinyMCE, который по моему мнению не самый худший. Один из его вспомогательным атрибутов не использует инлайновые стили как CKEditor.</p>\n\n\n\n<p id=\"262e\">Когда вы редактируете контент в CKEditor, тут будут инлайновые стили, которые имеют больший вес в приоритезации, чем авторские. Что нам делать? Использовать !important и контролировать необходимое поведение.</p>\n\n\n\n<h2 id=\"6180\">Вспомогательные классы</h2>\n\n\n\n<p id=\"7fc3\">Большинство вспомогательных классов имеют низкую специфичность, особенно с всего одним классом. Этот момент может быть довольно коварным, если вы используете класы внутри контейнера, как например тут.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>.btn{\n    display: inline-block;\n    background: #3590f1;\n    padding: 0.7em 1.6em;\n    border-radius: 2px;\n    font-size: 1rem;\n    font-weight: 700;\n    color: #fff;\n    text-transform: uppercase;\n    text-decoration: none;\n\n    &amp;:hover,\n    &amp;:focus {\n        background: #5adba0;\n    }\n}\n\n.entry-content a {\n    text-decoration: underline;\n    color: #3590f1;\n}</code></pre>\n\n\n\n<p>Хотя с нашим классом&nbsp;<code>.btn</code>&nbsp;всё ок, его специфичность низка, так что простое второе правило, которое идет дальше — перепишет его свойства, в данном случае это <code>color</code> и&nbsp;<code>text-decoration</code>. Вам нужно написать простой селектор, но проблема всё же останется.</p>\n\n\n\n<p>Вы можете решить ее, использовав&nbsp;<code>!important</code>, как в этом примере:</p>\n\n\n\n<p class=\"codepen\" data-height=\"265\" data-theme-id=\"light\" data-default-tab=\"css,result\" data-user=\"adamlaki\" data-slug-hash=\"wjxbrQ\" style=\"height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;\" data-pen-title=\"CSS !important with Utility Classes\">\n  <span>See the Pen <a href=\"https://codepen.io/adamlaki/pen/wjxbrQ\">\n  CSS !important with Utility Classes</a> by Adam Laki (<a href=\"https://codepen.io/adamlaki\">@adamlaki</a>)\n  on <a href=\"https://codepen.io\">CodePen</a>.</span>\n</p>\n<script async=\"\" src=\"https://cpwebassets.codepen.io/assets/embed/ei.js\"></script>\n\n\n\n<p>После этого, вам также придется применять эту технику в модификаторах и всяких псевдо объявлениях стилей.</p>\n\n\n\n<h2 id=\"f826\">БЭМ метод</h2>\n\n\n\n<p id=\"fa5e\">БЭМ это тот метод, который основывается низкой специфичности и иногда из-за этого может вызывать некоторые неприятности со стилями. Почти все селекторы имеют один класс. Я даже не знаю сколько раз мне надо было рефакторить код, созданный по этой технике. Конечно, у вас есть и свои решения описанных проблем, но в следующий раз может вы тоже будете использовать&nbsp;<code>!important</code>.</p>\n","type":"html-css","date":"2021-01-13T15:06:02.000Z","acf":{"seo_desc":"Что такое правило !important в CSS и что с ним делать","pub_date":"2018-06-17","keywords":"CSS !important,  что делать с CSS !important, !important","tags":"CSS, CSS советы, CSS important"},"title":"CSS !important и что мы можем с ним поделать","id":"6c8548b2-30da-5cae-83cc-5bc5692ea681","excerpt":"<p>Используя !important вы даете максимально больше важности CSS правилу на котором его применяете. Вы можете применять его не только в таблице сталей, но и в инлайновых стилях. И кстати, если вы так делаете, то вы совершаете большую ошибку. Сейчас узнаем почему.</p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/01/fkdjsbjfkhbdsjhdbsjkf.jpg"},"interesting":[{"title":"Стандарты написания гибкого, надежного и жизнеспособного HTML c CSS","slug":"standarty-napisaniya-gibkogo-nadezhnogo-i-zhiznesposobnogo-html-s-css","type":"html-css"},{"title":"CSS !important и что мы можем с ним поделать","slug":"css-important-i-chto-my-mozhem-s-nim-podelat","type":"html-css"},{"title":"CSS селекторы 4-го уровня","slug":"css-selectory-4-urovnya","type":"html-css"}]}},"staticQueryHashes":["3576131997","63159454"]}