Not css: 🤷🏽♀️ Page not found | MDN Web Docs
Содержание
Псевдокласс отрицания :not(селектор) | CSS справочник
CSS селекторы
Значение и применение
Селектор :not() или псевдокласс отрицания, позволяет выбрать элементы, или селекторы отличные от указанных.
Что нельзя использовать с псевдоклассом :not():
- Использовать в одном селекторе несколько псевдоклассов :not().
- Использовать с псевдоэлементами (::first-letter, ::first-line и так далее).
- Нельзя использовать с селекторами потомков (например, div ul a).
- Использовать в групповых селекторах (комбинации из селекторов).
Поддержка браузерами
CSS синтаксис:
:not(селектор) { блок объявлений; }
Версия CSS
CSS3
Пример использования
Давайте рассмотрим пример в котором по разному стилизуем изображения. Допустим у нас есть изображения фиксированного размера со следующими значениями:
img { /* выбираем все изображения */ width: 100px; /* ширина элемента в пикселях */ height: 100px; /* высота элемента в пикселях */ }
Создадим селектор класса .photo и применим его к необходимым изображениям, чтобы они получили оранжевую границу.
.photo { /* выбираем все элементы с классом photo */ border: 2px solid orange; /* сплошная граница размером 2 пикселя оранжевого цвета */ }
Перед Вами стоит задача изменить стиль для всех изображений (предположим, что их сотни), но при этом у Вас ограниченное количество времени и необходимо сделать так, чтобы эти изменения затронули изображения с классом .photo. Для этого Вам необходимо создать селектор совместно с псевдоклассом отрицания:
img:not(.photo) { /* выбираем все изображения, которые не имеют класса photo */ border: 2px dashed green; /* пунктирная граница размером 2 пикселя зеленого цвета */ }
Всё вместе и результат:
<!DOCTYPE html> <html> <head> <meta charset = "UTF-8"> <title>Псевдокласс отрицания :not()</title> <style> img { /* выбираем все изображения */ width: 100px; /* ширина элемента в пикселях */ height: 100px; /* высота элемента в пикселях */ } .photo { /* выбираем все элементы с классом photo */ border: 2px solid orange; /* сплошная граница размером 2 пикселя оранжевого цвета */ } img:not(.photo) { /* выбираем все изображения, которые не имеют класса photo */ border: 2px dashed green; /* пунктирная граница размером 2 пикселя зеленого цвета */ } </style> </head> <body> <img src = "nich.jpg" alt = "nich" class = "photo"> <img src = "nich.jpg" alt = "nich" class = "photo"><br> <img src = "nich.jpg" alt = "nich"> <img src = "nich.jpg" alt = "nich"> <img src = "nich.jpg" alt = "nich"> </body> </html>
Как вы можете заметить на изображении ниже, мы справились с поставленной задачей и стилизовали с использованием псевдокласса отрицания :not() все изображения, отлично от изображений с классом photo:
Пример использования псевдокласса отрицания :not() в CSS.CSS селекторы
Псевдокласс :not | CSS | WebReference
Псевдокласс :not задаёт правила стилей для элементов, которые не содержат указанный селектор.
Синтаксис
Селектор:not(<Селектор>) { ... }
В качестве селектора могут указываться единичные псевдоклассы, теги, идентификаторы, классы и селекторы атрибутов. Нельзя использовать псевдокласс :not (конструкция :not(:not(…)) запрещена) и псевдоэлементы.
Обозначения
Описание | Пример | |
---|---|---|
<тип> | Указывает тип значения. | <размер> |
A && B | Значения должны выводиться в указанном порядке. | <размер> && <цвет> |
A | B | Указывает, что надо выбрать только одно значение из предложенных (A или B). | normal | small-caps |
A || B | Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. | width || count |
[ ] | Группирует значения. | [ crop || cross ] |
* | Повторять ноль или больше раз. | [,<время>]* |
+ | Повторять один или больше раз. | <число>+ |
? | Указанный тип, слово или группа не является обязательным. | inset? |
{A, B} | Повторять не менее A, но не более B раз. | <радиус>{1,4} |
# | Повторять один или больше раз через запятую. | <время># |
Пример
<!DOCTYPE html>
<html>
<head>
<meta charset=»utf-8″>
<title>not</title>
<style>
input:not([type=»submit»]) {
border: 1px solid #ccc;
padding: 3px;
}
</style>
</head>
<body>
<form action=»handler.php»>
<p>Ваше имя: <input name=»user»></p>
<p>Прилагаемый файл: <input type=»file» name=»file»></p>
<p><input type=»submit» value=»Отправить»></p>
</form>
</body>
</html>
В данном примере стиль применяется ко всем элементам <input> за исключением того, в параметрах которого установлено type=»submit» (кнопка «Отправить»). Результат примера показан на рис. 1.
Рис. 1. Результат использования псевдокласса :not
Спецификация
Каждая спецификация проходит несколько стадий одобрения.
- Recommendation (Рекомендация) — спецификация одобрена W3C и рекомендована как стандарт.
- Candidate Recommendation (Возможная рекомендация) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
- Proposed Recommendation (Предлагаемая рекомендация) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
- Working Draft (Рабочий проект) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
- Editor’s draft (Редакторский черновик) — черновая версия стандарта после внесения правок редакторами проекта.
- Draft (Черновик спецификации) — первая черновая версия стандарта.
Браузеры
В таблице браузеров применяются следующие обозначения.
- — свойство полностью поддерживается браузером со всеми допустимыми значениями;
- — свойство браузером не воспринимается и игнорируется;
- — при работе возможно появление различных ошибок, либо свойство поддерживается лишь частично, например, не все допустимые значения действуют или свойство применяется не ко всем элементам, которые указаны в спецификации.
Число указывает версию браузера, начиная с которой свойство поддерживается.
Автор и редакторы
Автор: Влад Мержевич
Последнее изменение: 31.08.2017
Редакторы: Влад Мержевич
CSS псевдокласс отрицания: not() для родительских/предковых элементов
Это сводит меня с ума:
HTML:
<div><h2>Hello World!</h2></div>
CSS:
*:not(div) h2 { color: #900; }
Разве это не гласит: «выберите все элементы h2
, у которых есть предок, который не является элементом div
…?» таким образом, «Hello World!» не должен быть окрашен в красный цвет, но он все еще есть.
Для вышеприведенного markup добавление дочернего комбинатора работает:
*:not(div) > h2 { color: #900; }
Но не влияет на элемент h2
, если он не является дочерним элементом элемента div
. Например:
<div><article><h2>Hello World!</h2></article></div>
Вот почему я хотел бы указать элемент h2
как потомок, а не как потомок элемента div
. Кто-нибудь?
html
css
css-selectors
Поделиться
Источник
charles
16 августа 2011 в 19:49
2 ответа
- CSS псевдокласс отрицания не работает
Я слишком многого прошу от этого псевдо-отрицания. У меня есть такая структура HTML: <div> <div class=item></div> <div class=item></div> <div class=item></div> <div class=item></div> <div class=item></div> </div> В CSS, у…
- CSS общий сиблинг-комбинатор (~) не работает с псевдоклассом отрицания (: not)
У меня есть список контактов, который генерируется как неупорядоченный список с атрибутами HTML5 data , назначенными каждому элементу списка. Значения атрибутов data являются одиночными буквами для целей алфавитизации. Я не могу контролировать markup, который генерируется, но мне нужно вставить…
88
Разве это не означает: «Выберите все элементы
h2
, у которых есть предок, который не является элементомdiv
…?»
Оно делает. Но в типичном документе HTML у каждого h2
есть по крайней мере два предка, которые не являются элементами div
, и эти предки не что иное, как body
и html
.
Это проблема с попыткой фильтровать предков с помощью :not()
: она просто не работает надежно, особенно когда :not()
не квалифицируется каким-либо другим селектором, таким как селектор типов или селектор классов, например .foo:not(div)
. Вам будет гораздо проще просто применить стили ко всем элементам h2
и переопределить их с помощью div h2
.
В селекторах 4 :not()
был расширен , чтобы принимать полные комплексные селекторы, содержащие комбинаторы, включая комбинатор-потомок. Будет ли это реализовано в быстром профиле (и, следовательно, CSS), еще предстоит проверить и подтвердить, но как только это будет реализовано, вы сможете использовать его для исключения элементов с определенными предками. Из-за того, как работают селекторы, отрицание должно выполняться на самом элементе, а не на предке, чтобы работать надежно, и поэтому синтаксис будет выглядеть немного иначе:
h2:not(div h2) { color: #900; }
Любой, кто знаком с jQuery, быстро заметит, что этот селектор работает в jQuery сегодня . Это одно из многих различий между селекторами 3 :not()
и jQuery :not()
, которые Селекторы 4 стремятся исправить.
Поделиться
BoltClock
16 августа 2011 в 19:52
18
Элемент <html>
не является элементом <div>
. Элемент <body>
не является элементом <div>
.
Таким образом, условие «имеет предка, который не является <div>
» будет справедливо для всех элементов.
Если вы не можете использовать селектор >
(дочерний), я не думаю, что вы сможете сделать то, что пытаетесь сделать, — это действительно не имеет смысла. Во втором примере <article>
не является div, так что это тоже соответствует *:not(div)
.
Поделиться
RichieHindle
16 августа 2011 в 19:53
Похожие вопросы:
Существует ли противоположный псевдокласс CSS для: hover?
Есть ли псевдокласс в CSS для указания :not(:hover) Или это единственный способ указать элемент, который не зависает? Я просмотрел несколько ссылок CSS3 и не вижу никакого упоминания о псевдоклассе…
Увеличивает ли псевдокласс: not специфичность селектора?
Я читал на css трюках, что: не следует добавлять дополнительную специфику. Но, похоже, так оно и есть? https://css-tricks.com/almanac/selectors/n/not / Специфика псевдокласса: не псевдокласс — это…
:имеет CSS псевдокласс в Nokogiri
Я ищу псевдокласс :has в Нокогири . Он должен работать точно так же, как селектор jQuery has . Например: <li><h2><a href=dfd>ex1</a></h2><span…
CSS псевдокласс отрицания не работает
Я слишком многого прошу от этого псевдо-отрицания. У меня есть такая структура HTML: <div> <div class=item></div> <div class=item></div> <div…
CSS общий сиблинг-комбинатор (~) не работает с псевдоклассом отрицания (: not)
У меня есть список контактов, который генерируется как неупорядоченный список с атрибутами HTML5 data , назначенными каждому элементу списка. Значения атрибутов data являются одиночными буквами для…
CSS специфичность: not() псевдокласс
У меня есть этот маленький HTML: <div id=column> <div class=ticker> <ul> <li>Item 1</li> </ul> </div> </div> Для элементов ul вне класса .ticker , но…
CSS псевдокласс для элементов без текста
Существует ли псевдокласс CSS для элементов без текстовых узлов, подобных этому: div:nocontent { display: none; } Я знаю, что существует псевдокласс :empty , но то, что я хочу, должно игнорировать…
Что происходит, когда браузер не поддерживает псевдокласс CSS?
Что произойдет, если браузер не поддерживает псевдокласс CSS, например :dir ? Например: html:dir(rtl) { color: red; } Будут ли браузеры просто игнорировать это правило, если они не понимают…
CSS: использование отрицания на * всех элементах
Я хочу выбрать все <img> элементов, которые находятся внутри <article> , а не внутри <figure> Следующие 2: Как создать правило css для всех элементов, кроме одного класса?…
CSS псевдокласс типа: пустой , но также игнорирует скрытые дочерние элементы
Псевдокласс :empty представляет любой элемент, у которого вообще нет потомков. Существует ли подобный псевдокласс, представляющий любой элемент, не имеющий видимых дочерних элементов (игнорируя…
Как работает в css псевдокласс not?
От автора: всем привет. Сегодня мы с вами рассмотрим достаточно специфичную тему. А именно, как работает в css псевдокласс not. Возможно, многие из вас вообще ничего не знают о нем, но тем не менее данный псевдокласс иногда очень помогает при верстке. Подробно суть работы с ним рассмотрим сейчас.
Вообще как выглядит выбор элементов в css? Вы прописываете какой-либо селектор и таким образом происходит выбор. Например: p{} – выберет все абзацы; table{} – выберет все таблицы;
И так далее. Так вот, псевдокласс not работает наоборот – он позволяет не выбрать какой-либо элемент. Сам по себе псевдокласс применять нет смысла, а только в связке с другими селекторам. Not позволяет как бы исключить элемент из выбора. Например, выбрать все списки, кроме какого-то одного.
Пример работы псевдокласса not я сейчас попробую написать. Итак, есть три абзаца, в каждом есть какой-то текст.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
<p>Абзац 1</p>
<p>Абзац 2</p>
<p class = «p3»>Абзац 3</p>
<p>Абзац 1</p> <p>Абзац 2</p> <p class = «p3»>Абзац 3</p> |
Как видите, третьему абзацу мы дали стилевой класс. Допустим, вы хотите сделать цвет текста во всех абзацах, кроме одного – зеленым. Пишем вот так:
p:not(.p3){
color: green;
}
p:not(.p3){ color: green; } |
Теперь все, абсолютно все абзацы будут зелеными, кроме тех, у которых есть стилевой класс p3. Стилевой класс мы задали просто для того, чтобы иметь возможность обратиться к нему и исключить нужные абзацы.
Синтаксис псевдокласса not, как вы уже могли догадаться, таков:
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
В случае с абзацами мы вполне могли обойтись и без стилевого класса. Давайте его уберем у третьего абзаца и подумаем, как его теперь можно исключить? Ну конечно, в голову в первую очередь приходит nth-child или nth-of-type. Это псевдоклассы, которые позволяют выбрать элемент по его порядковому номера в родительском элементе.
p:not(:nth-of-type(3)){
color: green;
}
p:not(:nth-of-type(3)){ color: green; } |
Вот такой код позволит вам исключить третий абзац и ему не будет задан зеленый цвет.
В условии к селектору not, которое указывается в скобках, вы можете использовать селекторы любого уровня сложности и вложенности. То есть если вы напишете что-то в этом духе:
.class:not(p.red:nth-of-type(7)){}
.class:not(p.red:nth-of-type(7)){} |
То все это без проблем будет работать, но только при условии, что указанный в условии элемент есть и есть что исключать.
Применение в реальной практике
Хорошо, мы рассмотрели достаточно оторванные от реальности примеры, но и в реальной практике псевдокласс not может вам пригодится. Например, при работе с меню.
Если в меню есть разделители, то обычно разделитель не должен присутствовать у первого или последнего пункта меню. И это очень легко реализовать. Просто задаем первому или последнему пункту какой-нибудь стилевой класс, либо исключаем его с помощью nth-child/nth-of-type.
Опять же, тут вполне можно было бы обойтись и без not. Вы можете сначала задать разделители для всех пунктов, а потом просто переопределить для нужного пункта стиль, убрав этот разделитель. Но это уже потребует от вас написать на 2-4 строчки кода больше. В случае с not же вы очень элегантно в одной строке решаете всю проблему.
Соответственно, пример с разделителями я привел потому, что он наиболее часто мне встречался. На деле же при верстке реальных макетов таких моментов у вас может проскочить немало.
Псевдокласс not очень удобно использовать, когда нужно выбрать группу элементов и привязать к ним стили, но при этом исключить из этой группы 1-2 элемента. Советую вам взять на вооружение эту возможность css и использовать ее в верстке.
Практический курс по верстке адаптивного сайта с нуля!
Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3
Узнать подробнее
PSD to HTML
Верстка сайта на HTML5 и CSS3 с нуля
Смотреть
Псевдокласс :not в CSS. Примеры использования
Обычно нам требуется задать некое форматирование для классов, элементов или id. Однако, бывают случаи, когда нужно назначить форматирование для элементов, которые не имеют какого-либо селектора, либо для всех, кроме определенного селектора. Чаще всего таким селектором является селектор класса, хотя это далеко не единственный вариант. Для таких случаев нам понадобится псевдокласс :not.
Псевдокласс :not, по сути, позволяет нам исключить один или несколько тегов по указанному селектору из css-форматирования с заданными правилами. Общий вид записи селектора с использованием этого псевдокласса таков:
селектор1:not(селектор2) { свойства }
селектор1:not(селектор2) { свойства } |
Давайте рассмотрим несколько примеров форматирования элементов с использованием псевдокласса :not.
Форматирование статей, которые не содержат определенный класс
Для всех статей, которые не имеют класса tag-images
, зададим цвет фона, чтобы было заметней.
article:not(.tag-images) {
background-color: #b3d5f7;
}
article:not(.tag-images) { background-color: #b3d5f7; } |
Выделение цветом в этом случае выполняется для всех статей, кроме тех, которые так или иначе посвящены теме изображений. В примере это статьи по CSS и JavaScript — они выделены голубым фоном. Посмотрим, как это работает:
Псевдокласс :not и мультиклассы
Для страниц в CMS WordPress характерно назначение большого количества классов для элемента body. Например, так:
<body>
<body> |
Для того чтобы отформатировать страницы, не содержащие всего текста статей, можно написать такой селектор:
body:not(.home):not(.single):not(.single-post) {
width: 90%;
}
body:not(.home):not(.single):not(.single-post) { width: 90%; } |
Изменяем цвет всех элементов списка, кроме первого
Например, для того чтобы задать цвет для всех элементов списка, кроме первого, необязательно добавлять для него класс. Достаточно использовать псевдокласс :not в таком виде:
.testlist li:not(:first-child) {
color: green;
}
.testlist li:not(:first-child) { color: green; } |
Результат выглядит так, как и планировалось:
- List Item 1
- List Item 2
- List Item 3
- List Item 4
- List Item 5
- List Item 6
Форматируем ячейки таблицы
Примерно такой же вариант форматирования, как для списка, можно использовать для двух столбцов таблицы:
td:not(:nth-child(2)):not(:nth-child(3)){
text-align: center;
background-color: #cde;
}
td:not(:nth-child(2)):not(:nth-child(3)){ text-align: center; background-color: #cde; } |
В этом случае текст с выравниванием по центру и светло-голубым фоном будут иметь все колонки, кроме второй и третьей.
Наименование | Цвет | Артикул | Цена, грн. |
---|---|---|---|
Стол пластиковый Curver Elise | бежевый | 17180054bj | 1 200 |
Стол пластиковый Curver Lisa бежевый | коричневый | 17180053bj | 792 |
Стул пластиковый Allibert Montreal | серый | 17197675s | 1 224 |
Стул пластиковый Keter Harmony armchair | серо-коричневый | 17201284br | 1 800 |
Псевдокласс :not для форматирования полей формы
Допустим, у нас есть форма, в которой созданы несколько текстовых полей (<input type="text">
, <input type="email">
и <input type="password">
), а также поля типа number (<input type="number">
). Только для текстовых полей нам нужно добавить закругления границы и тень, а также ширину и внутренние отступы. Можно это сделать, перечислив типы нужных полей или исключив ненужные с помощью псевдокласса :not:
input:not([type=»number»]){
padding: 10px;
width: 290px;
border-radius: 6px;
box-shadow: 0 0 6px #9ecbf8;
}
input:not([type=»number»]){ padding: 10px; width: 290px; border-radius: 6px; box-shadow: 0 0 6px #9ecbf8; } |
Посмотрим на примере:
Просмотров:
146
Что такое псевдоклассы (pseudo classes) и псевдоэлементы (pseudo elements)
1 month ago |
4.1K
Всем приветствую, с вами Сергей Никонов и в этой статье я расскажу про псевдоклассы (pseudo classes), псевдоэлементы (pseudo elements) и как с помощью них задавать CSS-стили для вашего сайта. На примерах мы рассмотрим как с работают самые часто используемые псевдоклассы и псевдоэлементы при верстке сайтов.
Это один из уроков курса по верстке веб-сайтов HTML/CSS Advanced и если вы хотите научиться верстать веб-сайты на профессиональном уровне, я рекомендую проходить этот курс на сайте FructCode с интерактивными упражнениями для закрепления ваших знаний полученных из курса верстки сайтов.
Только на сайте FructCode вы можете найти актуальных версии моих курсов!
Содержание
Что такое псевдоклассы (pseudo classes)
Псевдокласс (pseudo class) — это специальное ключевое слово, которое добавляется к css-селектору (css selector), с помощью которого можно задавать стили для отображения HTML-элементов при различных факторах. К примеру, можно задать CSS-стили для HTML-элемента на который пользователь навел курсор мыши.
Если вы еще не знакомы с понятием CSS-селектор (css selector) и не знаете, что такое CSS-селекторы (css selectors), прочитайте об этом статью или посмотрите видеоурок из курса HTML/CSS Advanced, а для закрепления ваших знаний, пройдите интерактивные упражнения.
Псевдоклассы задаются через двоеточие “:”, далее идет название псевдокласса, например, так задается псевдокласс :hover для HTML-тега <a>: a:hover {…}.
Смотрите видео «Что такое псевдоклассы(pseudo classes) и псевдоэлементы(pseudo elements)»
Подпишитесь на YouTube канал FructCode, чтобы не пропустить полезные видео!
Псевдокласс :hover
Псевдокласс :hover позволяет задавать CSS-стили при наведении курсора мыши на HTML-элемент.
Посмотрите на этот пример. Наведите курсор мыши на ссылку Link и вы увидите, что цвет ссылки, при наведении на него курсора мыши, изменился на цвет “brown”:
Псевдокласс :active
С помощью псевдокласса :active мы можем задавать CSS-стили в момент клика на HTML-элемент мышью.
Посмотрите пример ниже. Наведите курсор мыши на надпись Link, затем нажмите левой кнопкой мыши на надпись Link и не отпускайте кнопку мыши. Вы увидите, что ссылка в момент клика мышью стала зеленого цвета:
Псевдоклассы :hover и :active работают не только с HTML-тегом <a>. Вы можете заменить в CSS-стилях “a” на любой другой HTML-тег или название классы и стили применятся к этому HTML-элементу.
Псевдокласс :focus
Псевдокласс :focus позволяет задавать стили для HTML-тегов таких как <input>, <textarea>, <checkbox> и других при установке курсора мыши в этот элемент.
Посмотрите пример ниже с HTML-формой. Если вы установите курсор мыши в поле <input>, фоновый цвет поля изменится:
Псевдоклассы :first-child и :last-child
С помощью псевдокласса :first-child вы можете задавать стили для первого HTML-элемента, который является первым у своего родителя (parent).
Чтобы было проще понять как работает :first-child, посмотрите пример ниже. В маркированном списке выделяется цветом первый элемент <li>, а его родителем (parent) является тег <ul>:
А с помощью псевдокласса :last-child вы можете задавать CSS-стили для последнего HTML-элемента.
Посмотрите пример ниже. Благодаря псевдоклассу :last-child выделяется цветом последний HTML-элемент в маркированном списке:
Как я говорил ранее, для того, чтобы применялись стили к HTML-элементу, заданных с помощью псевдоклассов :first-child и :last-child, у элемента должен быть родитель (parent). Если родитель отсутствует, тогда стили не сработают.
Посмотрите пример ниже. У тега <span> есть родительский тег <div> и стили с :first-child работают, а для <span> без родительского тега :first-child и :last-child не будут работать:
Обратите внимание, что в текущей спецификации Selectors Level 3, при использовании псевдоклассов :first-child и :last-child элемент должен иметь родителя (parent), чтобы сработали css-стили. В новой разрабатываемой версии спецификации Selectors Level 4 для срабатывания стилей заданных с помощью :first-child, :last-child, элемент может не иметь родителя.
Псевдоклассы :first-of-type и :last-of-type
С помощью псевдоклассов :first-of-type и :last-of-type можно задавать стили для первого и последнего потомка (child) соответсвенно своего типа среди детей (child) его родителя (parent).
Определение звучит сложно и не очень понятно. Поэтому лучше сразу перейти к примерам, чтобы вы быстро поняли как работают псевдоклассы :first-of-type и :last-of-type.
В этом примере, с помощью псевдокласса :first-of-type можно выделить цветом все первые элементы в маркированном списке с текстом “First”:
Точно такой же результат вы можете получить и с помощью псевдокласса :first-child, но не сможете выделить все последние элементы маркированного списка с надписью Third во всех вложенностях с помощью :last-child, зато такой результат вы сможете получить с помощью псевдокласса :last-of-type:
Псевдокласс :nth-child
С помощью псевдокласса :nth-child вы можете задавать стили для одного или более HTML-элементов, которые будут основываться на их позиции среди HTML-элементов соседей.
Звучит сложно и непонятно, согласен. Но не будем отчаиваться и очень быстро все поймем на примерах ниже.
Например, в нашем любимом маркированном списке мы хотим выделить цветом какой-то определенный элемент под номером три. Для этого в CSS-стилях нам достаточно добавить псевдокласс :nth-child к вот таким образом: li:nth-child(3) и в результате мы сделаем то, что хотели:
Но этим возможности псевдокласса :nth-child не ограничиваются и мы можем выделить все нечетные HTML-элементы из нашего маркированного списка, написав несколько символов кода: li:nth-child(odd). Ключевое слово “odd” внутри скобок псевдокласса :nth-child как раз задает этот правило:
А с помощью ключевого слова even внутри скобок псевдокласса :nth-child мы можем наоборот выделить цветом все четные HTML-элементы <li> из нашего маркированного списка:
И на этом возможности псевдокласса :nth-child не заканчиваются и мы можем писать даже сложные правила выборки HTML-элементов к которым применить CSS-стили с помощью формул. Об этом вы можете прочитать в документации к псевдоклассу :nth-child.
Псевдокласс :not
С помощью псевдокласса :not вы можете задать CSS-стили для которые не будут соответствовать заданному селектору.
Простыми словами, вы можете в псевдокласс :not, в его скобки, указать любой класс или элемент и CSS-стили будут заданы всем соседям данного элемента, кроме него самого.
Если все еще непонятно, что такое псевдокласс :not, вот вам наглядный пример, с моим любимым маркированным списком. В четвертый HTML-элемент мы задали класс .not-color и задали стили для , указав в скобках название класса — :not(.not-color). И в результате у нас окрашиваются все другие элементы , кроме с классом .not-color:
И если вы переместите класс .not-color соседний <li>, выше или ниже, будут закрашиваться цветом все <li>, кроме <li> с классом .not-color.
Что такое псевдоэлементы (pseudo elements)
Псевдоэлемент (pseudo element) — это это специальное ключевое слово, которое добавляется к css-селектору и позволяет задавать стили для части выбранного HTML-элемента.
Псевдоэлементы ::before и ::after
Псевдоэлементы ::before и ::after используются очень часто при верстке сайтов на профессиональном уровне.
Суть этих псевдоэлементов очень простая: С помощью псевдоэлемента ::before вы можете присоединить к существующему HTML-тегу какой-то контент ДО этого HTML-элемента, а с помощью псевдоэлемента ::after ПОСЛЕ HTML-элемента.
И сразу давайте перейдем к примеру ::before и ::after. У нас есть HTML-тег <p> и в него помещен текст “Have a good day!”. И с помощью псевдоклассов ::before и ::after мы добавляем “сердечки” слева и справа от надписи “Have a good day!”:
Обратите внимание, что в отличии от псевдоклассов, перед псевдоэлементами ставится два двоеточия. Прочитать о других псевдоэлементах вы можете в документации.
Вывод
В этой статье мы рассмотрели самые используемые псевдоклассы и псевдоэлементы, которые используют frontend-разработчики создавая верстку сайтов на профессиональном уровне.
А если вы хотите научиться верстать с нуля до уровня профессионала, я рекомендую пройти мой интерактивный курс HTML/CSS Advanced. Курс HTML/CSS Advanced разделен на две части, на теоретическую часть, где вы познакомитесь с основами HTML и CSS и на практическую часть, где мы будем создавать верстку сайта KinoMonster (КиноМонстер).
Кстати, у меня есть YouTube канал FructCode, где я переодически публикую полезные видео о верстке веб-сайтов и программировании. Подпишитесь на YouTube канал FructCode, чтобы не пропустить полезные видео!
С вами был Сергей Никонов,
Успехов в обучении!
Псевдоклассы CSS:: not () и: target
Ниже приводится выдержка из нашей книги CSS Master , написанной Тиффани Б. Браун. Копии продаются в магазинах по всему миру, или вы можете купить их в электронном виде здесь .
Как упоминалось ранее в этой главе, псевдоклассы помогают нам определять стили для документов на основе информации, которую невозможно извлечь из дерева документов или на которую нельзя ориентироваться с помощью простых селекторов. К ним относятся логические и лингвистические псевдоклассы, такие как :not()
и :lang()
. Он также включает инициируемые пользователем псевдоклассы, такие как :hover
и :focus
.
В этом разделе мы рассмотрим некоторые эзотерические и менее известные псевдоклассы с акцентом на то, что доступно в браузерах: индексированные и типизированные дочерние псевдоклассы и входные псевдоклассы. Индексируемые и типизированные дочерние индексированные псевдоклассы позволяют нам выбирать элементы по их положению в поддереве документа. Входные псевдоклассы целевые поля формы на основе их входных значений и состояний.
Выделение фрагментов страницы с помощью
:target
Идентификатор фрагмента — это часть URL, которая следует за #
; например, #top
или #footnote1
. Вы, вероятно, использовали их для создания навигации внутри страницы: так называемой «ссылки перехода». С помощью псевдокласса :target
мы можем выделить часть документа, которая соответствует этому фрагменту, и мы можем сделать это без JavaScript.
Скажем, например, что у вас есть серия комментариев или тема на форуме:
<section> <h3>Comments on this post</h3> <article>...</article> <article>...</article> <article>...</article> </section>
С некоторыми CSS-кодами и другими причудливыми элементами это немного похоже на то, что вы видите на рисунке ниже.
Каждый комментарий в вышеупомянутом коде имеет идентификатор фрагмента, что означает, что мы можем напрямую ссылаться на него. Например, <a href="#comment-1146937891">
. Затем все, что нам нужно сделать, это указать стиль для этого комментария, используя псевдокласс :target
:
.comment:target { background: #ffeb3b; border-color: #ffc107 }
Когда часть идентификатора фрагмента URL совпадает с частью комментария (например, http://example.com/post/#comment-1146937891
), этот комментарий будет иметь желтый фон, как показано ниже.=tab]:target { z-index: 2; }
Вот где происходит волшебство. Во-первых, мы абсолютно позиционировали все наши вкладки. Затем мы сделали нашу первую вкладку самым верхним слоем, добавив z-index: 1
. Это важно, только если вы хотите, чтобы первая вкладка в исходном порядке была первой вкладкой, которую увидят пользователи. Наконец, мы добавили z-index: 1
к нашей целевой вкладке. Это гарантирует, что целевой слой всегда будет самым верхним. Вы можете увидеть результат ниже.
Совет: улучшение доступности
Более доступная версия может также использовать JavaScript для переключения атрибутов hidden
или aria-hidden=true
зависимости от видимости каждого тела вкладки.
Нажатие на вкладку обновляет URL с новым идентификатором фрагмента документа. Это в свою очередь вызывает состояние :target
.
Отключение селекторов с помощью
:not()
Возможно, самым мощным из этого нового поколения псевдоклассов является :not()
. Он возвращает все элементы, кроме тех, которые соответствуют аргументу селектора. Например, p:not(.message)
выбирает каждый элемент p
котором отсутствует класс message
.
Псевдокласс :not()
— это то, что называется функциональным псевдоклассом . Он принимает один аргумент, как и функции в других языках программирования. Любой аргумент, передаваемый :not()
должен быть простым селектором, таким как тип элемента, имя класса, идентификатор или другой псевдокласс. label.checkbox
потерпят неудачу, как и составные селекторы, такие как label.checkbox
или сложные селекторы, такие как p img
.
Вот пример формы, которая использует текстовые типы ввода и переключатели:
<form method="post" action="#"> <h2>Join the Cool Kids Club</h2> <p> <label for="name">Name:</label> <input type="text" name="name" required> </p> <p> <label for="email">Email:</label> <input type="email" name="email" required> </p> <fieldset> <legend>Receive a digest?</legend> <p> <input type="radio" name="digest"> <label for="daily">Daily</label> <input type="radio" name="digest"> <label for="weekly">Weekly</label> </p> </fieldset> <button type="submit">Buy Tickets!</button> </form>
В HTML метки, связанные с типом radio
имеют .label-radio
. Мы можем использовать псевдокласс :not()
: для нацеливания на эти элементы без класса label-radio
, как показано на рисунке ниже:
label:not(.label-radio) { font-weight: bold; display:block; }
Вот более хитрый пример. Давайте создадим стили для ввода текста. К ним относятся типы ввода, такие как number
, email
и text
а также password
и url
. Но давайте сделаем это, исключив переключатель, переключатель и диапазон ввода. Ваш первый инстинкт может заключаться в использовании следующего списка селекторов:
([type=radio]), input:not([type=checkbox]), input:not([type=range]) { ... }
К сожалению, это не сработает, так как каждый селектор отменяет предыдущий. Это эквивалент ввода:
input:not([type=radio]){ ... } input:not([type=checkbox]) { ... } input:not([type=range]) {... }
Вместо этого нам нужно связать псевдоклассы our :not()
, чтобы они все фильтровали элемент input
:
input:not([type=radio]):not([type=checkbox]):not([type=range]) { ... }
Использование псевдоклассов (и псевдоэлементов) без простого селектора эквивалентно использованию его с универсальным селектором. Другими словами :not([type=radio])
— это то же самое, что и *:not([type=radio])
. В этом случае каждый элемент, у которого отсутствует атрибут type
и значение radio
будет соответствовать ―, включая html
и body
. Чтобы предотвратить это, используйте :not()
с селектором, таким как имя класса, идентификатор или селектор атрибута. Кстати, это также верно для имен классов, идентификаторов и селекторов атрибутов: .warning
и [type=radio]
такие же, как *.warning
и *[type=radio]
.
Селекторы CSS Уровень 4 уточняет способ :not()
работает, так что он может принимать список в качестве аргумента, а не только простые селекторы. Вместо того, чтобы связывать псевдоклассы, как ранее, мы сможем использовать аргумент через запятую:
input:not([type=radio], [type=checkbox], [type=range]) { ... }
К сожалению, ни один крупный браузер пока не поддерживает это, так что используйте пока что цепочку.
: нет | CSS-уловки
Свойство : not ()
в CSS является псевдоклассом отрицания и принимает в качестве аргумента простой селектор или список селекторов. Он соответствует элементу, который не представлен аргументом. Переданный аргумент не может содержать дополнительных селекторов или селекторов псевдоэлементов.
Возможность использовать список селекторов в качестве аргумента считается экспериментальной, хотя на момент написания этой статьи она поддерживалась все шире, включая Safari (с 2015 года), Firefox (с декабря 2020 года) и Chrome (с января 2021 года).
/ * аргумент X можно заменить любыми простыми селекторами * /
: not (X) {
стоимость имущества;
}
В этом примере у нас есть неупорядоченный список с одним классом на
-
-
-
Наш CSS выберет все
.different
. / * Стилизуйте все, кроме класса .different * /
li: not (.different) {
размер шрифта: 3em;
}
Вы также можете сделать то же самое, используя псевдоклассы, которые считаются простым селектором.
p: not (: nth-child (2n + 1)) {
размер шрифта: 3em;
}
Однако, если мы используем селектор псевдоэлементов в качестве аргумента, он не даст ожидаемого результата.
: not (:: first-line) {/ * :: first-line - это селектор псевдоэлементов, а не простой селектор * /
белый цвет;
}
Сложные селекторы
/ * выбрать все , не являющиеся потомками * /
p: not (article *) {
}
Наглядный пример
Визуальное представление различных вариантов использования : not ()
Специфичность
Специфика псевдокласса : not
— это специфика его аргумента.Псевдокласс : not ()
не добавляет специфичности селектора, в отличие от других псевдоклассов.
Отрицания не могут быть вложенными, поэтому : not (: not (...))
никогда не допускается. Авторы также должны отметить, что, поскольку псевдоэлементы не считаются простым селектором, они не подходят в качестве аргумента для : not (X)
. Будьте внимательны при использовании селекторов атрибутов, поскольку некоторые из них не так широко поддерживаются, как другие. Допускается соединение : не
селекторов с другими : не
селекторами.
Поддержка браузера
Псевдокласс : not ()
был обновлен в спецификации CSS Selectors Level 4, чтобы разрешить список аргументов. В CSS Selectors Level 3 он мог принимать только один простой селектор. В результате поддержка браузеров немного разделена между черновиками Уровня 3 и Уровня 4.
Простые селекторы
IE | Edge | Firefox | Chrome | Safari | Opera |
---|---|---|---|---|---|
9+ | Все | Все | Все | 12.1+ | Все |
Android Chrome | Android Firefox | Браузер Android | iOS Safari | Opera Mobile |
---|---|---|---|---|
Все | Все | Все | Все | Все |
Списки выбора
Настольный компьютер
Chrome | Firefox | IE | Edge | Safari |
---|---|---|---|---|
88 | 84 | Нет | 88 | 9 |
Мобильный /
Планшетный ПК
Дополнительная информация
Связанные
CSS: not () Псевдокласс — Lean CSS
CSS: not () Псевдокласс — Lean CSS | W3Docs
Псевдокласс: not () представляет элементы, которые не соответствуют списку селекторов.
Он также известен как псевдокласс отрицания. Это функциональный селектор псевдокласса, который принимает простой селектор в качестве аргумента и сопоставляется с одним или несколькими элементами, которые не представлены аргументом.
Селектор: not () принимает в качестве аргумента любое из следующего:
- Селектор типа (например, p, span и т. Д.)
- Селектор класса (например, .element и т. Д.)
- Селектор идентификатора (например, #header )
- Селектор псевдокласса (например: last-child,: first-of-type)
- Селектор атрибутов (например, [type = «text»])
- Универсальный селектор (*)
Важные примечания¶
- Селектор: not не работает с псевдоселекторами, прикрепленными к различным элементам, выполняющим псевдовыбор.
- Бесполезные селекторы можно записать с помощью селектора: not.
- Селектор: not может повысить специфичность правила.
- : not (.foo) соответствует всему, что не является .foo (включая и).
- Селектор: not применяется только к одному элементу.
- Если вы используете: not (), не применяя его только к одному элементу, он выберет все элементы в документе, которые не представлены в аргументе.
Версия¶
Селекторы уровня 3
Селекторы уровня 4
Синтаксис¶
: not () {
объявления css;
}
Пример псевдокласса: not (): ¶
Название документа
<стиль>
п {
цвет: # 666;
}
: not (p) {
цвет: # 8ebf42;
}
: пример селектора not ()
Lorem Ipsum - это просто фиктивный текст
Lorem Ipsum - это просто фиктивный текст
Lorem Ipsum - это просто фиктивный текст
Ссылка на W3docs
Попробуйте сами »
В следующем примере представлен неупорядоченный список с единственным классом в теге
Пример псевдокласса: not () с тегом
Название документа
<стиль>
.text-blue {
цвет синий;
}
ul li: не (.text-blue) {
цвет: # 8ebf42;
}
: пример селектора not ()
- Элемент списка 1
- Элемент списка 2
- Элемент списка 3
Попробуйте сами »
Практикуйте свои знания
Спасибо за отзыв!
Считаете ли вы это полезным? Да Нет
Статьи по теме
Мы используем файлы cookie для улучшения взаимодействия с пользователем и анализа посещаемости веб-сайтов.Принимаю
CSS: не селектор | SamanthaMing.com
Вместо использования двух разных селекторов для назначения стиля, а затем другого для его отмены. Используйте селектор: not для выбора всех элементов, кроме тех, которые соответствуют аргументу, который вы передали 👍
Допустимые аргументы
В текущем черновике, CSS-селекторы уровня 3, вы можете передать только простой селектор в качестве аргумента.
Simple Selectors:
- Type Selector
- Universal Selector
- Attribute Selector
- Class Selector
- ID Selector
- Pseudo-class
CSS Versioning Just like
CSS Versioning Briefs версии.У CSS тоже есть разные версии. Однако, в отличие от ECMAScript, где все находится в одной огромной категории (ES5, ES6, ES7), CSS работает по частям.
Например, у них есть CSS Selectors Level 3 , CSS Grid Layout Level 1 и CSS Flexbox Level 1 . Селектор : not
подпадает под спецификацию CSS Selectors Level 3. Следующее, над чем работает рабочая группа CSS, это … намек, что следует после 3 … ding ding, CSS Selectors Level 4 😜
Рэйчел Эндрю написала фантастическую статью, объясняющую уровни CSS, я также связал ее в Раздел ресурсов, так что прочтите, если вам интересно 🤓
Передача списка селекторов
В текущей версии вы можете передавать только простые селекторы в качестве аргумента.Однако на уровне 4 селекторов CSS вы сможете передать список селекторов. Так здорово, верно 👏.
И вот что будет выбрано
Вложенные отрицания не разрешены 🙈
Следует отметить, что отрицания могут не быть вложенными. Итак, это не-нет:
: первый ребенок
vs : первый тип
Давайте начнем с определения их индивидуально:
: первый ребенок
выбирает только первый элемент, ЕСЛИ это первый ребенок своего родителя.Это означает, что если это не первый дочерний элемент родителя, ничего не будет выбрано.
: first-of-type
выберет первый элемент указанного вами типа. Даже если это не первый ребенок своего родителя. Таким образом, результат будет всегда, если вы используете этот селектор (если вы не выбрали элемент, которого вообще не существует).
Хорошо, давайте рассмотрим несколько примеров.
Все дочерние типы имеют один и тот же тип
Поскольку все дочерние типы одинаковы, результат будет одинаковым для обоих.
Дети бывают разных типов
НО , потому что p
уже не первый ребенок. Если вы позвоните по номеру p: first-child
, НИЧЕГО не будет выбрано.
Выбор первого ребенка
Итак, вам может быть интересно, а что, если меня не волнует тип, я просто хочу выбрать первого дочернего элемента его родителя. В этом случае вы можете сделать это:
Другой аналогичный псевдокласс CSS
И это понимание применимо к другим классам двоюродных братьев:
-
: последний ребенок
и: последний тип
-
: nth-child
и: nth-of-type
-
: only-child
иonly-of-type
Поддержка браузера
Селектор : not
поддерживается большинством современных браузеров и Internet Explorer 9 и выше.
Совместимость с браузером
@hkfoster: Еще пара однострочников, которые тоже это делают:
-
li: nth-of-type (n + 2)
-
li ~ li
@vels_io: li + li {...}
@ andr3: Это мощный инструмент, который, как и все остальное, должен использоваться ответственно. В нашем примере вы можете обойтись простым:
Resources
CSS Псевдоклассы:: not () и: target
Ниже приводится отрывок из нашей книги CSS Master, написанной Тиффани Б.Коричневый. Копии продаются в магазинах по всему миру, или вы можете купить их в виде электронной книги здесь.
Как упоминалось ранее в этой главе, псевдоклассы помогают нам определять стили для документов на основе информации, которая не может быть получена из дерева документов или не может быть определена с помощью простых селекторов. К ним относятся логические и лингвистические псевдоклассы, такие как : not ()
и : lang ()
. Он также включает запускаемые пользователем псевдоклассы, такие как : hover
и : focus
.
В этом разделе мы рассмотрим некоторые эзотерические и менее известные псевдоклассы, сосредоточив внимание на том, что доступно в браузерах: дочерние индексированные и типизированные дочерние индексированные псевдоклассы и входные псевдоклассы. Детализированные и типизированные дочерние индексированные псевдоклассы позволяют нам выбирать элементы по их положению в поддереве документа. Входные псевдоклассы нацелены на поля формы на основе их входных значений и состояний.
Выделение фрагментов страницы с помощью
: цель
Идентификатор фрагмента — это часть URL-адреса, следующего за #
; например, # top
или # footnote1
.Вы, вероятно, использовали их для создания внутристраничной навигации: так называемой «ссылки перехода». С помощью псевдокласса : target
мы можем выделить часть документа, которая соответствует этому фрагменту, и мы можем сделать это без JavaScript.
Скажем, например, что у вас есть серия комментариев или ветка на доске обсуждений:
<раздел>
Комментарии к этому сообщению
...
...
<статья>...