{"componentChunkName":"component---src-templates-post-js","path":"/html-css/css-selectory-4-urovnya/","result":{"pageContext":{"slug":"css-selectory-4-urovnya","content":"\n<p>В этой статье рассказывается про селекторы 4 уровня в CSS, которые уже можно&nbsp;<em>частично</em>&nbsp;применять в разработке, про которые ещё мало кто знает и про те, которые только ожидают часа своего всеобщего признания. Но в любом случае знание и понимание этого материала значительно упростит ваш процесс работы как в настоящем, так и в будущем.</p>\n\n\n\n<p class=\"author\"><em>Перевод статьи&nbsp;</em><a href=\"https://blog.logrocket.com/css-selectors-level-4-b5da36bcd54c\"><em>CSS selectors level 4</em></a></p>\n\n\n\n<p>Селекторы это основная часть CSS. Они дают вам возможность делать такие вещи, как например, выборка всех элементов определенного типа:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>div {\n  /* some styles to apply to all div elements */\n}</code></pre>\n\n\n\n<p>Или&nbsp;вы можете выбрать элемент, который является замыкающим дочерним элементом своего родителя:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>ul li:last-child {\n  /* some styles to apply to only the last child of a list */\n}</code></pre>\n\n\n\n<p id=\"2d72\">Конечно же они дают вам возможность делать куда более сложные вещи, например выбор всех дочерних элементов списка, кроме последнего.</p>\n\n\n\n<p id=\"271e\">По факту, есть куда больше одного способа сделать это и куда более запутанные и сложные.</p>\n\n\n\n<p id=\"f571\">Для примера, сравним этот:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>ul li {\n  /* Styles to apply to all children */\n}\nul li:last-child {\n  /* Styles to reset the previous styles because they don’t apply to the last child */\n}</code></pre>\n\n\n\n<p>С этим:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>ul li:nth-last-child(n+2) { \n  /* Styles to apply to all children except the last one */\n}</code></pre>\n\n\n\n<p><code>ul li</code>&nbsp;это примеры селекторов первого уровня.</p>\n\n\n\n<p><code>last-child</code>&nbsp;и&nbsp;<code>nth-last-child</code>&nbsp;это примеры селекторов 3-го уровня.</p>\n\n\n\n<p>Вы можете рассматривать уровни, как версии спецификаций CSS селекторов, в которых каждый уровень добавляет селекторы&nbsp;<em>“помощнее”</em>.</p>\n\n\n\n<p>В этой статье я предоставлю вам обзор последнего поколения селекторов, а именно 4 уровня, в соответствии со спецификацией Editors’s Draft на январь 2019 года, по следующим категориям:</p>\n\n\n\n<blockquote class=\"wp-block-quote\"><p></p><cite>Логические комбинации<br>Селекторы атрибутов<br>Лингвистические псевдоклассы<br>Псевдоклассы положения<br>Пользовательские псевдоклассы<br>Псевдоклассы форм ввода<br>Древовидные псевдоклассы<br>Табличные селекторы</cite></blockquote>\n\n\n\n<p id=\"ace7\">Во время написания, спецификация для селекторов 4 уровня находится в драфте. Ситуация может измениться, если они достигнут статуса официальной рекомендации и к своему сожалению, вы в итоге обнаружите, что многие селекторы либо не поддерживаются некоторыми браузерами или им нужен префикс с&nbsp;<code>:-moz-</code>&nbsp;или&nbsp;<code>:-webkit-</code>.</p>\n\n\n\n<p id=\"af49\">Для каждого селектора я дам ссылку на его&nbsp;<strong>Can I Use</strong>&nbsp;страничку, так что вы увидите какие браузеры его поддерживают (если это возможно), также дам краткое описание, пример и ссылку на Codepen, так что вы сможете попробовать его в действии (даже если он сейчас не работает, всё равно это может измениться в будущем).</p>\n\n\n\n<p id=\"25e8\">Учитывая всё вышесказанное, давайте начнем с селекторов из категории логических комбинаций.</p>\n\n\n\n<h2 id=\"2680\"><strong>Логические комбинации</strong></h2>\n\n\n\n<p id=\"9f8b\">Эта категория включает в себя селекторы, которые комбинируют другие селекторы.</p>\n\n\n\n<h3 id=\"2eb3\"><strong>:not(selector1, selector2, …)</strong></h3>\n\n\n\n<p id=\"ca0a\"><a href=\"https://caniuse.com/#feat=css-not-sel-list\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"2e6d\">Этот селектор выделяет все элементы, кроме тех, которые не подходят по селекторам из списка, который представлен в виде аргумента. К примеру:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:not(.beginning, .middle) {\n  color: red;\n}</code></pre>\n\n\n\n<p id=\"4cf1\">Сделает все p элементы у которых нет классов beginning и middle красного цвета.</p>\n\n\n\n<p id=\"1490\">Версия 3 уровня для этого селектора позволяет включить только один селектор, вместо списка из нескольких. Для примера, вышеупомянутый селектор может быть записан как:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:not(.beginning):not(.middle) {\n  color: red;\n}</code></pre>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":not pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/xMGxvY?height=265&amp;theme-id=light&amp;default-tab=css,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/xMGxvY'>:not pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"99a8\"><strong>:is(selector1, selector2, …)</strong></h3>\n\n\n\n<p id=\"9a8d\"><a href=\"https://caniuse.com/#feat=css-matches-pseudo\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"ad75\">Он выбирает элементы, которые подходят по выборке селекторов из списка аргументов. Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:is(.beginning, .middle) {\n  color: blue;\n}</code></pre>\n\n\n\n<p id=\"5a7c\">Сделает все элементы&nbsp;<code>p</code>&nbsp;у которых есть классы&nbsp;<code>beginning</code>&nbsp;и&nbsp;<code>middle</code>&nbsp;синим цветом.</p>\n\n\n\n<p id=\"37db\">Одним из самых примечательных изменений с последнего рабочего драфта является то, что селектор&nbsp;<code>:matches()</code>&nbsp;был переименован в&nbsp;<code>:is()</code>&nbsp;и убран из Safari (который был единственным браузером с его полной поддержкой), так что теперь он куда более совместимый со своей противоположностью, такой как&nbsp;<code>:not()</code>.</p>\n\n\n\n<p id=\"c929\"><code>:matches</code>&nbsp;можно применять как алиас для&nbsp;<code>:is()</code>, если нужно для обратной совместимости. Хотя,&nbsp;<code>:matches()</code>&nbsp;ранее назывался&nbsp;<code>:any()</code>, так что многие браузеры поддерживают этот псевдокласс с префиксом:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:-webkit-any(.beginning, .middle) {\n  color: blue;\n}\n\np:-moz-any(.beginning, .middle) {\n  color: blue;\n}</code></pre>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":is pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/daYRLJ?height=265&amp;theme-id=light&amp;default-tab=css,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/daYRLJ'>:is pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"c4d3\"><strong>:where(selector1, selector2, …)</strong></h3>\n\n\n\n<p id=\"1840\">На время написания, этот селектор не поддерживался ни одним браузером.</p>\n\n\n\n<p id=\"1a8a\">У него такой же синтаксис и функционал, как и у&nbsp;<code>:is()</code>, но ни сам селектор и ни какой из его аргументов влияют на его специфичность, которая всегда равна нулю.</p>\n\n\n\n<p id=\"4623\">Специфичность это&nbsp;<em>“вес”</em>&nbsp;CSS правила. Если два селектора применены к одному и тому же элементу, то выигрывает тот у которого наивысшая специфичность. Всё понятно. А если у нескольких правил одинаковая специфичность, то последнее правило в CSS будет применено к элементу.</p>\n\n\n\n<p id=\"0a98\">Этот селектор можно использовать как фильтр или для перезаписи стилей связанных с элементом.</p>\n\n\n\n<p id=\"8164\">В спецификации приводится следующий пример:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>a:not(:hover) {\n  text-decoration: none;\n}\n\nnav a {\n  /* Has no effect */\n  text-decoration: underline;\n}\n\n/* With the new :where Level 4 selector */\na:where(:not(:hover)) {\n  text-decoration: none;\n}\n\nnav a {\n  /* Should work */\n  text-decoration: underline;\n}</code></pre>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":where pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/daYzZg?height=265&amp;theme-id=light&amp;default-tab=css,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/daYzZg'>:where pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"dcee\"><strong>:has(relativeSelector1, relativeSelector2, …)</strong></h3>\n\n\n\n<p id=\"2b2c\"><a href=\"https://caniuse.com/#feat=css-has\">Поддержка браузерами</a>. На время написания, этот селектор не поддерживался ни одним браузером.</p>\n\n\n\n<p id=\"be9c\">Этот селектор берет список родственных селекторов как список аргументов. Он выделяет элемент, если любой из его родственных селекторов (в его области видимости) подходит по критерию. Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:has(strong, em) {\n  color: red;\n}</code></pre>\n\n\n\n<p>Тут всем элементам p, в которых есть&nbsp;<code>&lt;strong&gt;</code>&nbsp;или&nbsp;<code>&lt;em&gt;</code>&nbsp;теги, выставится красный свет.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":has pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/QYjmYX?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/QYjmYX'>:has pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"999b\"><strong>Селекторы атрибутов</strong></h2>\n\n\n\n<p id=\"42e8\">Эта категория включает в себя селекторы, которые работают с селекторами атрибутов.</p>\n\n\n\n<h3 id=\"08a7\"><strong>[foo=”bar” i]</strong></h3>\n\n\n\n<p id=\"4dda\"><a href=\"https://caniuse.com/#feat=css-case-insensitive\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"644c\">Этот селектор выберет тот элемент, чьё значение атрибута&nbsp;<code>foo</code>&nbsp;равно&nbsp;<code>bar</code>, вне зависимости от регистра.</p>\n\n\n\n<p id=\"e8bd\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p&#91;class=\"text\" i] {\n  color: green;\n}</code></pre>\n\n\n\n<p>Сделает зеленым всем элементы p, чей атрибут class имеет значения text, TEXT, text или другую комбинацию.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\"Case-insensitive selector\" src=\"https://codepen.io/eh3rrera/embed/pGjVEg?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/pGjVEg'>Case-insensitive selector</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"eb2c\"><strong>[foo=“bar” s]</strong></h3>\n\n\n\n<p id=\"eddf\">На время написания, этот селектор пока не поддерживался ни одним браузером.</p>\n\n\n\n<p id=\"0d4c\">Выбирает элемент, чью имя атрибута foo, точно соответствует&nbsp;<code>bar</code>, в соответствии с регистром.</p>\n\n\n\n<p id=\"8629\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p&#91;class=\"text\" s] {\n  color: green;\n}</code></pre>\n\n\n\n<p>Сделает зеленым все элементы&nbsp;<code>p</code>, у которых атрибут&nbsp;<code>class</code>&nbsp;имеет значение&nbsp;<code>text</code>&nbsp;(и не&nbsp;<code>Text</code>&nbsp;или тп).</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\"Case-sensitive selector\" src=\"https://codepen.io/eh3rrera/embed/yZYjbJ?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/yZYjbJ'>Case-sensitive selector</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"a24f\"><strong>Лингвистические псевдоклассы</strong></h2>\n\n\n\n<p id=\"a519\">Эта категория включает в себя селекторы, которые работают с лингвистическими установками, основанными на тонкостях каждого языка или правописания.</p>\n\n\n\n<h3 id=\"18fd\"><strong>:dir(ltr)</strong></h3>\n\n\n\n<p id=\"e323\"><a href=\"https://caniuse.com/#search=dir\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"ca34\">Выбирает элементы написанные слева направо, там где указана направленность написания. И напротив,&nbsp;<code>:dir(rtl)</code>&nbsp;выбирает элементы, которые написаны справа налево.</p>\n\n\n\n<p id=\"8b2b\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:dir(ltr) {\n  background-color: red;\n}</code></pre>\n\n\n\n<p>Тут фоновый цвет выставится на красный всем элементам p, написанным слева направо.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":dir(ltr) pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/GzpdwV?height=265&amp;theme-id=light&amp;default-tab=css,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/GzpdwV'>:dir(ltr) pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"2670\"><strong>:lang(zh, “*-hant”)</strong></h3>\n\n\n\n<p id=\"445d\"><a href=\"https://caniuse.com/#search=%3Alang\">Поддержка браузерами</a>. На время написания, версия 4-го уровня для этого селектора не поддерживалась ни одним браузером.</p>\n\n\n\n<p id=\"2bb5\">Выбирает элемент, отмеченный как китайский (или другой язык, просто поменяйте&nbsp;<code>zh</code>&nbsp;на нужный) или написанный традиционными китайскими символами (или любой другой системой символов, просто поменяйте&nbsp;<code>*-hant</code>&nbsp;на любой другой код символов)</p>\n\n\n\n<p id=\"1747\">На самом деле, этот селектор можно использовать с CSS2, однако, структуризация поиска по языку и разделение запятой в аргументах, являются нововведениями в селекторах 4-го уровня.</p>\n\n\n\n<p id=\"22f6\">Этот селектор может принимать список из одного языка или диапазон языков, как аргумент. Если диапазон языков содержит звездочки, то они должны быть либо экранированы&nbsp;<code>(:lang(es-\\*))</code>, либо указаны как строка&nbsp;<code>(:lang(\"es-*\"))</code>.</p>\n\n\n\n<p id=\"6450\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>p:lang(\"*-CH\") {\n  background-color: red;\n}</code></pre>\n\n\n\n<p>Выставит фоновый цвет красным, всем элементам&nbsp;<code>p</code>, в которых есть текст, написанный на одном из языков Швейцарии (<code>CH</code>&nbsp;указывает Швейцарию).</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":lang pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/YByjzp?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/YByjzp'>:lang pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"9a49\"><strong>Псевдоклассы положения</strong></h2>\n\n\n\n<p id=\"dee8\">Эта категория включает в себя селекторы, относящиеся к ссылкам.</p>\n\n\n\n<h3 id=\"f5de\"><strong>:any-link</strong></h3>\n\n\n\n<p id=\"2b92\">Пока что нет странички на&nbsp;<strong>Can I Use</strong>, но он поддерживается большинством основных браузеров.</p>\n\n\n\n<p id=\"0018\">Этот селектор выделяет все элементы, у которых есть атрибут&nbsp;<code>href</code>&nbsp;(такие как&nbsp;<code>&lt;a&gt;</code>&nbsp;или&nbsp;<code>&lt;link&gt;</code>). Другими словами, все элементы, которые подходят псевдоклассам&nbsp;<code>:link</code>&nbsp;и&nbsp;<code>:visited</code>.</p>\n\n\n\n<p id=\"3100\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>a:any-link {\n  color: red;\n}</code></pre>\n\n\n\n<p>Выдаст всем элементам a c атрибутом href, красный цвет.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":any-link pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/vbNaeJ?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/vbNaeJ'>:any-link pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"8e93\"><strong>:local-link</strong></h3>\n\n\n\n<p id=\"abe5\">На момент написания, этот селектор не поддерживается ни одним из браузеров.</p>\n\n\n\n<p id=\"7082\">Этот элемент выбирает элементы, которые ссылаются на эту же страницу. Если ссылка включает в себя фрагмент настоящей ссылки, то она тоже подпадает под селектор. Если же нет, то фрагмент части ссылки настоящего URL не рассматривается.</p>\n\n\n\n<p id=\"ad6a\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>a:local-link {\n  text-decoration: none;\n}</code></pre>\n\n\n\n<p>Этот селектор сделает все ссылки с атрибутом&nbsp;<code>href</code>, которые ссылаются на эту же страницу, без подчеркнутыми.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":local-link pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/GzpBwG?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/GzpBwG'>:local-link pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"8225\"><strong>Пользовательские псевдоклассы (или user-action псевдоклассы)</strong></h2>\n\n\n\n<p id=\"ec5c\">Это категория включает в себя селекторы для тех элементов, с которыми взаимодействует пользователь.</p>\n\n\n\n<h3 id=\"1bff\"><strong>:focus-within</strong></h3>\n\n\n\n<p id=\"1c47\"><a href=\"https://caniuse.com/#feat=css-focus-within\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"db6d\">Выбирает элементы, который либо подходят под псевдокласс&nbsp;<code>:focus</code>&nbsp;(когда элемент в фокусе), либо когда у них есть потомки, которые подходят под&nbsp;<code>:focus</code>.</p>\n\n\n\n<p id=\"4686\">Для примера, рассмотрим следующую форму:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>&lt;form>\n&lt;input type=\"text\" id=\"name\" placeholder=\"Enter your name\" />\n&lt;/form></code></pre>\n\n\n\n<p>Она добавит рамку вокруг поля ввода при фокусе.</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>form:focus-within {\n  border: 2px solid;\n}</code></pre>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":focus-within pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/BMoGWx?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/BMoGWx'>:focus-within pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"ed34\"><strong>:focus-visible</strong></h3>\n\n\n\n<p id=\"1e44\"><a href=\"https://caniuse.com/#feat=css-focus-visible\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"4635\">Выбирает элемент, если он в фокусе (как псевдокласс&nbsp;<code>:focus</code>) и браузер определяет, что фокус сделан прямо явным образом, обычно это делается с помощью кольца фокусировки (в браузерах такая штука в настройках есть).</p>\n\n\n\n<p id=\"b167\">Однако, разница с&nbsp;<code>:focus</code>&nbsp;довольно тонкая, но всё же есть.</p>\n\n\n\n<p id=\"e74b\">Если&nbsp;<code>:focus-visible</code>&nbsp;что-то выбирает, то&nbsp;<code>:focus</code>&nbsp;делает это тоже, но на самом деле это не всегда так и зависит от браузера (включена ли у него отрисовка кольца фокуса) и того, как элемент попал в фокус (мышкой или клавиатурой).</p>\n\n\n\n<p id=\"c32b\">У Firefox есть свой такой селектор, как псевдокласс&nbsp;<code>:-moz-focusring</code>.</p>\n\n\n\n<p id=\"fcce\">Для примера, в некоторых случаях, следующая стилизация:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>/* Standard Level 4 selector */\n:focus-visible {\n  background-color: lightgray;\n}\n\n/* Level 4 selector for Firefox*/\n:-moz-focusring  {\n  background-color: lightgray;\n}</code></pre>\n\n\n\n<p>Применится только к элементу, если на нем сфокусировались через клавиатурную навигацию (<em>tabbing navigation</em>).</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":focus-visible pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/KJdbMp?height=265&amp;theme-id=light&amp;default-tab=css,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/KJdbMp'>:focus-visible pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"1487\"><strong>Псевдоклассы форм ввода</strong></h2>\n\n\n\n<p id=\"4a21\">Эта категория включает в себя селекторы, которые применяются к элементам имеющем отношение к формам ввода.</p>\n\n\n\n<h3 id=\"a44d\"><strong>:read-write и :read-only</strong></h3>\n\n\n\n<p id=\"ef3d\"><a href=\"https://caniuse.com/#feat=css-read-only-write\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"c542\"><code>:read-write</code>&nbsp;выбирает элементы, чьё значение можно изменить, такие каr&nbsp;<code>&lt;input&gt;</code>&nbsp;без атрибута&nbsp;<code>readonly</code>.</p>\n\n\n\n<p id=\"c4a8\"><code>:read-only</code>&nbsp;выбирает элементы, которые в свою очередь уже нельзя изменить, например тот же&nbsp;<code>&lt;input&gt;</code>, но с атрибутом&nbsp;<code>readonly</code>.</p>\n\n\n\n<p id=\"4851\">Однако, эти селекторы не просто выбирают элементы&nbsp;<code>&lt;input&gt;</code>&nbsp;или&nbsp;<code>&lt;textarea&gt;</code>, они выбирают любой элемент, который может быть отредактирован пользователем, например как&nbsp;<code>&lt;p&gt;</code>&nbsp;с атрибутом&nbsp;<code>contenteditable&nbsp;</code>со значением&nbsp;<code>true</code>.</p>\n\n\n\n<p id=\"b9c8\">К примеру:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>:read-write {\n  background-color: lightyellow;\n}\n\n:read-only {\n  background-color: lightgray;\n}\n\n/* For Firefox */\n:-moz-read-write {\n  background-color: lightyellow;\n}\n\n:-moz-read-only {\n  background-color: lightgray;\n}</code></pre>\n\n\n\n<p>Тут фоновый цвет измениться для всех элементов, которые можно изменить и которые нельзя. На&nbsp;<code>lightyellow</code>&nbsp;и&nbsp;<code>lightgrey</code>, соответственно.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":read-write and :read-only pseudo-classes\" src=\"https://codepen.io/eh3rrera/embed/JxGXWw?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/JxGXWw'>:read-write and :read-only pseudo-classes</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"d14a\"><strong>:placeholder-shown</strong></h3>\n\n\n\n<p id=\"017b\"><a href=\"https://caniuse.com/#feat=css-placeholder-shown\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"91a9\">Этот селектор выбирает элемент ввода, который в данный момент показывает текст плейсхолдера.</p>\n\n\n\n<p id=\"5efe\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>input:placeholder-shown {\n  color: red;\n}</code></pre>\n\n\n\n<p>Выставит красный текст плейсхолдеру элемента&nbsp;<code>&lt;input&gt;</code>&nbsp;(только для самого плейсхолдера).</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":placeholder-shown pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/jdWrbp?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/jdWrbp'>:placeholder-shown pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"e697\"><strong>:default</strong></h3>\n\n\n\n<p id=\"ff5c\"><a href=\"https://caniuse.com/#feat=css-default-pseudo\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"3d1a\">Выбирает элемент, который является дефолтной опцией в группе связанных элементов. Обычно он применяется к кнопкам и выбранным спискам/меню.</p>\n\n\n\n<p id=\"ba47\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>input:default {\n  box-shadow: 0 0 2px 2px green;\n}\n\ninput:default + label {\n  color: green;\n}</code></pre>\n\n\n\n<p>Задаст зеленую тень дефолтному&nbsp;<code>&lt;input&gt;</code>&nbsp;элементу и зеленый цвет его лейблу.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":default pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/wNMWjx?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/wNMWjx'>:default pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"be59\"><strong>:indeterminate</strong></h3>\n\n\n\n<p id=\"2baf\"><a href=\"https://caniuse.com/#feat=css-indeterminate-pseudo\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"3e02\">Тут выберутся элементы, чьё значение имеет промежуточное состояние. Для примера, радио и чекбокс группы состоящие из не выбранных элементов или прогресс-бары, процент завершения которых неизвестен.</p>\n\n\n\n<p id=\"2641\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>input&#91;type=\"radio\"]:indeterminate + label {\n  color: red;\n}</code></pre>\n\n\n\n<p>Этот пример выдаст лейблам радио элементов в группе, красный цвет, в том случае, если в этой группе нет выбранных элементов.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":indeterminate pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/yZeaBL?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/yZeaBL'>:indeterminate pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"ab39\"><strong>:valid и :invalid</strong></h3>\n\n\n\n<p id=\"e574\"><a href=\"https://caniuse.com/#feat=form-validation\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"1f94\">Они выделят элементы, чьё содержимое или значение, соответственно, валидное или наоборот, в соответствии с семантикой их валидности. Если семантика не определена (или не может быть определена), то элемент и не&nbsp;<code>:valid</code>, и не&nbsp;<code>:invalid</code>.</p>\n\n\n\n<p id=\"2b07\">Пример для элемента ввода типа email:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>input:invalid {\n  color: red;\n}\n\ninput:valid {\n  color: green;\n}</code></pre>\n\n\n\n<h3 id=\"e4c3\"><strong>:in-range and :out-of-range</strong></h3>\n\n\n\n<p id=\"ccb0\"><a href=\"https://caniuse.com/#feat=css-in-out-of-range\">Поддержка браузерами</a></p>\n\n\n\n<p id=\"42b9\">Эти селекторы применяются только к элементам, которые имеют диапазон ограничений, для примера, если у них может быть указанные минимум и максимум. Если же нигде нет таких ограничений, то элемент не является и не&nbsp;<code>:in-range</code>, и не&nbsp;<code>:out-of-range</code>.</p>\n\n\n\n<p id=\"ee08\">К примеру, для&nbsp;<code>&lt;input&gt;</code>&nbsp;элемента с минимальным значением&nbsp;<code>1</code>&nbsp;и максимальным&nbsp;<code>5</code>:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>input:out-of-range {\n  color: red;\n}\n\ninput:in-range {\n  color: green;\n}</code></pre>\n\n\n\n<p>В некоторых случаях, эти селекторы будут иметь тот же эффект, что и&nbsp;<code>:valid</code>&nbsp;и&nbsp;<code>:invalid</code>.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":in-range and :out-of-range pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/RvroLN?height=265&amp;theme-id=light&amp;default-tab=css,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/RvroLN'>:in-range and :out-of-range pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"4fa4\"><strong>:required and :optional</strong></h3>\n\n\n\n<p id=\"9382\"><a href=\"https://caniuse.com/#feat=form-validation\">Поддержка браузерами для :required</a></p>\n\n\n\n<p id=\"97c5\"><a href=\"https://caniuse.com/#feat=css-optional-pseudo\">Поддержка браузерами для :optional</a></p>\n\n\n\n<p id=\"c716\">Эти селекторы применяются к элементам формы, которые соответственно, required или optional, перед отправкой формы. Элементы, которые не являются элементами форм, являются ни чем иным, как ни тем и не другим.</p>\n\n\n\n<p id=\"be66\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>input:optional {\n  color: gray;\n}\n\ninput:required {\n  color: red;\n}</code></pre>\n\n\n\n<p>Даст элементам с&nbsp;<code>required</code>&nbsp;красный цвет и опциональным элементам выдаст серый цвет.</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":required and :optional pseudo-class\" src=\"https://codepen.io/eh3rrera/embed/QYyGRQ?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/QYyGRQ'>:required and :optional pseudo-class</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"4b17\"><strong>Древовидные псевдоклассы</strong></h2>\n\n\n\n<p id=\"4973\">Эта категория включает в себя селекторы, которые основаны на информации, лежащей в древовидной структуре документа, но не может быть представлена другими селекторами, например как позиция элемента относительно его родителя.</p>\n\n\n\n<p id=\"c68e\"><a href=\"https://caniuse.com/#feat=css-nth-child-of\">Поддержка браузерами</a>&nbsp;(на момент написания, версия 4 уровня для этого селектора ничем не поддерживается).</p>\n\n\n\n<p id=\"4413\"><code>:nth-child</code>&nbsp;выбирает каждый элемент, который является N-ным дочерним элементом своего родителя.&nbsp;<code>:nth-last-child</code>&nbsp;делает то же самое, но ведёт счет с конца. Вы можете поиграться с&nbsp;<a href=\"https://css-tricks.com/examples/nth-child-tester/\">:nth тестером</a>, чтобы понять разницу и узнать больше&nbsp;<a href=\"https://drafts.csswg.org/css-syntax-3/#anb-microsyntax\">об An+B обозначениях</a>.</p>\n\n\n\n<p id=\"fcb6\">В самом начале этой статьи, я показал вам пример&nbsp;<code>:nth-last-child</code>&nbsp;и сказал, что это был селектор 3-го уровня. Однако, для 4-го уровня, этот селектор принимает опциональный&nbsp;<code>of</code>&nbsp;селектор, который отфильтровывает потомков по признаку, который подходит под этот селектор.</p>\n\n\n\n<p id=\"ad7a\">Вообще тут могут быть различия в том, как объявлен селектор. Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>li.item:nth-child(-n+2)</code></pre>\n\n\n\n<p id=\"745b\">Выберет первые два элемента&nbsp;<code>li</code>, но только если у них есть класс&nbsp;<code>item</code>.</p>\n\n\n\n<p id=\"2d6c\">Это не то же самое, что:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>:nth-child(-n+2 of li.item)</code></pre>\n\n\n\n<p id=\"70e4\">Тут выберутся первые два&nbsp;<code>&lt;li&gt;</code>&nbsp;элемента, которые имеют класс&nbsp;<code>item</code>, даже если они не первые два потомка в списке.</p>\n\n\n\n<p id=\"8388\">Попробуйте (в браузере, который поддерживает этот селектор, таком как Safari):</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":nth-child 1/2\" src=\"https://codepen.io/eh3rrera/embed/NoxgEE?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/NoxgEE'>:nth-child 1/2</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\":nth-child 2/2\" src=\"https://codepen.io/eh3rrera/embed/pGgwpG?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/pGgwpG'>:nth-child 2/2</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h2 id=\"68c0\"><strong>Табличные селекторы</strong></h2>\n\n\n\n<p id=\"1c53\">Эта категория включает селекторы, которые работают с колонками таблицы.</p>\n\n\n\n<h3 id=\"7fb9\"><strong>F | | E</strong></h3>\n\n\n\n<p id=\"dea4\">На время написания, этот селектор вообще никем и ничем не поддерживался.</p>\n\n\n\n<p id=\"51b1\">Селектор комбинирования колонок (<code>||</code>), выбирает элемент типа E, который представляет ячейку в таблице и принадлежит колонке, представленной элементом с типом F.</p>\n\n\n\n<p id=\"8954\">Для примера, рассмотрим следующую таблицу:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>&lt;table>\n  &lt;colgroup>\n    &lt;col span=\"2\">\n    &lt;col class=\"selected\">\n  &lt;/colgroup>\n  &lt;tr>\n    &lt;th>ID&lt;/th>\n    &lt;th>Description&lt;/th>\n    &lt;th>Price&lt;/th>\n  &lt;/tr>\n  &lt;tr>\n    &lt;td>1&lt;/td>\n    &lt;td>Computer&lt;/td>\n    &lt;td>$999&lt;/td>\n  &lt;/tr>\n  &lt;tr>\n    &lt;td>2&lt;/td>\n    &lt;td>Tablet&lt;/td>\n    &lt;td>$499&lt;/td>\n  &lt;/tr>\n&lt;/table></code></pre>\n\n\n\n<p>Выдаст ярко-желтый цвет ячейкам (<code>&lt;td&gt;</code>&nbsp;элементам), которые относятся к&nbsp;<code>selected</code>&nbsp;колонке (<em>price</em>).</p>\n\n\n\n<iframe height=\"265\" style=\"width: 100%;\" scrolling=\"no\" title=\"Column combinator selector\" src=\"https://codepen.io/eh3rrera/embed/xMZLQY?height=265&amp;theme-id=light&amp;default-tab=html,result\" frameborder=\"no\" loading=\"lazy\" allowtransparency=\"true\" allowfullscreen=\"true\">\n  See the Pen <a href='https://codepen.io/eh3rrera/pen/xMZLQY'>Column combinator selector</a> by Esteban Herrera\n  (<a href='https://codepen.io/eh3rrera'>@eh3rrera</a>) on <a href='https://codepen.io'>CodePen</a>.\n</iframe>\n\n\n\n<h3 id=\"5064\"><strong>:nth-col(An+B) and :nth-last-col(An+B)</strong></h3>\n\n\n\n<p id=\"2b74\">На время написания, этот селектор не поддерживается никем и ничем.</p>\n\n\n\n<p id=\"5032\">Вы можете рассматривать эти селекторы, как колоночную версию&nbsp;<code>:nth-child</code>&nbsp;и&nbsp;<code>:nth-last-child</code>.</p>\n\n\n\n<p id=\"006c\"><code>:nth-col(An+B)</code>&nbsp;выбирает элемент в гриде или таблице, который представляет собой ячейку колонки, у которой&nbsp;<em>An+B-1</em>&nbsp;колонок перед ней, с любым положительным целым числом или нулевым значением n.</p>\n\n\n\n<p id=\"333d\"><code>:nth-last-col(An+B)</code>&nbsp;выберет элемент сетки или таблицы, который представляет собой ячейку колонки, у которой&nbsp;<em>An+B-1</em>&nbsp;колонок после неё, с любым положительным или нулевым значением n.</p>\n\n\n\n<p id=\"6a14\">Для примера:</p>\n\n\n\n<pre class=\"wp-block-code css\"><code>col.nth-col(1) {\n  background-color: lightyellow;\n}\n\ncol.nth-last-col(1) {\n  background-color: lightgreen;\n}</code></pre>\n\n\n\n<p id=\"9273\">Выдаст первой колонке таблицы светло-желтый фон, а также последней колонке выдаст светло-зеленый фон.</p>\n\n\n\n<h2 id=\"d3a2\"><strong>Заключение</strong></h2>\n\n\n\n<p id=\"48f4\">Селекторы 4 уровня позволяют вам делать сложную выборку селекторами, довольно простым способом.</p>\n\n\n\n<p id=\"b5b8\">Мы сейчас покрыли большинство селекторов указанных в Editor’s Draft спецификации на январь 2019 года, однако, я оставил в покое некоторые селекторы, которые скорее всего исчезнут или изменятся, ну или если по ним вообще нет никакой информации, в том числе и о поддержки другими браузерами:</p>\n\n\n\n<p id=\"cf61\"><a href=\"https://drafts.csswg.org/selectors-4/#target-within-pseudo\">:target-within</a></p>\n\n\n\n<p id=\"0ddc\"><a href=\"https://drafts.csswg.org/selectors-4/#the-scope-pseudo\">:scope</a></p>\n\n\n\n<p id=\"fdbd\"><a href=\"https://drafts.csswg.org/selectors-4/#time-pseudos\">Временные псевдоклассы</a></p>\n\n\n\n<p id=\"f656\"><a href=\"https://drafts.csswg.org/selectors-4/#blank\">:blank</a></p>\n\n\n\n<p id=\"cd27\"><a href=\"https://drafts.csswg.org/selectors-4/#user-pseudos\">:user-invalid</a></p>\n\n\n\n<p id=\"ca3b\">Но вам определенно нужно за ними следить, так же как и за другими селекторами 4-го уровня.</p>\n","type":"html-css","date":"2021-02-02T16:49:13.000Z","acf":{"seo_desc":"В этой статье рассказывается про селекторы 4 уровня в CSS, которые уже можно частично применять в разработке, про которые ещё мало кто знает и про те, которые только ожидают часа своего всеобщего признания. ","pub_date":"2018-03-29","keywords":"css селекторы, css селекторы 4го уровня, css новые селекторы","tags":"CSS, CSS советы, CSS селекторы"},"title":"CSS селекторы 4-го уровня","id":"24790ac6-bf80-560b-b036-68445e7a41b3","excerpt":"<p>В этой статье рассказывается про селекторы 4 уровня в CSS, которые уже можно частично применять в разработке, про которые ещё мало кто знает и про те, которые только ожидают часа своего всеобщего признания. </p>\n","featured_media":{"source_url":"https://stasonmars.ru/wp/wp-content/uploads/2021/02/cssselectorzdfnks.jpg"},"interesting":[{"title":"Стандарты написания гибкого, надежного и жизнеспособного HTML c CSS","slug":"standarty-napisaniya-gibkogo-nadezhnogo-i-zhiznesposobnogo-html-s-css","type":"html-css"},{"title":"CSS селекторы 4-го уровня","slug":"css-selectory-4-urovnya","type":"html-css"},{"title":"Великолепный hover эффект с CSS переменными","slug":"velikolepnyi-hover-effect-s-css-peremennimy","type":"html-css"}]}},"staticQueryHashes":["3576131997","63159454"]}