Содержание
Родственные селекторы | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS |
7.0+ | 5.0+ | 9.2+ | 3.0+ | 1.0+ | 1.0+ | 1.0+ |
Версии CSS
Описание
Родственные селекторы по своему поведению похожи на соседние селекторы (запись вида E + F), но в отличие от них стилевые правила применяются ко всем близлежащим элементам. К примеру, для селектора h2~p стиль будет применяться ко всем элементам <p>, располагающихся после заголовка <h2>. При этом <h2> и <p> должны иметь общего родителя, так что если <p> вставить внутрь <div>, то стили применяться уже не будут.
Здесь красный цвет текста будет установлен для всех абзацев.
h2 ~ p { color: red; }
<h2>Заголовок</h2>
<p>Абзац 1</p>
<p>Абзац 2</p>
Здесь красный цвет текста будет установлен для первого и третьего абзацев. Ко второму абзацу стиль не применяется, поскольку <h2> и <p> не имеют общего родителя.
h2 ~ p { color: red; }
<h2>Заголовок</h2>
<p>Абзац 1</p>
<div><p>Абзац 2</p></div>
<p>Абзац 3</p>
Синтаксис
E ~ F { Описание правил стиля }
Для управления стилем родственных элементов используется символ тильды (~), он добавляется между двумя селекторами E и F. Пробелы вокруг тильды не обязательны. Стиль при такой записи применяется к элементу F в том случае, если он имеет того же родителя, что и элемент E и следует сразу после него.
Пример
HTML5CSS3IECrOpSaFx
<!DOCTYPE htm>
<html>
<head>
<meta charset="utf-8">
<title>Селекторы</title>
<style>
img {
display: none;
}
#switch:checked ~ img {
display: block;
}
</style>
</head>
<body>
<form>
<input type="checkbox">
<label for="switch">Показать картинки</label>
<img src="images/thumb1.jpg" alt="">
<img src="images/thumb2.jpg" alt="">
<img src="images/thumb3.jpg" alt="">
</form>
</body>
</html>
В данном примере все изображения изначально скрыты, но отображаются если поставить в поле формы галочку.
Соседние селекторы | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
7.0 | 8.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.0+ | 1.0+ |
Версии CSS
Описание
Соседними называются элементы веб-страницы, когда они следуют непосредственно друг за другом в коде документа.
Синтаксис
E + F { Описание правил стиля }
Для управления стилем соседних элементов используется символ плюса (+), который устанавливается между двумя селекторами E и F. Пробелы вокруг плюса не обязательны. Стиль при такой записи применяется к элементу F, но только в том случае, если он является соседним для элемента E и следует сразу после него. Рассмотрим несколько примеров.
<p>Lorem ipsum <b>dolor</b> sit amet.</p>
Тег <b> является дочерним по отношению к тегу <p>, поскольку он находится внутри этого контейнера. Соответственно <p> выступает в качестве родителя <b>.
<p>Lorem ipsum <b>dolor</b> <var>sit</var> amet.</p>
Теги <var> и <b> никак не перекрываются и представляют собой соседние элементы. То, что они расположены внутри контейнера <p>, не влияет на их отношение.
<p>Lorem <b>ipsum </b> dolor sit amet, <i>consectetuer</i> adipiscing <tt>elit</tt>.</p>
Соседними здесь являются теги <b> и <i>, а также <i> и <tt>. При этом <b> и <tt> к соседним элементам не относятся из-за того, что между ними расположен контейнер <i>.
Пример
HTML5CSS 2.1IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Соседние селекторы</title>
<style>
b + i {
color: red; /* Красный цвет текста */
}
</style>
</head>
<body>
<p>Lorem <b>ipsum </b> dolor sit amet, <i>consectetuer</i> adipiscing elit.</p>
<p>Lorem ipsum dolor sit amet, <i>consectetuer</i> adipiscing elit.</p>
</body>
</html>
Результат данного примера показан на рис. 1.
Рис. 1. Красный цвет текста для соседних селекторов
Браузеры
Браузер Internet Explorer 7 не применяет стиль, если между селекторами располагается комментарий (B + /* плюс */ I).
CSS «and» и «или» — CodeRoad
У меня довольно большие проблемы, потому что мне нужно анафематствовать от стилизации некоторых типов ввода. У меня было что-то вроде:
.registration_form_right input:not([type="radio")
{
//Nah.
}
Но я тоже не хочу стилизовать флажки.
Я пытался:
.registration_form_right input:not([type="radio" && type="checkbox"])
.registration_form_right input:not([type="radio" && "checkbox"])
.registration_form_right input:not([type="radio") && .registration_form_right input:not(type="checkbox"])
Как использовать &&
? И скоро мне нужно будет использовать ||
, и я думаю, что использование будет таким же.
Обновление:
Я до сих пор не знаю, как правильно использовать ||
и &&
. Я ничего не смог найти в документах W3.
css
css-selectors
conditional-operator
Поделиться
Источник
Misiur
09 мая 2010 в 08:42
8 ответов
- Вы смешиваете и сопоставляете файлы CSS ‘and’ ASP.NET .Skin?
Это CSS для HTML элементов и SKINS для ASP элементов управления? Или это CSS весь путь, даже мысль, что это, кажется, занимает больше времени? А что имеет специфичность SKINS или CSS? Я спрашиваю, потому что создаю свое первое веб-приложение ASP.NET (используя книгу), в то же время читая другое о…
- CSS поддержка портативных, iPhone AND браузеров
У меня есть следующее в моем index.xhtml style type=text/css media=screen and (min-width: 500px) @import style/index.css; /style style type=text/css media=screen and (max-width: 500px) @import style/portable.css; /style style type=text/css media=handheld @import style/handheld.css; /style Он…
162
&&
работает путем объединения нескольких селекторов, таких как:
<div></div>
div.class1.class2
{
/* foo */
}
Еще один пример:
<input type="radio" />
input[type="radio"].class1
{
/* foo */
}
||
работает путем разделения нескольких селекторов запятыми, например:
<div></div>
<div></div>
div.class1,
div.class2
{
/* foo */
}
Поделиться
geofflee
09 мая 2010 в 08:59
53
И ( &&
):
.registration_form_right input:not([type="radio"]):not([type="checkbox"])
OR ( ||
):
.registration_form_right input:not([type="radio"]),
.registration_form_right input:not([type="checkbox"])
Поделиться
kennytm
09 мая 2010 в 08:48
16
Чтобы выбрать свойства a
AND b
элемента X
:
X[a][b]
Чтобы выбрать свойства a
OR b
элемента X
:
X[a],X[b]
Поделиться
waao
20 декабря 2016 в 21:50
4
Псевдокласс :not
не поддерживается IE. Я бы получил за что-то подобное вместо этого:
.registration_form_right input[type="text"],
.registration_form_right input[type="password"],
.registration_form_right input[type="submit"],
.registration_form_right input[type="button"] {
...
}
Некоторое дублирование есть, но это небольшая цена за более высокую совместимость.
Поделиться
Max Shawabkeh
09 мая 2010 в 08:52
2
Вы можете каким-то образом воспроизвести поведение «OR», используя & и :нет.
SomeElement.SomeClass [data-statement="things are getting more complex"] :not(:not(A):not(B)) {
/* things aren't so complex for A or B */
}
Поделиться
Serge Profafilecebook
27 октября 2014 в 11:46
1
Я думаю, вам не нравится писать больше селекторов и делить их на запятую?
.registration_form_right input:not([type="radio"]),
.registration_form_right input:not([type="checkbox"])
{
}
и BTW это
not([type="radio" && type="checkbox"])
по — моему, больше похоже на «input which does not have both these types» 🙂
Поделиться
Jaroslav Záruba
09 мая 2010 в 08:46
1
На всякий случай, если кто-то застрянет, как я.
После того, как я прошел через пост и некоторые хиты и испытания
, это сработало для меня.
input:not([type="checkbox"])input:not([type="radio"])
Поделиться
Aurish
19 февраля 2014 в 19:09
1
Одно слово предостережения. Нанизывание нескольких селекторов not
увеличивает специфичность результирующего селектора, что затрудняет его переопределение: вам в основном нужно будет найти селектор со всеми нотами и скопировать его в ваш новый селектор.
Селектор not(X or Y)
был бы великолепен, чтобы избежать раздувания специфичности, но я думаю, что нам придется придерживаться сочетания противоположностей, как в этом ответе .
Поделиться
Andrius R.
20 февраля 2020 в 09:11
- все против и AND любой против или
Мне не терпелось узнать о том, в чем разница между all and and any and or например: status1=100, status2=300, status3=400 Что лучше использовать: if status1==100 and status2 ==300 and status3 ==400: или if all([status1==100,status2==300,status3=400]): аналогично для любого условия и или: if…
- css prettifier AND конденсатора
Эй у меня есть проблема которая состоит из двух частей но первая из них очевидно с чего я должен начать: Я унаследовал проект, который имеет три таблицы стилей: desktop.css, tablet.css и mobile.css — они называются так на странице: <link rel=stylesheet type=text/css href=/css/tablet.css…
Похожие вопросы:
Редактирование CSS шаблона drag-and-drop?
Я ни за что на свете не найду, где можно отредактировать CSS шаблона drag-and-drop. База знаний Mailchimp бесполезна и не дала никаких результатов. Кто-нибудь знает, где я могу это сделать?
CSS таргетинг с функцией ‘AND’ и ‘OR’ в style.css
В этой статье: CSS таргетинг конкретных изображений , Нильс Мунк объяснил, как ‘hooks’ specifid изображений по CSS, вот пример: img[width=400]{ float:left; } Это прекрасно работает для меня, я тоже…
CSS: «AND» и + оператор?
Я хочу поставить пробел после всех заголовков, используя CSS. Подобный этому: если h2 = добавить пробел после else если h2 + h3 = добавить пробел после Также, но без пробела между ними Это мой код…
Вы смешиваете и сопоставляете файлы CSS ‘and’ ASP.NET .Skin?
Это CSS для HTML элементов и SKINS для ASP элементов управления? Или это CSS весь путь, даже мысль, что это, кажется, занимает больше времени? А что имеет специфичность SKINS или CSS? Я спрашиваю,…
CSS поддержка портативных, iPhone AND браузеров
У меня есть следующее в моем index.xhtml style type=text/css media=screen and (min-width: 500px) @import style/index.css; /style style type=text/css media=screen and (max-width: 500px) @import…
все против и AND любой против или
Мне не терпелось узнать о том, в чем разница между all and and any and or например: status1=100, status2=300, status3=400 Что лучше использовать: if status1==100 and status2 ==300 and status3 ==400:…
css prettifier AND конденсатора
Эй у меня есть проблема которая состоит из двух частей но первая из них очевидно с чего я должен начать: Я унаследовал проект, который имеет три таблицы стилей: desktop.css, tablet.css и mobile.css…
Перекрывающиеся штабелируемые, кликабельные фигуры с CSS and/ или JavaScript?
Мне будет трудно это описать, поэтому, пожалуйста, потерпите. У меня есть требование создать элемент управления upvote для веб-сайта. Число upvotes настраивается в Системных настройках. Органы…
Есть ли способ выбрать элемент AND братьев и сестер в css и / или less?
Часто я хочу стилизовать элемент AND его младших братьев и сестер. Предположим, я хочу стилизовать третий span и все последующие. Я знаю, что могу это сделать: span:nth-child(2) ~ span { width:…
CSS @supports: смешивание «not» с «and» или «или»
Я хотел бы предоставить определенную часть CSS браузерам, которые поддерживают display: grid, но не являются IE/MS Edge. Как вы смешиваете положительные и отрицательные запросы @support? Можете ли…
Псевдокласс отрицания :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 селекторы
Некоторые концепции для новичков: Как работают селекторы в CSS
Вы новичок в CSS? Тогда эта статья для вас! Возможно самый важный ключ к пониманию работы CSS — осознание принципов работы селекторов CSS. Селекторы это то, что позволяет обращаться к определенным элементам HTML и применять к ним стили. Давайте отвлечемся от самих стилей, чтобы сфокусировать все наше внимание на выборе элементов.
В примере, приведенном ниже, CSS будет содержаться в файле с именем style.css ссылка на который будет содержаться в HTML — документе с именем index.html. Это — два разных файла. И это — одна из важных особенностей CSS, хранение дизайна отдельно от разметки.
Вот как выглядит HTML — файл:
Index.html:
<!DOCTYPE html> <html lang="en"> <head> <title> Мы изучаем селекторы!</title> <link rel="stylesheet" href="style.css"> </head> <body> <h2>Yay</h2> <body> </html>
А CSS — файл будет содержать лишь блок селекторов, который мы видим ниже.
CSS:
HTML:
<!-- БУДЕТ работать --> <div></div> <!-- БУДЕТ работать --> <aside></aside> <!-- НЕ БУДЕТ работать --> <div>НЕ ВЕРНЫЙ ID!</div> <!-- НЕ БУДЕТ работать --> <div>Это не является ID!</div>
ID-селекторы наиболее весомый тип селекторов, если речь идет о CSS — спецификации. В теории они выбивают другие типы селекторов и стили. Звучит хорошо, но на практике не значит ничего хорошего, потому что хорошо, когда есть селекторы, которые при необходимости легко можно переопределить.
CSS:
HTML:
<!-- БУДЕТ работать --> <div></div> <!-- БУДЕТ работать --> <aside></aside> <!-- НЕ БУДЕТ работать --> <div>Точка для CSS, не для HTML</div> <!-- НЕ БУДЕТ работать--> <div>Неверный класс</div>
Селекторы классов — наши друзья. Возможно, это самые используемые и универсальные селекторы. Отчасти потому, что они поддерживаются всеми браузерами.
Отчасти потому, что вы можете добавить несколько классов (разделяемых пробелами) для HTML-элементов. Отчасти потому, что есть некоторые JavaScript-трики, с помощью которых вы можете манипулировать классами.
CSS:
HTML:
<!-- БУДЕТ работать --> <h3>Привет, мама </h3> <main> <div> <!-- Будет работать--> <h3> Везде </h3> </div> </main> <!-- НЕ будет работать--> <div>Неверный тег, не сработает </div> <!-- НЕ будет работать --> <h3class="yolo"> Убедитесь, что после тега есть пробел! </h3>
Наибольшая польза от селекторов тегов ощущается при изменении свойств, которые являются уникальными для HTML — элемента. К примеру, установка list-style для элемента <ul> или tab-size для элемента <pre>. А также там, где нужно сбросить стили, которые браузер применяет к определенным элементам.
Но, не стоит излишне полагаться на них. Как правило, более полезно иметь класс определяющий стиль, который можно применять к любому HTML- элементу.
CSS:
HTML:
<!-- БУДЕТ работать --> <div data-modal="open"></div> <!-- БУДЕТ работать --> <aside data-modal='open'></aside> <!-- НЕ БУДЕТ работать --> <div data-modal="false"> Неверное значение </div> <!-- НЕ БУДЕТ работать --> <div data-modal>Нет значения </div> <!-- НЕ БУДЕТ работать --> <div data-modal-open> Неверный атрибут </div>
Вы, конечно, можете возразить, что селекторы атрибутов более полезны, чем селекторы классов, потому что могут не только выбирать по наличию атрибута, но и по его точному значению.
Что ж, резонно, но учтите, что селекторы атрибутов НЕ поддерживаются в IE6.
CSS:
HTML:
<ul> <li>nope</li> <!-- БУДЕТ работать--> <li>yep, I'm #2</li> <li>nope</li> </ul>
Есть несколько различных позиционных селекторов :nth-child. Используя простые выражения (как 3n = «каждый третий«) вы можете выбирать элементы на основе их положения в HTML-документе. Вы можете поэкспериментировать с этой идеей здесь или же использовать несколько готовых рецептов.
CSS:
HTML:
<!-- БУДУТ работать --> <div></div> <!-- БУДУТ работать --> <aside data-blah><!-- nothin' --></aside> <!-- НЕ БУДУТ работать --> <div> </div> <!-- НЕ БУДУТ работать --> <div> </div>
:empty является одним из множества псевдо-селекторов, которые вы можете узнать по двоеточию (:). Как правило, они представляют собой нечто, что вы не сможете распознать по элементу или атрибуту по — отдельности.
Стоит отметить, что они немного отличаются от псевдо-элементов, которые вы можете распознать по двойным двоеточиям (::). Они ответственны за добавление элементов на страницу.
Селекторы можно объединять:
CSS:
.module.news { /* Выбирает элементы из этих классов */ } #site-footer::after { /* Добавляет контент после элемента с ID */ } section[data-open] { /* Выбирает только элементы раздела, если у них есть этот атрибут */ }
Есть также комбинации селекторов, таких как ~ и + и > которые влияют на селекторы, следующим образом:
CSS:
.module > h3 { /* Выбирает h3 элементы, которые являются прямыми потомками элемента этого класса */ } h3 + p { /* Выбирает элементы p которые следуют непосредственно за элементом h3 */ } li ~ li { /* Выбирает элементы li которые родственны (и следуют) за другими элементами li. */ }
РедакцияПеревод статьи «Beginner Concepts: How CSS Selectors Work»
Аксиоматический CSS и лоботомированные совы
На последнем CSS Day в июне я с некоторым трепетом представил странный
трехсимвольный CSS-селектор. Он назывался «лоботомированная сова» — из-за
его сходства с пустым взглядом взглядом этой птицы, и это оказалась самая
популярная часть моего доклада.
Я не могу сказать, что вызывало наибольший восторг у слушателей: ход мыслей,
приведший к изобретению селектора или наоборот, они нервно смеялись над моим
смелым представлением столь странной и очевидно бесполезной конструкции.
Или, возможно, я невольно оказался в комнате полной совопоклонников.
Не знаю.
Селектор лоботомированной совы выглядит так:
* + *
Несмотря на непочтительное имя и сомнительную форму, селектор лоботомированной
совы для меня не просто игра ума. Это результат продолжительных экспериментов
с автоматизацией раскладок с поточным контентом. Совиный селектор — это
общеизвестный «жадный» селектор. Ввиду этого многие не решаются его
использовать, и кому-то может показаться ужасным то, что я использовал его на продакшене.
Но сейчас я хотел бы показать, как этот селектор может упростить код, ускорить процесс разработки и помочь автоматизировать стилизацию произвольного, динамического контента.
Стилизация по умолчанию
Практически все профессиональные дизайнеры веб-интерфейсов (или разработчики,
как вам будет угодно) приучили себя по умолчанию стилизировать HTML-элементы. Мы представляем себе элемент интерфейса, а затем создаем стили для объекта, которые вручную привязываем к разметке.
Несмотря на то что он отвечает только за представление, а не за семантику,
для стилизации мы чаще всего используем селектор по классу. В то время
как элементы и большинство атрибутов предопределены и стандартизированы, классы
предоставляют нам свободу творчества. Классы дают нам контроль.
.my-module {
}
CSS-фреймворки это, по сути, библиотеки нестандартизированных, основанных на
классах, шифров, предназначенных для того, чтобы сформировать явные связи
между стилями и элементами. Их ценят за то, что с их помощью дизайнеры могут быстро создавать привлекательные интерфейсы и критикуют за неизбежные проблемы с доступностью, которые являются результатом того, что при таком подходе ведущим является представление (форма), а не контент (функция).
<a>Нажми меня</a>
Вне зависимости от того, что вы используете — фреймворк или собственную
методологию — такой подход не позволяет подключать к работе редакторов контента, как правило, далеких от верстки. Он требует не только знания разметки, отвечающей за представление, но и доступа к ней, чтобы добавить в код указания нужных стилей. WYSIWYG-редакторов и инструментов вроде маркдауна определенно недостаточно для того, чтобы необходимость стилизации контента не усложняла процесс редактирования.
Разрастание кода
Вне зависимости от того, можешь ли ты создать и поддерживать разметку, отвечающую за представление, остается вопрос а надо ли. Добавление оформительских шифров в изначально лаконичную разметку непременно приведет к её разрастанию, но что мы получим взамен? Позволит ли это упростить таблицы стилей?
Выбрав стилизацию, полностью полагающуюся на элементы, мы ошибочно предполагаем, что HTML-элементы существуют в вакууме, а не являются объектом наследования и не
принадлежат своему контексту. Рассматривая элемент как «штуку, для которой надо
написать стили», мы наделяем конкретный элемент избыточным значением и определяем для него стили, которые уже должны были быть определены выше в каскаде. Добавление новых модулей в проект приводит к неконтролируемому разрастанию кода.
.module-new {
}
Что касается препроцессоров с их одержимостью переменными и
объектно-ориентированными CSS-методологиями, переиспользуемыми объектами
классов — с их помощью мы сбрасываем балласт, чтобы остановить разрастание кода.
Это одержимость нашей индустрии. Однако большинство из них навязывают философию,
которая, в первую очередь, и порождает разрастание кода. Некоторые из них даже
навязывают плоскую структуру CSS, цитируя решение проблемы веса селекторов — сводя CSS к SS (Каскадные таблицы стилей к просто таблицам стилей. Без использования каскада. Примечание переводчика.) и отказываясь от одного из основных его достоинств.
Я не осуждаю эти подходы, но существуют и другие методы, которые могут оказаться
при определенных условиях более эффективными. А теперь пристегните ремни.
Производительность селекторов
Я допускаю, что некоторые из вас начали неодобрительно качать головами, увидев
два астериска в селекторе * + *
в начале статьи. Для этого есть причина.
Универсальный селектор — это действительно мощный инструмент. И его можно
использовать не только во зло, но и во благо. Прежде чем углубиться в это, однако, я хотел бы обсудить проблему быстродействия.
Все исследования, которые мне довелось прочесть, включая исследования Стива Шодерса (Steve Souders) и Бена Фрэйна (Ben Frain), пришли к выводу, что сравнительное быстродействие CSS селекторов разных типов показывает, что разница пренебрежительно мала. Фактически Фрэйн заключает, что «заморачиваться по поводу селекторов в современных браузерах — бессмысленно». И я пока не встречал ни одного убедительного аргумента, опровергающего результаты этих исследований.
Согласно Фрэйну, наоборот, именно количество CSS-селекторов, разрастание кода, может привести к проблемам; особо он упоминает неиспользуемые, хотя и объявленные CSS-правила. Другими словами, выбирать селекторы по классу за их «скорость» бесполезно, если настоящие проблемы с производительностью вызывает их количество. Хорошо, это плюс гигантские JPEG-изображения и веб-шрифты, которые не были урезаны до необходимого подмножества символов.
Наоборот, одновременный контроль множества элементов с помощью селектора *
делает код лаконичнее, помогает уменьшить размер файла и улучшить производительность.
Настоящая проблема с универсальным селектором в том, что он сам по себе не
выражает ничего, кроме «стилизуем всё подряд». Фокус в том, как использовать его для создания более сложных селекторов, учитывающих контекст.
Разбираемся с отступами
Проблема с ограничением области действия стилей до одного элемента в том, что не
все должно рассматриваться как вещь в себе. Например отступы: отступы это то,
что разделяет элементы. Само по себе применение верхнего отступа к элементу
бессмысленно, вне зависимости от того как часто или редко ты это делаешь. Это
все равно что намазать клеем одну сторону объекта до того, как ты решишь его
приклеить и определишься с тем, куда именно.
.module-new {
margin-bottom: 3em;
}
Что нам нужно, так это выражение (селектор), которое соответствует только элементам, которым нужен отступ. И это только те элементы, которые находятся в одном контексте с другими, соседними, элементами. Селектор соседа делает именно это: используя форму x + n
, мы можем добавить верхний отступ любому элементу n
, перед которым есть x
.
В обычных условиях эта задача очень быстро приведет к описанию множества возможных случаев, если мы начнем создавать правила для каждой пары соседей. Вот
почему мы используем вышеупомянутый универсальный селектор, создавая мордочку
совы. Аксиома следующая: «все элементы в потоке, которые расположены после другого
элемента, должны получить верхний отступ равный интерлиньяжу».
* + * {
margin-top: 1.5em;
}
Предрасположенность к ошибкам
Предположим, что размер кегля шрифта параграфов 1 em
и интерлиньяж 1.5 em
—
устанавливаем отступ в одну строку всем элементам в потоке, которые следуют
за другим элементом в любых вариациях и в любом порядке. И мы, разработчики, и
ребята, которые создают контент проекта, можем не волноваться о том, что забыли
элемент и не прописали использование стандартного отступа, когда он идет после
другого элемента. Чтобы добиться этого обычными методами, мы должны для каждого отдельного элемента определять свои отступы. Скучно, долго и всегда есть риск что-то упустить.
Вместо того чтобы писать стили, мы создали аксиому: общий принцип для
раскладки с поточным контентом. Это также очень удобно для поддержки кода:
если вы изменили высоту строки, просто сделайте таким же значение отступа сверху.
Учитываем контекст
Можно сделать еще лучше. Применяя отступ исключительно между элементами, мы не
создаем никаких лишних отступов (ненужный клей), обреченных комбинироваться с
полями родительского элемента. Сравните решение (a), которое добавляет верхний
отступ ко всем элементам с решением (б), которое использует совиный селектор.
Теперь давайте рассмотрим поведение с учетом вложенности. Как показано, при
использовании совиного селектора и margin-top
, ни первый, ни последний элемент
не получают ненужные отступы. Когда вы создаете подмножество таких элементов,
оборачивая их в родительский элемент, применяется то же правило. Никаких лишних
отступов вне зависимости от уровня вложенности. Это решение с некоторой
элегантностью препятствует накоплению отступов в интерфейсе.
Это в высшей степени более лаконично и надежно, чем неаксиоматичный подход и
необходимость подчищать лишний клей постфактум, как с неохотой признал Крис
Койер (Chris Coyier) в «Отступы после модулей». Именно эта статья,
надо заметить, подсказала мне идею лоботомированной совы.
.module > *:last-child,
.module > *:last-child > *:last-child,
.module > *:last-child > *:last-child > *:last-child {
margin: 0;
}
Обратите внимание, что все это работает только в контексте «модуля» (это была
большая просьба от редактора контента) и требует оценивать возможную степень
вложенности. В данном случае до третьего уровня вложенности.
Дизайн на основе исключений
Пока нам не потребовалось именовать ни один элемент. Мы просто написали правило.
Теперь мы можем воспользоваться достоинствами низкой специфичности совиного селектора и начать вдумчиво добавлять исключения, используя достоинства каскада, вместо того чтобы осуждать его использование, как это происходит в других методах.
Книжные параграфы с выключкой по ширине
p {
text-align: justify;
}
p + p {
margin-top: 0;
text-indent: 2em;
}
Обратите внимание, что отступ добавлен только тем параграфам, которые следуют за другими, — это еще одно преимущество селектора по ближайшему соседу.
Компактные модули
.compact * + * {
margin-top: 0.75em;
}
Можете насладиться небольшой отсылкой к объектно-ориентированным методам, если
хотите, и создать небольшой приспособленный для повторного использования стиль
для компактных модулей. В этом примере все элементы, которые требуют отступа, получат отступ только в половину интерлиньяжа.
Виджеты с позиционированием
.margins-off > * {
margin-top: 0;
}
Совиный селектор обладает широким спектром действия и будет применяться также к
виджетам, например, картам, где позиционирование должно быть точным. Это простой способ его отменить. Все чаще виджеты такого типа реализуются в виде веб-компонент, в которых это правило все равно бы не наследовалось. Это происходит благодаря инкапсуляции стилей в теневом DOM.
Красота
em
Однако некоторые исключения неизбежны из-за использования единиц em
для
определения размера отступа — они уже сами по себе автоматически изменяются
из-за другого свойства: @media
запросов.
Когда дело касается заголовков, мы получаем некоторые преимущества. Определив кегль шрифта заголовка в em
, мы сразу получаем соответствующий заголовку отступ (отступ лида), не написав ни одной дополнительной строки кода.
Строчные элементы
Предполагается, что объявленные стили должны наследоваться. Как CSS, вообще-то, и задумывался. Однако я понимаю, как раздражает многих из вас то, насколько
этот селектор «жадный». Особенно после того, как все привыкли избегать
наследования настолько, насколько это вообще возможно.
Я уже рассмотрел несколько исключений, которые вы, возможно, захотите сделать, но давайте пойдем дальше: помните, что строчные элементы со стандартным значением display: inline
тоже унаследуют верхний отступ, хотя он не повлияет на их отображение. Строчные элементы учитывают только горизонтальные отступы, что является их стандартным поведением во всех браузерах.
Если вы обнаруживаете, что часто перезаписываете совиный селектор, скорее всего,
в вашем дизайне имеются глубокие системные проблемы. Совиный селектор работает
с поточным контентом, и такой тип контента должен быть основным на странице. Я бы не советовал сильно полагаться на позиционированный контент в большинстве интерфейсов, так как он нарушает неявное взаимодействие элементов в рамках потока. Даже сетки с их флоат-колонками не должны требовать чего-то большего, чем простой селектор .row > *
, применяющий к ним margin-top: 0
, чтобы сбросить отступ.
Заключение
Я плохой математик, но Начала Эвклида произвели на меня большое впечатление: набор тривиальных правил, или аксиом, которые формируют основу для
сложного и прекрасного предмета — геометрии. Благодаря Эвклиду я понимаю, что
даже наиболее сложные системы должны быть основаны на элементарных правилах, и это также будет верно в отношении CSS. Кроме того, разбиение на модули сложного
интерфейса — это необходимый шаг на пути его взросления, и любой интерфейс, который не следует этим базовым принципам, потеряет свою прозрачность.
Совиный селектор дает вам контроль над поточным контентом, но, кроме того, это еще и способ отказа от контроля. Стилизируя элементы в соответствии контексту и
обстоятельствам, мы принимаем то, что структура нашего контента является — и должна быть — изменчивой. Вместо того чтобы предопределять представление интерфейса в целом, мы позволяем контенту определять его. Мы возвращаем контроль людям, которые его создают.
Если вы совсем отключите CSS на странице, вы, возможно, заметите две вещи. Первая — то, что страница упорно сохраняет гибкость: контент укладывается в область просмотра независимо от ее размеров. Вторая — при условии, что вы написали соответствующую стандарту и доступную разметку, вы, наверное, увидите, что контент уже стилизован если и не особо красивым, то хотя бы приемлемым образом. Встроенные стили браузера позаботились и об этом.
Наши усилия по освоению и улучшению изначальной независмости от устройств, предоставляемой браузерами, не прекращаются. Пришла пора поработать, чтобы вернуть независимость и от контента.
CSS селектор — Русские Блоги
каталог
I. Введение
Во-вторых, грамматика
В-третьих, метод введения
Встроенный стиль
2. Встроенный
3. Внешний стиль
В-четвертых, селектор
Основной селектор
2. Комбинированный селектор
3. Селектор недвижимости
4. Необычные селекторы
5. Группировка и вложение
6. Псевдо-класс селектора
7. Псевдоэлемент выбора
8. Приоритет селектора
I. Введение
CSS (Cascading Style Sheet) определяет, как отображать элементы HTML.
Когда браузер читает таблицу стилей, он форматирует (отображает) документ в соответствии с этой таблицей стилей.
Преимущества: Отдельные стили контента для групповой разработки, стили можно повторно использовать для повышения эффективности разработки, точный контроль страниц для создания красивых и упрощенных сложных страниц, более удобный для поиска поисковыми системами, более заметная структура
Во-вторых, грамматика
Стили CSS состоят из двух частей:Селектор: оператор;Объявления включают атрибуты и значения атрибутов, и каждый оператор заканчивается точкой с запятой.
В-третьих, метод введения
Встроенный стиль
Встроенный стиль предназначен для установки стиля CSS в атрибуте style тега, и он вступает в силу немедленно без ссылки. Это не рекомендуется для широкомасштабного использования.
2. Встроенный
При внедрении стили CSS записываются в тег style внутри тега head веб-страницы следующим образом:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS</title>
<style>
/ * класс перед "." * /
.class_sign {color: red}
/ * id сопровождается "#" * /
#id_sign {color: green}
</style>
</head>
<body>
<div>Hello world</div>
<div>Hello world</div>
</body>
</html>
3. Внешний стиль
Написан в отдельном файле стилей, он действителен для всех страниц всего сайта и вводится посредством ссылок. Синтаксис ссылки:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS</title>
<! - Ввести стиль файла CSS и автоматически сопоставить теги->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div>Hello world</div>
<div>Hello world</div>
</body>
</html>
В-четвертых, селектор
Основной селектор
- Элемент выбора
- Селектор идентификаторов
- Выбор класса
Не начинайте имя класса с числа (некоторые браузеры не распознают его)
Если в теге есть несколько атрибутов класса, они могут быть разделены пробелами. - Универсальный селектор
2. Комбинированный селектор
- Потомок селектор
- Сын селектор
- Смежный селектор
- Брат селектор
3. Селектор недвижимости
4.=»cir»] {
color: red;
}
/ * Выбрать все элементы с атрибутом типа, значение которого заканчивается на * /
[type$=»are»] {
color: blue;
}
/ * Выбрать все элементы с атрибутом типа, значение которого содержит (строка содержит): * /
[type*=»is»] {
color: green;
}
/ * Выбрать все элементы с атрибутом класса, значение которого содержит (входит в несколько значений) tag1 * /
[class~=»tag1″] {
color: orchid;
}
</style>
</head>
<body>
<ul type = «circle disc»> <li> Я являюсь элементом с атрибутом типа, значение которого начинается с cir </ li> </ ul>
<ul type = «square»> <li> Я являюсь элементом с атрибутом типа, и его значение заканчивается на </ li> </ ul>
<ul type = «disc»> <li> Я являюсь элементом с атрибутом типа, значение которого содержит (строка содержит) </ li> </ ul>
<div class = «tag1 tag2»> <p> Я являюсь элементом с атрибутом класса, значение которого содержит (включен в несколько значений) tag1 </ p> </ div>
</body>
</html>
5. Группировка и вложение
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<title>CSS</title>
<! - Выбор группы->
<style>
/ * (Установите теги div и span на красный) * /
div,
span {
color: red;
}
</style>
</head>
<body>
<div> Я тег div </ div>
<span> Я - тег span </ span>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<title>CSS</title>
<! - Вложенный селектор->
<style>
/ * (Установить все шрифты внутри тега p на синий) * /
.tag p {
color: blue;
}
/ * (Установить шрифт всех тегов span внутри тега на зеленый) * /
#tag span {
color: green;
}
</style>
</head>
<body>
<div>
<p> Я тэг p </ p>
<span> Я - тег span </ span>
</div>
</body>
</html>
6. Псевдо-класс селектора
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-Type" charset="UTF-8">
<title>CSS</title>
<! - Селектор псевдокласса->
<style>
/ * Цвет невидимой ссылки * /
a:link {
color: #F00;
}
/ * Цвет посещенной ссылки * /
a:visited {
color: #0F0;
}
/ * Цвет при наведении мыши на ссылку * /
a:hover {
color: #F0F;
}
/ * Цвет при щелчке мышью по ссылке * /
a:active {
color: #00F;
}
/ * стиль ввода, когда поле ввода получает фокус * /
input:focus {
outline: none;
background-color: #EEE;
color: #00F;
}
/ * (Псевдо-селектор также может быть применен к большему количеству тегов, таких как теги выбора) * /
</style>
</head>
<body>
<div>
<a href="https://blog.csdn.net/qq_41964425" target="_blank">CSDN</a>
<a href="http://css.doyoe.com" target="_blank"> Справочное руководство по CSS </a>
</div>
<div>
<label> <input type = "text" placeholder = "Я поле ввода"> </ label>
</div>
</body>
</html>
7. Псевдоэлемент выбора
- first-letter
- before
- after
До и после в основном используются для очистки поплавка.
8. Приоритет селектора
#. Наследование CSS:
- Наследование является основной особенностью CSS и зависит от отношений предка и потомка.
- Наследование — это механизм, который позволяет применять стили не только к конкретному элементу, но и к его потомкам.
(например, значение цвета шрифта, определенное тегом body, также применяется ко всем тегам внутри тега body) - Вес наследования CSS очень низок, и его приоритет равен 0, что ниже, чем приоритет обычных элементов.
(то есть вы можете переопределить стиль, определенный вашими предками, если вы установите стили для своих потомков) - Наследование является важной частью CSS. Нам даже не нужно думать, почему он может это делать, но наследование CSS также ограничено.
(такие как border, margin, padding, bacckground и т. д. не могут быть унаследованы)
#. Приоритет селектора:
Выше объясняется много видов селекторов, то есть может быть много способов найти и стилизовать элемент на странице HTML, так что браузер решает, какой стиль применить?
Фактически он определяется в соответствии с весами различных селекторов. Метод расчета веса конкретного селектора следующий:
Кроме того, вы можете заставить стиль вступить в силу, добавив метод! Important, но это не рекомендуется, поскольку чрезмерное использование может испортить файл стиля и затруднить его поддержку.
Если это абсолютно необходимо, не используйте:
Держись, ты выиграл
Жизнь всегда плоха, ключ к кипению
Кипение это накопление энергии
Кипение это сублимация жизни
Кипение это болезненный и терпеливый процесс
Не могу выделиться
Что означает селектор CSS «+» (знак плюса)?
Селектор знака «+» используется для выбора элементов, которые помещаются сразу после указанного элемента, но не внутри отдельных элементов.
Примечание: IE8 и более ранние версии должны быть объявлены как рабочий элемент + селектор элемента.
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции HTML с помощью Web Design for Beginners | Курс HTML .
Синтаксис:
element + element { // свойство CSS }
Пример:
|
Выход:
Поддерживаемые браузеры: Браузеры, поддерживаемые селектором «+», перечислены ниже:
- Apple Safari
- Google Chrome
- Firefox
- Opera
- Internet Explorer 7.0
Селектор CSS - javatpoint
Селекторы CSS используются для выбора содержимого, которое вы хотите стилизовать . Селекторы являются частью набора правил CSS. Селекторы CSS выбирают элементы HTML в соответствии с их идентификатором, классом, типом, атрибутом и т. Д.
В CSS есть несколько различных типов селекторов.
- Селектор элементов CSS
- Селектор идентификатора CSS
- Селектор классов CSS
- Универсальный селектор CSS
- Селектор групп CSS
1) Селектор элементов CSS
Селектор элемента выбирает элемент HTML по имени.
<стиль>
п{
выравнивание текста: центр;
цвет синий;
}
Этот стиль будет применяться к каждому абзацу.
Я тоже!
И я!
Проверить это сейчас
Выход:
Этот стиль будет применен к каждому абзацу.
Я тоже!
И я!
2) Селектор идентификатора CSS
Селектор id выбирает атрибут id элемента HTML, чтобы выбрать конкретный элемент.Идентификатор всегда уникален на странице, поэтому он выбирается для выбора одного уникального элемента.
Записывается с символом решетки (#), за которым следует идентификатор элемента.
Рассмотрим пример с идентификатором para1.
<стиль>
# para1 {
выравнивание текста: центр;
цвет синий;
}
Здравствуйте, Javatpoint.com
Этот абзац не будет изменен.
Проверить это сейчас
Выход:
Здравствуйте, Javatpoint.com
Этот абзац не будет изменен.
3) Селектор классов CSS
Селектор класса выбирает элементы HTML с определенным атрибутом класса. Используется с точкой. (символ точки), за которым следует имя класса.
Примечание. Имя класса не должно начинаться с числа.
Рассмотрим пример с классом «центр».
<стиль>
.center {
выравнивание текста: центр;
цвет синий;
}
Этот заголовок выделен синим цветом и выровнен по центру.
Этот абзац синий и выровнен по центру.
Проверить это сейчас
Выход:
Этот заголовок выделен синим цветом и выровнен по центру.
Этот абзац синий и выровнен по центру.
Селектор классов CSS для определенного элемента
Если вы хотите указать, что только один конкретный элемент HTML должен быть затронут, вы должны использовать имя элемента с селектором класса.
Давайте посмотрим на примере.
<стиль>
п.center {
выравнивание текста: центр;
цвет синий;
}
Этот заголовок не изменяется
Этот абзац синий и выровнен по центру.
Проверить это сейчас
Выход:
На данную товарную позицию не влияет
Этот абзац синий и выровнен по центру.
4) Универсальный селектор CSS
Универсальный селектор используется как подстановочный знак. Он выбирает все элементы на страницах.
<стиль>
* {
цвет: зеленый;
размер шрифта: 20 пикселей;
}
Это заголовок
Этот стиль будет применяться к каждому абзацу.
Я тоже!
И я!
Проверить это сейчас
Выход:
Это товарная позиция
Этот стиль будет применен к каждому абзацу.
Я тоже!
И я!
5) Селектор групп CSS
Селектор группировки используется для выбора всех элементов с одинаковыми определениями стиля.
Селектор группировки используется для минимизации кода. Запятые используются для разделения каждого селектора в группе.
Давайте посмотрим код CSS без селектора групп.
h2 {
выравнивание текста: центр;
цвет синий;
}
h3 {
выравнивание текста: центр;
цвет синий;
}
п {
выравнивание текста: центр;
цвет синий;
}
Как видите, вам нужно определить свойства CSS для всех элементов. Его можно сгруппировать следующим образом:
h2, h3, p {
выравнивание текста: центр;
цвет синий;
}
Давайте посмотрим полный пример селектора групп CSS.
<стиль>
h2, h3, p {
выравнивание текста: центр;
цвет синий;
}
Здравствуйте, Javatpoint.com
Здравствуйте, Javatpoint.com (более мелким шрифтом)
Это абзац.
Проверить это сейчас
Выход:
Привет Javatpoint.com
Hello Javatpoint.com (более мелким шрифтом)
Это абзац.
Полное руководство для повышения уровня ваших навыков работы с селектором CSS
Примечание редактора: Этот пост был обновлен в июле 2021 года, чтобы отразить последнюю информацию о селекторах CSS, включая обновление уровня 4 модуля псевдоэлементов CSS за май 2021 года.
Я использую CSS уже много лет, но до недавнего времени я не особо возвращался к теме селекторов CSS.
Зачем мне это нужно? Мы все уже знаем селекторы наизнанку, верно?
Проблема в том, что (по крайней мере, в моем случае) со временем легко привыкнуть к использованию одного и того же надежного набора селекторов в каждом проекте для достижения того, что вам нужно.
Итак, я взял на себя обязательство предоставить подробный обзор селекторов CSS и натолкнулся на некоторые интересные, которые были для меня новыми, использовались так, как мне раньше не приходило в голову, или будут доступны в ближайшее время.
Последние селекторы CSS, указанные W3C, содержатся в документе Selectors Level 4, который последний раз обновлялся в конце 2018 года. Большинство этих селекторов сейчас есть во всех основных браузерах, но некоторые из них, например : has ()
, еще не рассмотрены. Существует отдельная спецификация для псевдоэлементов, последней из которых является модуль псевдоэлементов CSS уровня 4, который был обновлен снова в мае 2021 года.Так что скоро их будет больше!
Я приглашаю вас присоединиться ко мне, поскольку я рассмотрю различные типы селекторов CSS. Сколько из них вы уже используете в своей повседневной работе? Мне было бы интересно узнать.
Готовы повысить свои навыки работы с селектором CSS? Ладно, пошли.
Комбинатор CSS-селекторов
Начнем со знакомой территории. Селекторы комбинатора используются для выбора дочерних элементов, а также братьев и сестер, и существуют уже довольно давно.
- Общий дочерний селектор (пробел), например,
A B
- Прямой дочерний селектор, например,
A> B
- Селектор соседнего родственника, например,
A + B
- Общий родственный селектор, например,
A ~ B
Соседний переключатель A + B
должен быть вам знаком. Он выбирает элемент B
, который следует сразу за A
. Но как насчет общего селектора родственников A ~ B
? Это выбирает все элементы-родственники B
, следующие за A
.
Вот их пример в действии:
См. Селекторы комбинатора Pen
Дэвида Гвайера (@dgwyer)
на CodePen.
Строка Нью-Йорк выбрана, потому что она следует сразу за первой строкой, а последние два города выделены, так как общий селектор братьев и сестер соответствует всем городам после четвертого.
Селекторы CSS атрибутов
Мне очень нравятся селекторы атрибутов. Они настолько гибки, когда вам нужно сопоставить элементы, содержащие атрибуты, с определенными значениями.
См. Pen
Attribute Selectors # 1 Дэвида Гвайера (@dgwyer)
на CodePen.
В этом примере демонстрируется выбор всех элементов ввода флажков и применение стилей к связанным с ними меткам, чтобы сделать их полужирными и окрашенными в синий цвет.
Затем мы переопределяем стиль для флажка с определенным именем chk2
и окрашиваем связанную с ним метку в красный цвет. Обратите внимание на то, что метки других элементов формы не затронуты и к ним не применяются стили меток.
Селекторы атрибутов
предназначены не только для элементов формы, они могут нацеливать атрибуты на любой элемент.Вы можете сопоставить любой атрибут, а не только официально поддерживаемые. Кроме того, вы можете просто проверить наличие атрибута следующим образом:
кнопка [значок]
Соответствует элементам
, которые содержат атрибут icon
. Он будет соответствовать атрибуту независимо от того, является ли он пустым или для него задано определенное значение.
Еще несколько примеров:
См. Селекторы атрибутов Pen
# 2 Дэвида Гвайера (@dgwyer)
на CodePen.
Первая ссылка не имеет атрибута target
, поэтому не соответствует.Следующие две ссылки совпадают, потому что они либо имеют пустой атрибут target
, либо один с определенным значением. Наконец, для последней ссылки устанавливается значение pink
, так как она соответствует атрибуту fluffy
. Его значение не имеет значения и просто должно существовать, чтобы соответствовать a [пушистому] селектору
.
Практическим примером этого может быть выделение изображений, у которых нет атрибута alt
. Этот атрибут необходим для доступности, поэтому для целей SEO важно убедиться, что все элементы изображения содержат этот атрибут.= val] : атрибут начинается с val
A [attr | = val]
: атрибут, значение которого точно соответствует val
ИЛИ начинается с val
, сразу за которым следует тире (дефис)
A [attr $ = val]
: атрибут заканчивается val
A [attr * = val]
: атрибут, который содержит val
в любом месте строки значения
A [attr ~ = val]
: атрибут, в котором значение строка val
ИЛИ содержит val
в списке, разделенном пробелами
Вот пример каждого:
См. Pen
Attribute Selectors # 4 Дэвида Гвайера (@dgwyer)
на CodePen.
Первые два примера очень похожи, за исключением того, что A [attr | = val]
также соответствует значению, за которым следует строка, разделенная тире. Это может быть полезно для сопоставления языковых атрибутов. например
.
Сопоставление расширений файлов упрощается с помощью A [attr $ = "val"]
и в сочетании с :: after
, так что вы также можете легко отобразить сопоставленный файл. Обратите внимание на использование attr ()
и конкатенацию для соединения его со статической строкой.
A [attr * = val]
показывает, как можно сопоставить конкретный домен независимо от того, какой протокол или субдомен используется.
Наконец, у нас есть A [attr ~ = val]
, который отлично подходит для сопоставления значения в атрибуте, состоящем из списка значений, разделенных пробелами. Это соответствует только целому слову, а не фрагментам слова, так как оператор * =
делает так, чтобы слова во множественном числе не совпадали.
Во всех приведенных выше примерах селекторов атрибутов учитывается регистр. Но у нас есть хитрость в рукаве.Если мы вставим i
перед закрывающими квадратными скобками, мы сможем включить сопоставление с учетом регистра.
См. Pen
Attribute Selectors # 5 Дэвида Гвайера (@dgwyer)
на CodePen.
Селекторы пользовательского интерфейса
Если вы работали над стилизацией форм, то наверняка уже сталкивались с этими типами псевдоклассов:
-
: включено
-
: отключено
-
: проверено
Например, мы можем использовать : checked
для оформления простого списка дел.
См. Pen
User Interface Selectors # 1 Дэвида Гвайера (@dgwyer)
на CodePen.
Это довольно стандартно, но в нашем распоряжении есть и другие интересные псевдоклассы.
См. Pen
User Interface Selectors # 2 Дэвида Гвайера (@dgwyer)
на CodePen.
Мы можем использовать псевдоклассы, чтобы напрямую определять, допустимы ли входные значения или нет, с помощью CSS, а также проверять, требуются ли какие-либо элементы перед отправкой формы.
-
: действует
-
: недопустимый
-
: требуется
-
: опционально
(т. Е. Не требуется)
См. Pen
User Interface Selectors # 3 Дэвида Гвайера (@dgwyer)
на CodePen.
Если вы начнете вводить текст в поле ввода личного адреса электронной почты, оно должно быть действительным. Однако рабочий адрес электронной почты всегда необходим и должен быть действительным, поэтому его нельзя оставлять пустым. Также обратите внимание, как мы можем связать псевдоклассы (например,g., : required: invalid
) для достижения того, что нам нужно.
Далее у нас есть два псевдокласса, которые могут соответствовать, если элемент формы (который поддерживает атрибуты min
и max
) находится в диапазоне или нет.
См. Pen
User Interface Selectors # 4 Дэвида Гвайера (@dgwyer)
на CodePen.
Здесь допустимый диапазон составляет от 10
до 20
. Если он находится за пределами диапазона, вы увидите красный фон. Опять же, мы можем использовать тип кнопки сброса, чтобы сбросить значение по умолчанию для элемента ввода числа.
Чтобы завершить этот раздел, давайте взглянем на псевдоклассы : только для чтения,
, : для чтения и записи,
и : заполнители.
См. Pen
User Interface Selectors # 5 Дэвида Гвайера (@dgwyer)
на CodePen.
Их использование позволяет легко сопоставлять элементы, доступные только для чтения или записи (редактируемые). Соответствующие элементы не обязательно должны быть из полей ввода, как показано в примере Pen.
Наконец, : показанный заполнитель
будет соответствовать элементам, с которыми еще не выполнялось взаимодействие, и по-прежнему будет отображать текст заполнителя по умолчанию.
Есть и другие псевдоклассы, которые вы можете использовать для стилизации пользовательских интерфейсов, например:
- Когда элемент имеет фокус:
(: focus)
- Когда пользователь наводит курсор на элемент:
(: hover)
- Когда ссылка была посещена:
(: посещено)
- Когда носитель находится в разных состояниях:
(: воспроизведение),
и(: приостановлено,
).
Вы можете обратиться к этой странице, чтобы узнать больше о псевдоклассах.
Структурные селекторы
Структурные селекторы очень эффективны и сопоставляют элементы в зависимости от их положения в DOM.Они дают вам возможность сопоставлять элементы исключительно с помощью CSS, для чего в противном случае потребовалось бы, чтобы JavaScript делал то же самое.
Этот тип селектора отличается от показанных до сих пор, поскольку некоторые из них позволяют передавать параметр для изменения работы селектора.
Например, : nth-child ()
имеет аргумент, который используется для сопоставления определенного дочернего элемента относительно него. Значение может быть индексом (начиная с 1
) или выражением.
Итак, если бы у нас был список элементов, следующий селектор соответствовал бы третьему элементу:
ul: nth-child (3)
Вместо этого это может быть простое выражение, которое делает псевдокласс еще более мощным.
Допустимые выражения:
-
ul: nth-child (2)
: соответствует второму дочернему элементу -
ul: nth-child (4n)
: соответствует каждому четвертому дочернему элементу (4, 8, 12,…) -
ul: nth-child (2n + 1)
: соответствует каждому второму дочернему элементу, смещенному на единицу (1, 3, 5,…) -
ul: nth-child (3n - 1)
: соответствует смещению каждого третьего дочернего элемента на отрицательное значение (2, 5, 8,…) -
ul: nth-child (odd)
: соответствует элементам с нечетными номерами (1, 3, 5,…) -
ul: nth-child (even)
: соответствует четным элементам (2, 4, 6,…)
Переменная выражения n
всегда начинается с нуля, поэтому, чтобы точно определить, какие элементы будут сопоставлены, начните с n
как ноль, затем n
как 1 и так далее, чтобы составить список элементов.
Вы можете использовать : nth-last-child ()
для сопоставления дочерних элементов с обратным отсчетом (начиная с последнего дочернего элемента). Если вы хотите сопоставить дочерние элементы определенного типа, вы можете использовать : nth-of-type ()
, который ведет отсчет вперед (начиная с первого элемента-брата), и : nth-last-of-type ()
это считается обратным отсчетом.
Вы можете использовать индекс или выражение в качестве параметра для всех этих структурных селекторов.
См. Pen
Structural Selectors # 1 Дэвида Гвайера (@dgwyer)
на CodePen.
: nth-last-child ()
и : nth-last-of-type ()
очень похожи на : nth-child ()
и : nth-of-type ()
, за исключением что они соответствуют последнему элементу, а не первому.
Вы можете проявить творческий подход к селекторам, играя с различными комбинациями. Например, предыдущий пример Pen содержал селектор:
ul: last-of-type li: nth-last-of-type (2) :: after { содержание: «(2-й с конца)»; / * Другие стили… * / }
Соответствует псевдоэлементу, который идет после второго от последнего элемента списка внутри последнего неупорядоченного списка.Если вы когда-либо пытались расшифровать сложный селектор, лучше читать его справа налево, чтобы его можно было логически разобрать.
Следующий набор селекторов - это специализированные структурные селекторы, поскольку они соответствуют только определенным дочерним элементам. Вы не можете передавать им выражения, чтобы изменить их поведение.
-
: первенец
-
: последний ребенок
-
: только ребенок
-
: первый в своем роде
-
: последний тип
См. Pen
Structural Selectors # 2 Дэвида Гвайера (@dgwyer)
на CodePen.
На первый взгляд, здесь много чего происходит, и вы должны быть осторожны при использовании этих типов селекторов, так как вы можете получить результаты, которых не ожидали.
Например, вам может быть интересно, почему текст And so on… синий внутри тега
Селекторы содержимого CSS
Селекторы контента относятся к специализированному набору селекторов для сопоставления контента. Вот те, которые мы можем использовать прямо сейчас:
-
:: first-line
: соответствует первой строке элемента уровня блока -
:: first-letter
: соответствует первой букве первой строки элемента уровня блока -
:: selection
: соответствует части документа, которая была выделена пользователем (например, щелчок и перетаскивание мыши по тексту)
См. Pen
Content Selectors # 1 Дэвида Гвайера (@dgwyer)
на CodePen.
:: first-line
и :: first-letter
работают только при применении к элементам уровня блока. Кроме того, будьте осторожны, используйте :: first-letter
только для определенных элементов, иначе каждый абзац будет иметь буквицу, что, вероятно, не то, что вам нужно!
В разработке есть несколько интересных селекторов контента, которых сейчас нет, но когда они будут поддерживаться, они откроют всевозможные возможности.
Вот список селекторов контента, на которые следует обратить внимание:
-
:: орфографическая ошибка
: проверка орфографии и грамматики на наличие редактируемых элементов -
:: грамматическая ошибка
: соответствует грамматическим ошибкам -
:: target-text
: текст, на который указывает URL-адрес.В настоящее время это доступно в качестве экспериментальной функции в Chrome и Edge
.
Разные селекторы
У нас есть время упомянуть еще пару селекторов, которые не попали ни в одну из предыдущих категорий. Не волнуйтесь, мы почти закончили!
Селектор : target
нацелен на элемент с идентификатором, который соответствует части текущего URL-адреса. Итак, если бы у нас был элемент с идентификатором id
из part1
и URL:
https: // mysite.com # part1
Мы можем сопоставить этот элемент с:
: цель {граница: 1px красный сплошной; }
Если у вас большой селектор, то : is ()
может помочь упростить его. Например, если у вас был следующий селектор:
nav p.content, заголовок p.content, основной p.content, боковая панель p.content, footer p.content { маржа: 15 пикселей; отступ: 10 пикселей; }
Тогда можно упростить с помощью : is ()
и эквивалентно:
: is (nav, header, main, sidebar, footer) p: content { маржа: 15 пикселей; отступ: 10 пикселей; }
Отлично! Это поможет сделать таблицы стилей более удобочитаемыми.
Затем у нас есть : any-link
, который является удобным селектором и делает то же самое, что и : ссылка
и : посещено
вместе.
Итак, эти два селектора будут одинаковыми:
: any-link { красный цвет; } : link,: посещено { красный цвет; }
И это подводит нас к последним селекторам, которые мы рассмотрим в этой статье:
Оба они относятся к языку вашего сайта.
: dir ()
принимает параметр ltr
или rtl
, в зависимости от направления текста, которое вы хотите сопоставить, и в настоящее время поддерживается только в Firefox.
: dir (rtl)
сопоставит все элементы с содержимым с направлением RTL.
Каждый элемент в документе HTML может установить свой собственный индивидуальный язык с помощью атрибута lang
.
Для этого элемента выбран английский язык.Η γλώσσα αυτού του στοιχείου έχει οριστεί στα ελληνικά.Tungumál þessa þáttar er set á íslensku.
Тот же самый основной текст вводится в три тега
lang
, представляют соответствующую страну.-
en
: английский язык -
el
: греческий язык -
- это
: исландский язык
Элементы
: lang ()
:: lang (en) {цвет: красный; } : lang (el) {цвет: зеленый; } : lang (is) {цвет: синий; }
Вот ручка для демонстрации:
См. Pen
Misc Selectors Дэвида Гвайера (@dgwyer)
на CodePen.
Ресурсы для селекторов CSS
Если вы застряли при попытке определить селектор или вам нужно глубже изучить спецификации CSS, вот несколько полезных ресурсов, которые вы, возможно, захотите проверить:
- CSS Diner: это забавная игра для проверки вашего селекторного мастерства
- MDN Web Docs: полезный ресурс для CSS
- Спецификации CSS: в частности, селекторы уровня 4 и модуль псевдоэлементов CSS уровня 4, для последних селекторов, псевдоклассов и псевдоэлементов
- Могу ли я использовать: для проверки совместимости браузера?
Заключение
Надеюсь, эта статья оказалась для вас полезной.Мне, безусловно, было очень интересно освежить свои навыки работы с селектором CSS и поиграть с различными возможностями. Теперь есть много интересных вещей, которые вы можете делать, используя чистый CSS, что интересно дизайнерам, которые могут выполнять довольно сложные стили и анимацию на чистом CSS, и все это без единой строчки JavaScript. Удачного стайлинга!
Ваш интерфейс загружает процессор ваших пользователей?
По мере того, как веб-интерфейсы становятся все более сложными, ресурсоемкие функции требуют все большего и большего от браузера.Если вы заинтересованы в мониторинге и отслеживании использования ЦП на стороне клиента, использования памяти и многого другого для всех ваших пользователей в производственной среде, попробуйте LogRocket. Https://logrocket.com/signup/
LogRocket похож на DVR для веб-приложений , записывая все, что происходит в вашем веб-приложении или на сайте. Вместо того, чтобы гадать, почему возникают проблемы, вы можете агрегировать и составлять отчеты по ключевым показателям производительности внешнего интерфейса, воспроизводить пользовательские сеансы вместе с состоянием приложения, регистрировать сетевые запросы и автоматически обнаруживать все ошибки.
Модернизируйте отладку веб-приложений - начните мониторинг бесплатно.
селекторов | Документация по jQuery API
Выберите все элементы, которые находятся в процессе анимации во время запуска селектора.
Выбирает элементы, которые имеют указанный атрибут со значением, равным заданной строке или начинающимся с этой строки, за которой следует дефис (-).
Выбирает элементы, которые имеют указанный атрибут со значением, содержащим данную подстроку.
Выбирает элементы, которые имеют указанный атрибут со значением, содержащим заданное слово, разделенное пробелами.
Выбирает элементы, которые имеют указанный атрибут со значением, оканчивающимся точно на заданную строку. При сравнении учитывается регистр.
Выбирает элементы, которые имеют указанный атрибут со значением, точно равным определенному значению.
Выберите элементы, которые либо не имеют указанного атрибута, либо имеют указанный атрибут, но не имеют определенного значения.
Выбирает элементы, которые имеют указанный атрибут со значением, начинающимся точно с заданной строки.
Выбирает все элементы кнопки и элементы типа кнопка.
Устанавливает флажок для всех элементов типа.
Соответствует всем отмеченным или выбранным элементам.
Выбирает все прямые дочерние элементы, указанные в «child» элементов, указанных в «parent».
Выбирает все элементы данного класса.
Выбрать все элементы, содержащие указанный текст.
Выбирает все элементы, являющиеся потомками данного предка.
Выбирает все отключенные элементы.
Выбирает все элементы с заданным именем тега.
Выберите все элементы, у которых нет дочерних элементов (включая текстовые узлы).
Выбирает все включенные элементы.
Выберите элемент с индексом n в согласованном наборе.
Выбирает четные элементы с нулевым индексом. См. Также: odd.
Выбирает все элементы типа файла.
Выбирает все элементы, которые являются первыми дочерними элементами своего родителя.
Выбирает все элементы, которые являются первыми среди братьев и сестер с тем же именем элемента.
Выбирает первый совпавший элемент DOM.
Выбирает элемент, если он в данный момент сфокусирован.
Выбрать все элементы с индексом больше индекса в согласованном наборе.
Выбирает элементы с указанным атрибутом с любым значением.
Выбирает элементы, содержащие хотя бы один элемент, соответствующий указанному селектору.
Выбирает все элементы, которые являются заголовками, например h2, h3, h4 и т. Д.
Выбирает все скрытые элементы.
Выбирает один элемент с заданным атрибутом id.
Выбирает все элементы типа image.
Выбирает все элементы input, textarea, select и button.
Выбирает все элементы указанного языка.
Выбирает все элементы, которые являются последними дочерними элементами своего родителя.
Выбирает все элементы, которые являются последними среди братьев и сестер с тем же именем элемента.
Выбирает последний совпавший элемент.
Выбрать все элементы с индексом меньше индекса в согласованном наборе.
Соответствует элементам, которые соответствуют всем указанным фильтрам атрибутов.
Выбирает объединенные результаты всех указанных селекторов.
Выбирает все следующие элементы, соответствующие «next», которым непосредственно предшествует элемент «prev».
Выбирает все одноуровневые элементы, следующие после элемента «prev», имеющие одного и того же родителя и соответствующие фильтрующему селектору «одноуровневые».
Выбирает все элементы, которые не соответствуют заданному селектору.
Выбирает все элементы, являющиеся n-м потомком своего родителя.
Выбирает все элементы, являющиеся n-м дочерним элементом своего родителя, начиная с последнего элемента до первого.
Выбирает все элементы, которые являются n-м потомком своего родителя по отношению к братьям и сестрам с тем же именем элемента, считая от последнего элемента до первого.
Выбирает все элементы, которые являются n-м потомком своего родителя по отношению к братьям и сестрам с тем же именем элемента.
Выбирает нечетные элементы с нулевым индексом. См. Также: даже.
Выбирает все элементы, которые являются единственными дочерними элементами своего родителя.
Выбирает все элементы, у которых нет братьев и сестер с таким же именем элемента.
Выберите все элементы, у которых есть хотя бы один дочерний узел (элемент или текст).
Выбирает все элементы типа пароля.
Выбирает все элементы типа радио.
Выбирает все элементы типа сброса.
Выбирает элемент, являющийся корнем документа.
Выбирает все выбранные элементы.
Выбирает все элементы типа submit.
Выбирает целевой элемент, указанный идентификатором фрагмента URI документа.
Выбирает все элементы ввода текста.
Выбирает все видимые элементы.
CSS-селекторов · Документы WebPlatform
Сводка
Селектор представляет структуру.Эту структуру можно использовать как условие (например, в правиле CSS), определяющее, каким элементам соответствует селектор в дереве документа, или как простое описание фрагмента HTML или XML, соответствующего этой структуре.
Селекторы могут варьироваться от простых имен элементов до богатых контекстных представлений.
Ссылка на селектор CSS
Селектор типа
Универсальный селектор
Селектор атрибутов
Селектор класса
Селектор ID
Псевдоклассы
Динамические псевдоклассы
Целевой псевдокласс
Псевдокласс языка
Элемент пользовательского интерфейса состояния псевдоклассов
Структурные псевдоклассы
Псевдокласс отрицания
Псевдоэлементы
Комбинаторы
Комбинатор потомков
Детский комбинатор
Комбинатор смежных братьев и сестер
Общий родственный комбинатор
Чувствительность к регистру
Синтаксис All Selectors нечувствителен к регистру в пределах диапазона ASCII (т.е.е. [a-z] и [A-Z] эквивалентны), за исключением частей, которые не находятся под контролем Selectors. Чувствительность к регистру имен элементов языка документа, имен атрибутов и значений атрибутов в селекторах зависит от языка документа. Например, в HTML имена элементов нечувствительны к регистру, но в XML они чувствительны к регистру. Чувствительность к регистру префиксов пространств имен определяется в CSS3NAMESPACE.
Синтаксис селектора
Селектор - это цепочка из одной или нескольких последовательностей простых селекторов, разделенных комбинаторами.Один псевдоэлемент может быть добавлен к последней последовательности простых селекторов в селекторе. Последовательность простых селекторов - это цепочка простых селекторов, не разделенных комбинатором. Он всегда начинается с селектора типа или универсального селектора. Никакой другой селектор типа или универсальный селектор не допускается в последовательности.
Простой селектор - это селектор типа, универсальный селектор, селектор атрибутов, селектор класса, селектор идентификатора или псевдокласс.
Комбинаторами
являются: пробел, «знак больше» (U + 003E,>), «знак плюс» (U + 002B, +) и «тильда» (U + 007E, ~).Между комбинатором и простыми селекторами вокруг него может появиться пробел. Только символы «пробел» (U + 0020), «табуляция» (U + 0009), «перевод строки» (U + 000A), «возврат каретки» (U + 000D) и «подача страницы» (U + 000C) ) может стоять в пробелах. Другие символы, похожие на пробелы, такие как «em-пробел» (U + 2003) и «идеографическое пространство» (U + 3000), никогда не являются частью пробела.
Элементы дерева документа, представленные селектором, являются объектами селектора. Селектор, состоящий из единственной последовательности простых селекторов, представляет любой элемент, удовлетворяющий его требованиям.Добавление другой последовательности простых селекторов и комбинатора к последовательности налагает дополнительные ограничения сопоставления, поэтому субъекты селектора всегда являются подмножеством элементов, представленных последней последовательностью простых селекторов.
Пустой селектор, не содержащий последовательности простых селекторов и псевдоэлементов, является недопустимым селектором. Символы в селекторах можно экранировать с помощью обратной косой черты в соответствии с теми же правилами экранирования, что и в CSS. CSS21.
Некоторые селекторы поддерживают префиксы пространства имен.Механизм объявления префиксов пространства имен должен определяться языком, который использует селекторы. Если в языке не указан механизм объявления префиксов пространства имен, префиксы не объявляются. В CSS префиксы пространств имен объявляются правилом @namespace. CSS3NAMESPACE
Группы селекторов
Список селекторов, разделенных запятыми, представляет собой объединение всех элементов, выбранных каждым из отдельных селекторов в списке. (Запятая - U + 002C.) Например, в CSS, когда несколько селекторов используют одни и те же объявления, они могут быть сгруппированы в список, разделенный запятыми.Перед запятой и / или после нее может быть пробел.
В этом примере мы объединяем три правила с идентичными объявлениями в одно. Таким образом,
h2 {font-family: sans-serif}
h3 {font-family: sans-serif}
h4 {font-family: sans-serif}
эквивалентно:
h2, h3, h4 {font-family: sans-serif}
Предупреждение : эквивалентность истинна в этом примере, потому что все селекторы являются допустимыми селекторами. Если бы только один из этих селекторов был недействителен, вся группа селекторов была бы недействительной.Это сделало бы недействительным правило для всех трех элементов заголовка, тогда как в первом случае только одно из трех отдельных правил заголовка было бы недействительным.
Пример неверного CSS:
h2 {font-family: sans-serif}
h3..foo {font-family: sans-serif}
h4 {font-family: sans-serif}
не эквивалентно:
h2, h3..foo, h4 {font-family: sans-serif}
, потому что указанный выше селектор (h2, h3… foo, h4) полностью недопустим, и все правило стиля отбрасывается.(Когда селекторы не сгруппированы, отбрасывается только правило для h3… foo.)
См. Также
Связанные темы
Список выбора
[css / selectors / -ms-scrollbar-shadow-color] (/ css / selectors / -ms-scrollbar-shadow-color) | [css / selectors / ID] (/ css / selectors / ID) | [css / selectors / Namespaced] (/ css / selectors / Namespaced) |
[css / selectors / Type] (/ css / selectors / Type) | [css / selectors / Universal] (/ css / selectors / Universal) | [css / selectors / attribute selector] (/ css / selectors / attribute_selector) |
[CSS / селекторы / атрибуты / равенство] (/ CSS / селекторы / атрибуты / равенство) | [css / селекторы / атрибуты / существование] (/ css / селекторы / атрибуты / существование) | [css / селекторы / атрибуты / дефис] (/ css / селекторы / атрибуты / дефис) |
[css / селекторы / атрибуты / префикс] (/ css / селекторы / атрибуты / префикс) | [css / селекторы / атрибуты / подстрока] (/ css / селекторы / атрибуты / подстрока) | [css / селекторы / атрибуты / суффикс] (/ css / селекторы / атрибуты / суффикс) |
[css / селекторы / атрибуты / пробел] (/ css / селекторы / атрибуты / пробел) | [css / selectors / border-image] (/ css / selectors / border-image) | [CSS / селекторы / класс] (/ CSS / селекторы / класс) |
[css / selectors / селектор классов] (/ css / selectors / class_selector) | [css / селекторы / комбинаторы / смежный брат] (/ css / селекторы / комбинаторы / смежный_сиблинг) | [CSS / селекторы / комбинаторы / дочерний элемент] (/ CSS / селекторы / комбинаторы / дочерний элемент) |
[CSS / селекторы / комбинаторы / потомок] (/ CSS / селекторы / комбинаторы / потомок) | [css / селекторы / комбинаторы / общие родственники] (/ css / selectors / комбинаторы / general_sibling) | [css / selectors / cursor] (/ css / selectors / cursor) |
[css / selectors / id selector] (/ css / selectors / id_selector) | [css / selectors / outline] (/ css / selectors / outline) | [CSS / селекторы / цвет контура] (/ css / селекторы / цвет контура) |
[CSS / селекторы / стиль контура] (/ css / селекторы / стиль контура) | [CSS / селекторы / ширина контура] (/ CSS / селекторы / ширина контура) | [css / selectors / псевдоклассы] (/ css / selectors / псевдоклассы) |
[css / selectors / псевдоклассы /: - ms-input-placeholder] (/ css / selectors / псевдоклассы /: - ms-input-placeholder) | [css / selectors / псевдоклассы /: active] (/ css / selectors / псевдоклассы /: active) | [css / selectors / псевдоклассы /: проверено] (/ css / selectors / псевдоклассы /: проверено) |
[css / selectors / псевдоклассы /: отключено] (/ css / selectors / псевдоклассы /: отключено) | [css / selectors / псевдоклассы /: пусто] (/ css / selectors / псевдоклассы /: пусто) | [css / selectors / псевдоклассы /: включено] (/ css / selectors / псевдоклассы /: включено) |
[css / selectors / псевдоклассы /: первый ребенок] (/ css / selectors / псевдоклассы /: первый ребенок) | [css / selectors / pseudo-classes /: first-of-type] (/ css / selectors / pseudo-classes /: first-of-type) | [css / selectors / псевдоклассы /: focus] (/ css / selectors / псевдоклассы /: focus) |
[css / selectors / псевдоклассы /: hover] (/ css / selectors / псевдоклассы /: hover) | [css / selectors / псевдоклассы /: в диапазоне] (/ css / selectors / псевдоклассы /: в диапазоне) | [css / selectors / псевдоклассы /: неопределенный] (/ css / selectors / псевдоклассы /: неопределенный) |
[css / selectors / псевдоклассы /: недопустимые] (/ css / selectors / псевдоклассы /: недопустимые) | [css / selectors / псевдоклассы /: lang (c)] (/ css / selectors / псевдоклассы /: lang (c)) | [css / selectors / pseudo-classes /: last-child] (/ css / selectors / псевдоклассы /: last-child) |
[css / selectors / pseudo-classes /: last-of-type] (/ css / selectors / pseudo-classes /: last-of-type) | [css / selectors / псевдоклассы /: ссылка] (/ css / selectors / псевдоклассы /: ссылка) | [css / selectors / псевдоклассы /: не] (/ css / selectors / псевдоклассы /: нет) |
[css / селекторы / псевдоклассы /: nth-child (n)] (/ css / selectors / псевдоклассы /: nth-child (n)) | [css / selectors / псевдоклассы /: nth-last-child (n)] (/ css / selectors / псевдоклассы /: nth-last-child (n)) | [css / selectors / псевдоклассы /: nth-last-of-type (n)] (/ css / selectors / псевдоклассы /: nth-last-of-type (n)) |
[css / selectors / псевдоклассы /: nth-of-type (n)] (/ css / selectors / псевдоклассы /: nth-of-type (n)) | [css / selectors / псевдоклассы /: only-child] (/ css / selectors / псевдоклассы /: only-child) | [css / selectors / pseudo-classes /: only-of-type] (/ css / selectors / pseudo-classes /: only-of-type) |
[css / selectors / псевдоклассы /: необязательно] (/ css / selectors / псевдоклассы /: необязательно) | [css / selectors / псевдоклассы /: требуется] (/ css / selectors / псевдоклассы /: требуется) | [css / selectors / псевдоклассы /: root] (/ css / selectors / псевдоклассы /: root) |
[css / selectors / псевдоклассы /: target] (/ css / selectors / псевдоклассы /: target) | [css / selectors / псевдоклассы /: допустимые] (/ css / selectors / псевдоклассы /: допустимые) | [css / selectors / псевдоклассы /: посещены] (/ css / selectors / псевдоклассы /: посещены) |
[css / selectors / псевдоклассы / Динамические псевдоклассы] (/ css / selectors / псевдоклассы / Dynamic_pseudo-классы) | [css / selectors / псевдоклассы / Структурные псевдоклассы] (/ css / selectors / псевдоклассы / Structural_pseudo-классы) | [css / selectors / псевдоклассы / псевдоклассы состояний элементов пользовательского интерфейса] (/ css / selectors / псевдоклассы / ui_element_states_pseudo-классы) |
[css / selectors / псевдоэлементы] (/ css / selectors / псевдоэлементы) | [css / selectors / псевдоэлементы / :: after] (/ css / selectors / псевдоэлементы / :: after) | [css / selectors / псевдоэлементы / :: before] (/ css / selectors / псевдоэлементы / :: before) |
[css / selectors / псевдоэлементы / :: first-letter] (/ css / selectors / псевдоэлементы / :: first-letter) | [css / selectors / псевдоэлементы / :: first-line] (/ css / selectors / псевдоэлементы / :: first-line) | [css / selectors / псевдоэлементы / :: region] (/ css / selectors / псевдоэлементы / :: region) |
[css / selectors / псевдоэлементы / :: selection] (/ css / selectors / псевдоэлементы / :: selection) | [css / selectors / type] (/ css / selectors / type) | [css / selectors / универсальный селектор] (/ css / selectors / universal_selector) |
[css / selectors / user-select] (/ css / selectors / user-select) | [css / selectors / zoom] (/ css / selectors / zoom) |
## Связанные спецификации
- Селекторы уровня 3
- Рекомендация
Селекторы CSS в Selenium: пример поиска элементов
В этой статье будет обсуждаться и описываться с примерами, как можно использовать селекторы CSS для идентификации веб-элементов в тестах Selenium.Он также будет отображать синтаксис селекторов CSS в Selenium.
Рекомендуется получить более глубокое понимание локаторов в Selenium, прежде чем сужать его, в частности, до селекторов CSS.
Что такое селектор CSS?
По сути, CSS Selector объединяет селектор элемента и значение селектора, которое может идентифицировать определенные элементы на веб-странице. Как и XPath, селектор CSS можно использовать для поиска веб-элементов без идентификатора, класса или имени.
Типы селекторов CSS (с примерами)
В тестах Selenium есть 5 типов селекторов CSS -
- ID
- Класс
- Атрибут
- Подстрока
- Внутренняя строка
- HTML-тег : используется для обозначения веб-элемента, к которому будет осуществляться доступ
- # : используется для обозначения атрибута ID.Обратите внимание, что хэш является обязательным в случаях, когда атрибут ID используется для создания селектора CSS.
- Значение атрибута ID : значение атрибута ID, к которому осуществляется доступ. Этому значению всегда предшествует хеш.
- . : точка используется для обозначения атрибута Class . Обратите внимание, что точка является обязательной в тех случаях, когда атрибут Class используется для создания селектора CSS. Значению класса всегда предшествует точка.
- Attribute : используется для создания селектора CSS.Это может быть значение, тип, имя и т. Д. Лучше всего выбрать атрибут со значением, которое однозначно идентифицирует веб-элемент, к которому осуществляется доступ.
- Значение атрибута : значение атрибута, к которому осуществляется доступ.
- # : символ, используемый для сопоставления строки с суффиксом.
- Суффикс: строка, на основе которой выполняется операция сопоставления.
- * : символ, соответствующий строке с использованием подстроки
- Подстрока : строка на на основе которой выполняется операция сопоставления.
- : - двоеточие используется для обозначения метода contains
- contains - значение Атрибут класса, к которому осуществляется доступ
Обновление: Функцияустарела и больше не поддерживается стандартом W3C. Стандарт CSS-селекторов 3-го уровня применим во всех основных браузерах. - текст - текст, отображаемый в любом месте веб-страницы, независимо от его местоположения
9286 90 .ID
В этом примере сценарий будет обращаться к текстовому полю Email в форме входа на Gmail.com
Текстовое поле содержит атрибут ID со значением «Email». В этом случае атрибут ID и его значение используются для создания селектора CSS, который позволяет получить доступ к текстовому полю.
Как создать селектор Selenium CSS для веб-элемента
Найдите веб-элемент - текстовое поле электронной почты. HTML-тег здесь означает « вход », а значение атрибута ID - « Электронная почта ».Вместе они относятся к текстовому полю электронной почты. Это данные, необходимые для создания селектора CSS.
Источник изображения
Проверить значение локатора
Введите « css = input # Email » (значение локатора) в Selenium IDE. Щелкните кнопку "Найти". Текстовое поле Электронная почта выделено, подтверждая значение локатора.
Источник изображения
Синтаксис
css = <#> <Значение атрибута ID>
При указании селектора CSS в целевом текстовом поле Selenium IDE убедитесь, что ему предшествует « css = ».
Примечание : Если несколько веб-элементов имеют одинаковый тег HTML и значение атрибута, будет идентифицирован первый элемент, отмеченный в источнике страницы.
2. Class
В этом примере сценарий получит доступ к флажку «Оставаться в системе» , который отображается под формой входа на Gmail.com.
Флажок содержит атрибут класса со значением « запомнить ». Этот атрибут и значение Class можно использовать для создания селектора CSS, который обращается к выбранному веб-элементу.
Вот как создать селектор CSS для веб-элемента.
Найдите веб-элемент - флажок «Оставаться в системе».HTML-тег в данном случае - это « label» , а значение атрибута ID - « запомнить ». Вместе они относятся к флажку «Оставаться в системе».
Проверить значение локатора
Введите « css = label.remember » (значение локатора) в Selenium IDE. Нажмите кнопку "Найти". Флажок «Оставаться в системе» выделен, подтверждая значение локатора.
Источник изображения
Синтаксис
css = <.> <Значение атрибута класса>
Популярно среди читателей: Как работать с классом Action в Selenium
3. Атрибут
В этом примере скрипт получит доступ к кнопке «Войти» , расположенной под формой входа. в Gmail.com.
Кнопка «Войти» содержит атрибут типа со значением « отправить ». Этот атрибут типа и его значение можно использовать для создания селектора CSS, который будет обращаться к предпочтительному веб-элементу.
Вот как создать селектор CSS в Selenium для веб-элемента
Найдите веб-элемент - кнопка «Войти». HTML-тег , в данном случае , - « input », атрибут - это тип, а значение атрибута - «submit».Вместе они относятся к кнопке «Войти».
Проверить значение локатора
Введите « css = input [type =’ submit ’] » (значение локатора) в Selenium IDE. Нажмите кнопку "Найти". Кнопка «Войти» будет выделена, подтверждая значение локатора.
Источник изображения
Синтаксис
css = <[attribute = Value of attribute]>
Совет для профессионалов: Хотите глубже погрузиться в реализацию Selenium в BrowserStack с бесплатными интерактивными курсами и лабораторными упражнениями? Посетите Test University
4. Подстрока
В Selenium CSS позволяет сопоставить частичную строку, которая предлагает способ создания селекторов CSS с использованием подстрок.= 'Pass']
Сопоставить суффикс
Цель этого состоит в том, чтобы соответствовать строке с помощью соответствующего суффикса.
Синтаксис
css = <[attribute $ = суффикс строки]>
Опять же, если кто-то намеревается идентифицировать «Текстовое поле пароля» , селектор CSS в этом случае будет:
css = input # Passwd [name $ = 'wd']
Соответствует подстроке
Цель этого - соответствовать строке с помощью соответствующей подстроки.
Синтаксис
css =<[атрибут * = подстрока]>
Опять же, если кто-то намеревается идентифицировать « текстовое поле пароля », соответствующий селектор CSS будет:
css = input # Passwd [name $ = 'wd']
Прочтите руководство: шагов для Автоматизация входа с помощью Selenium WebDriver
5.Внутренний текст
Использование внутреннего текста помогает идентифицировать и создавать селекторы CSS в Selenium WebDriver за счет использования строкового шаблона, который HTML-тег проявляет на веб-странице. Этот механизм чаще всего используется для поиска веб-элементов из-за его упрощенного синтаксиса.
В этом примере сосредоточьтесь на «Забыли адрес электронной почты?» гиперссылка находится под формой входа на Gmail.com.
Тег привязки, представляющий эту гиперссылку, содержит текст. Этот текст можно использовать для создания селектора CSS, который находит требуемый веб-элемент.
Синтаксис
css = <:><(text)>
Это полезный навык для поиска элемента с помощью селекторов CSS, особенно потому, что он используется опытными разработчиками и тестировщиками. Освоив его, можно использовать Selenium в полной мере, тем самым оптимизируя его возможности для автоматического тестирования Selenium.
Запустить автоматический тест Selenium бесплатно
Соответствует селектору CSS в Диспетчере тегов Google (полностью объяснено)
Вы хотите сузить отслеживание до определенных элементов на своем веб-сайте с помощью Диспетчера тегов Google?
С помощью метода селектора CSS в Диспетчере тегов Google вы можете фильтровать любой заданный элемент, если сравниваете его с элементом HTML.
В этом руководстве мы узнаем, как настроить таргетинг на определенные элементы в дереве DOM с помощью его селектора CSS.
Обзор того, что мы рассмотрим:
Итак, приступим!
Что такое селектор CSS?
Селекторы
CSS определяют элементы HTML и используются для идентификации конкретного элемента в соответствии с атрибутами, за которыми они следуют.
Многие программисты обычно используют селекторы CSS, чтобы выбрать, какие элементы HTML следует стилизовать определенным образом.Вы можете выбирать элементы на основе идентификатора, имени, класса или атрибутов.
Однако селекторы CSS не , а полезны для стилизации CSS. Они также могут улучшить наше отслеживание, помогая нам выбирать элементы HTML, связанные с импортом взаимодействий с пользователем.
При отслеживании в Диспетчере тегов Google можно использовать селекторы CSS для фильтрации триггеров. Например, мы можем использовать его для запуска триггера только тогда, когда элемент HTML совпадает с селектором CSS .
Если мы знаем селектор CSS для определенного элемента HTML, мы можем связать триггер с этим элементом.Это позволяет нашему отслеживанию быть конкретным и узконаправленным.
Когда можно использовать селекторы CSS?
Селекторы
CSS полезны в любое время, когда вы хотите отфильтровать отслеживание на основе взаимодействия пользователя с конкретным элементом . Вы реализуете селекторы CSS как часть конфигурации триггера в Диспетчере тегов Google.
Допустим, у вас есть тег события, который отслеживает исходящие ссылки на вашем сайте. Если все ваши исходящие ссылки относятся к одной категории (например, к вашему магазину электронной коммерции или вашим учетным записям в социальных сетях), вам может не потребоваться различать разные ссылки.
Однако, если ваши исходящие ссылки ведут к разным филиалам, страницам социальных сетей или другим местам, вы можете использовать селекторы CSS, чтобы помочь вам отслеживать взаимодействие пользователей с разными ссылками.
Например, если вы используете конструктор веб-сайтов или бесплатную тему, нижний колонтитул вашей страницы может содержать ссылки на хост веб-сайта или создателя темы.
Поскольку клики по этим исходящим ссылкам не помогают вашему бизнесу, вы можете отличить их от кликов по ссылкам на ваш интернет-магазин или социальные сети.
Но если ваш триггер Диспетчера тегов Google настроен только для исходящих ссылок, вы не сможете легко отличить тег, который активируется для ссылки вашего интернет-магазина, от ссылки на тему WooCommerce, когда вы позже проанализируете свои данные.
Решение: селекторы CSS.
Пример сценария использования: запуск события при переходе по ссылке Nofollow
Итак, как мы можем использовать селекторы CSS для идентификации определенных элементов, таких как эти исходящие ссылки?
Если вы щелкните правой кнопкой мыши одну из этих ссылок и перейдете к Проверить элемент , вы сможете увидеть определенные атрибуты элемента в дереве DOM.
В этом случае вы заметите, что эта исходящая ссылка имеет класс rel = "nofollow" в HTML.
Ссылки Nofollow указывают роботам поисковых систем не учитывать эти ссылки при ранжировании страниц. Они предотвращают пометку ссылок сканерами как спам (что может повредить SEO сайта), поэтому они обычно используются для платных ссылок, конкурентов и, как показано здесь, для нижних колонтитулов, созданных разработчиками.
Допустим, мы хотим отфильтровать тег исходящей ссылки так, чтобы он срабатывал только тогда, когда пользователь нажимает ссылку nofollow.
Нет проблем. Диспетчер тегов Google позволяет легко фильтровать триггеры, если вы знаете, что ищете.
В этом случае нам нужен уникальный элемент, который поможет нам различать ссылки nofollow.
Но если вы проверите уровень данных, вы обнаружите, что ни одна из переменных Диспетчера тегов Google по умолчанию не сообщает нам, что это ссылка nofollow .
Поскольку мы знаем, что эта конкретная ссылка является ссылкой nofollow, теоретически может указать нашему триггеру срабатывание для этого конкретного URL.Но тогда нам пришлось бы создать отдельный триггер и отдельный тег для для каждой ссылки nofollow .
Очевидно, что это не очень эффективное решение, и оно не учитывает любые будущие ссылки nofollow, которые вы можете добавить на свой сайт.
Вот тут-то и пригодятся селекторы CSS.
Если щелкнуть ссылку в режиме предварительного просмотра GTM и проверить Click Element в консоли предварительного просмотра, вы заметите, что он указан как объект на уровне данных.
Поскольку это объект уровня данных, мы можем копнуть немного глубже в элементе, используя наши инструменты разработчика, чтобы найти селектор CSS.
Выбор желаемого элемента
В меню браузера перейдите в Дополнительные инструменты → Инструменты разработчика , затем перейдите на вкладку Console в окне разработчика.
На вкладке консоли воспользуемся командой dataLayer . Это вернет последнее событие на уровне данных, которое должно быть ссылкой nofollow, которую вы хотите отслеживать.(Если это не так, просто щелкните ссылку еще раз, чтобы вернуть правильное событие.)
Мы видим, что gtm.element - это « a » для этой ссылки nofollow. Это означает, что это элемент HTML.
Одним из предварительных условий использования метода селектора CSS является сопоставление элемента с селектором CSS только , если это элемент HTML. Поскольку мы подтвердили, что это правда, мы можем продолжить использование этого метода.
Вернемся к нашему разделу элементов, где мы проверяли ссылку.Мы знаем, что атрибут этой ссылки - rel = ”nofollow” из нашей предыдущей проверки.
Мы можем использовать этот атрибут для однозначной идентификации ссылок nofollow. Мы просто воспользуемся следующей командой JavaScript в нашей консоли:
document.queryselectorALL ('[rel = "nofollow"]')
Этот код вернет все элементы с этим атрибутом, а также их значения.
На этом этапе вы должны дважды проверить все возвращенные элементы, чтобы убедиться, что вы выбрали все желаемые элементы и нет нежелательных элементов.Если это правда, мы можем использовать этот селектор для нашего фильтра.
Определите триггер элемента Click
Как только мы нашли селектор CSS, который можем использовать, давайте скопируем его, чтобы определить наш триггер в Диспетчере тегов Google.
Откройте триггер, который вы хотите отфильтровать, с помощью селектора CSS. В конфигурации триггера выберите переменную, которую вы хотите сопоставить с селектором CSS. В нашем примере мы добавляем переменную Click Element в триггер клика, который уже срабатывает для всех исходящих ссылок.
Выберите вариант соответствует CSS-селектору и вставьте селектор, который мы скопировали - в данном случае [rel = ”nofollow”] .
И все!
Сохраним этот триггер и продемонстрируем процесс тестирования.
Тестирование
Чтобы убедиться, что этот триггер работает должным образом, мы должны сначала щелкнуть различные ссылки, которые, как мы знаем, являются , а не ссылками nofollow. Если триггер настроен правильно, он не сработает.Это потому, что наш элемент не соответствует селектору CSS «nofollow».
Затем мы должны щелкнуть любую ссылку nofollow, чтобы убедиться, что триггер сработал. Когда селектор CSS соответствует нашему элементу щелчка, он срабатывает.
Итак, наш триггер работает и срабатывает только тогда, когда ссылка содержит атрибут nofollow.
Сводка
Вот и все! Вот как вы можете использовать метод селектора CSS в Диспетчере тегов Google.
Конечно, для успешного использования этого метода очень важно знать CSS и то, как выбирать элементы.Если вы новичок, я бы порекомендовал пройти обучение.