Plus css selector: Соседние селекторы | htmlbook.ru
Содержание
Соседние селекторы | 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 селекторы
CSS селекторы — это, по сути, определенные наборы html-элементов на странице, для которых задается некое форматирование. Т.е. это выборка элементов во определенным параметрам — имени тега, id, классу или группе каких-либо параметров.
Запись правил CSS
Записываются правила css внутри фигурных скобок в виде пар свойство: значение свойства, разделенных точкой с запятой. Причем блок с фигурными скобками всегда «принадлежит» какому-либо селектору.
Универсальный селектор
Это селектор, который задает форматирование для всех элементов страницы, включая html и body. Записывается так:
* {
font-family: Verdana, Tahoma, sans-serif;
font-size: 14px;
}
* { font-family: Verdana, Tahoma, sans-serif; font-size: 14px; } |
Этим правилом мы сказали, что все элементы с текстом на странице будут иметь шрифт семейства Tahoma, Verdana, sans-serif и размер шрифта в 14px.
Этот селектор имеет невысокий приоритет, равный 0 и правила, заданные в нем, могут быть переопределены любым другим селектором. Тем не менее он может быть очень полезен для задания таких свойств, как box-sizing или margin для всех элементов сразу.
Селектор элемента (или типа)
Этот селектор предполагает, что мы назначаем правила форматирования для всех однотипных элементов (или тегов) на странице (или на всем сайте). В любом браузере для всех тегов есть своя css-таблица, которая отображает внешний вид элементов в соответствии с рекомендациями W3C, но поскольку между разными браузерами все же существуют некоторые отличия в css-правилах для элементов + каждый сайт в соответствии с разработанным дизайном может требовать внесения изменений в эти правила, используют селектор элементов довольно часто. Для этого в css записывают название тега без всяких угловых скобок. Например,
h3 {
font-weight: normal;
font-size: 42px;
}
h3 { font-weight: normal; font-size: 42px; } |
Эти правила отменяют жирный по умолчанию шрифт для заголовков второго уровня и увеличивают размер шрифта.
«Вес» этого селектора равен единице.
Селектор класса
Определяет правила для всех элементов, у которых есть атрибут. Перед именем класса нужно просто поставить точку в css:
.someclass {
margin: 20px;
padding: 10px;
border: 1px solid #dfe;
}
.someclass { margin: 20px; padding: 10px; border: 1px solid #dfe; } |
Т.е. данным селектором определяется, что любому элементу с классом someclass будут заданы внешние и внутренние отступы и рамка. Это могут быть и блочные div, и p, и blockquote, и h3, и даже строчный span.
Есть разновидность этого селектора, которая говорит о том, что форматирование назначается для определённого элемента с таким классом. Так, например, селектор
div.someclass {
text-align: center;
}
div.someclass { text-align: center; } |
говорит о том, что только для элементов div с атрибутом выравнивание текста будет по центру. Для всех остальных элементов с этим классом выравнивание текста будет слева (по умолчанию).
Приоритет этого селектора выражается цифрой 10.
Также может быть использован селектор, который предполагает, что правила задаются для тега, имеющего сразу 2 класса. В html код выглядит так:
<div>
Содержимое div-a
</div>
<div> Содержимое div-a </div> |
А в css правила могут быть заданы следующим образом:
.about.container {
background-color: pink;
width: 1000px;
margin: auto;
}
.about.container { background-color: pink; width: 1000px; margin: auto; } |
Т.е. между названиями 2-х классов нет пробелов, а точка ставится перед именем каждого класса. Учтите, что такой вариант предусматривает наличие обоих классов у элемента, для того чтобы к нему применилось соответствующее форматирование. Если элементу назначен только класс about или только класс container, правила НЕ применятся.
На практике к такому элементу с 2-мя классами чаще всего применяется форматирование, описанное для каждого класса в отдельности, например, так:
.about{
background-color: pink;
}
.container {
width: 1000px;
margin: auto;
}
.about{ background-color: pink; } .container { width: 1000px; margin: auto; } |
В том случае правила из разных классов как бы «складываются» и применяются в совокупности. Если же какие-то правила повторяются и в том, и в другом классе, то важен порядок их следования в CSS:
.content {
width: 80%;
margin: auto;
background-color: red;
font-family: serif;
}
.about {
background-color: pink;
font-family: sans-serif;
}
.content { width: 80%; margin: auto; background-color: red; font-family: serif; } .about { background-color: pink; font-family: sans-serif; } |
В данном примере класс content имеет красный цвет фона и шрифт с засечками, а класс about имеет розовый цвет фона и шрифт без засечек. И поскольку он записан в css-стилях ниже правил для класса content, то в какой бы последовательности мы не ставили эти классы в html-коде, у нас все равно будет блок с розовым фоном и шрифтом без засечек. Т.е. правила класса about перечеркивают соответствующие правила класса content. Посмотрите, как это выглядит в Инспекторе свойств (F12 или Ctrl+Shift+I):
Реальный пример:
Material confined likewise it humanity raillery an unpacked as he. Three chief merit no if. Now how her edward engage not horses. Oh resolution he dissimilar precaution to comparison an. Matters engaged between he of pursuit manners we moments. Merit gay end sight front. Manor equal it on again ye folly by match. In so melancholy as an sentiments simplicity connection. Far supply depart branch agreed old get our.
Use securing confined his shutters. Delightful as he it acceptance an solicitude discretion reasonably. Carriage we husbands advanced an perceive greatest. Totally dearest expense on demesne ye he. Curiosity excellent commanded in me. Unpleasing impression themselves to at assistance acceptance my or. On consider laughter civility offended.
Material confined likewise it humanity raillery an unpacked as he. Three chief merit no if. Now how her edward engage not horses. Oh resolution he dissimilar precaution to comparison an. Matters engaged between he of pursuit manners we moments. Merit gay end sight front. Manor equal it on again ye folly by match. In so melancholy as an sentiments simplicity connection. Far supply depart branch agreed old get our.
Any delicate you how kindness horrible outlived servants. You high bed wish help call draw side. Girl quit if case mr sing as no have. At none neat am do over will. Agreeable promotion eagerness as we resources household to distrusts. Polite do object at passed it is. Small for ask shade water manor think men begin.
Группировка селекторов
Группировка селекторов предполагает, что css-правила задаются сразу для нескольких элементов. Необходимо это бывает тогда, когда ряд элементов имеет общие правила. И код будет компактней, если написать эти правила сразу для нескольких селекторов, а уже для каждого в отдельности писать отличия.
Например, общие правила для 3-х классов:
.block-red,
.block-green,
.block-yellow {
box-sizing: border-box;
border: 2px dotted;
padding: 15px;
width: 32%;
margin-right: 1.3%;
float: left;
color: #fff;
}
.block-red {
background-color: red;
border-color: #900;
}
.block-green {
background-color: green;
border-color: #090;
}
.block-yellow {
background-color: yellow;
border-color: #f90;
color: brown;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | .block-red, .block-green, .block-yellow { box-sizing: border-box; border: 2px dotted; padding: 15px; width: 32%; margin-right: 1.3%; float: left; color: #fff; } .block-red { background-color: red; border-color: #900; } .block-green { background-color: green; border-color: #090; } .block-yellow { background-color: yellow; border-color: #f90; color: brown; } |
В общих правилах заданы такие свойства, как ширина, отступы, вид и толщина рамки и цвет текста.
А в правилах для каждого отдельного класса добавлен цвет фона и цвет рамки. Для самого последнего класса также задан цвет текста (color: brown), который переопределит белый цвет, заданный в общих правилах, т.к. записан ниже общих правил.
Т.е., если в большинстве элементов вам нужно использовать какое-либо одинаковое свойство, вы можете записать его в общих правилах, а затем для одного (или 2-х) элементов переписать его. Важно, чтобы это было сделано после общих правил.
Be at miss or each good play home they. It leave taste mr in it fancy. She son lose does fond bred gave lady get. Sir her company conduct expense bed any. Sister depend change off piqued one.
Be at miss or each good play home they. It leave taste mr in it fancy. She son lose does fond bred gave lady get. Sir her company conduct expense bed any. Sister depend change off piqued one.
Be at miss or each good play home they. It leave taste mr in it fancy. She son lose does fond bred gave lady get. Sir her company conduct expense bed any. Sister depend change off piqued one.
Селектор id
Селектор id имеет приоритет в 100 баллов и предполагает, что правила записываются для одного единственного элемента на странице. По правилам id — это уникальный идентификатор, который может быть назначен как атрибут только одному элементу на странице.
Сразу оговорюсь, что это НЕ значит, что на странице может быть только один элемент с атрибутом id. Это значит, что значение этого атрибута должно быть уникальным и иметь именно такой id может единственный элемент на странице.
Например, в разметке может быть следующий код:
<header>
<div>
<img src=»img/logo.png» alt=»Logo»>
</div>
</header>
<section>
текст
</section>
<section>
текст
</section>
<section>
текст
</section>
<section>
текст
</section>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <header> <div> <img src=»img/logo.png» alt=»Logo»> </div> </header> <section> текст </section> <section> текст </section> <section> текст </section> <section> текст </section> |
Т.е. в заголовочной части страницы (или «шапке» сайта) может быть див с, в котором будет находится изображение с логотипом компании. А вся страница может быть разбита на ряд разделов (секций — тег section) с одним и тем же классом, но разными id. Но при этом значения id НЕ ПОВТОРЯЮТСЯ!
В CSS запишем следующие правила:
#logo img {max-width: 100%;}
.container {
width: 90%;
margin: auto;
padding: 20px 10px;
}
#about {background-color: pink; }
#services {background-color: #da5; }
#portfolio {background-color: #3d6a85; }
#contacts {background-color: #cda; }
#logo img {max-width: 100%;} .container { width: 90%; margin: auto; padding: 20px 10px; } #about {background-color: pink; } #services {background-color: #da5; } #portfolio {background-color: #3d6a85; } #contacts {background-color: #cda; } |
В данном случае мы видим все прелести использования класса — он всего один для всех section
, но при этом задает им одинаковое форматирование с точки зрения ширины, внешних (margin
) и внутренних (padding
) отступов. А для различных id заданы только разные цвета фона.
Пример в «натуральном виде»:
About
On then sake home is am leaf. Of suspicion do departure at extremely he believing. Do know said mind do rent they oh hope of.
Services
General enquire picture letters garrets on offices of no on. Say one hearing between excited evening all inhabit thought you. Style begin mr heard by in music tried do. To unreserved projection no introduced invitation.
Portfolio
Particular use for considered projection cultivated. Worth of do doubt shall it their. Extensive existence up me contained he pronounce do. Excellence inquietude assistance precaution any impression man sufficient.
Contacts
Talent she for lively eat led sister. Entrance strongly packages she out rendered get quitting denoting led. Dwelling confined improved it he no doubtful raptures. Several carried through an of up attempt gravity. Situation to be at offending elsewhere distrusts if.
Возможно, у вас возникнет вопрос — а почему нельзя было использовать 2 класса, как в примере выше? Дело в том, что id — это еще и определенные якоря — т.е. закладки для внутренних ссылок, переход на которые осуществляется из меню, например, на одностраничных сайтах. И с помощью классов этого не сделать. Во-вторых, id имеет значительно больший приоритет, поэтому для селектора id можно переписать правила, заданные в любом классе. И, в-третьих, правила могут быть намного сложнее, чем в примере, и существовать в единичном варианте на странице. Тогда привязка их к селектору id — оптимальный выбор.
В отдельной статье вы можете прочитать об использовании псевдокласса :not и псевдоэлементах (::before, ::after, ::selection, :first-letter, :first-line).
P.S. Правил css за годы существования каскадных таблиц стилей было создано великое множество. Посмотреть, что представляет собой каждое свойство можно на сайте htmlbook.ru или его обновленной версии WebReference.ru.
Просмотров:
600
Количественные CSS селекторы / Хабр
Вам когда-нибудь хотелось прямо в CSS коде посчитать, в меню 4 элемента или 10? Для четырех задать им ширину по 25%, а если набралось десять — прижать их друг к другу и уменьшить отступы?
Как выяснилось, CSS умеет работать с разным количеством элементов, позволяя избавиться от головных болей и лишнего кода на js.
Динамичный контент
Респонсив дизайн
обычно ассоцируется с одной переменной — пространством. Когда мы тестируем респонсив сетки, мы берем какой-то объем контента и смотрим, сколько места он займет, как это выглядит и куда он влазит, а куда нет. То есть, контент считается константой, а пространство — переменной.
Media query являются основой респонсив дизайна, так как позволяют размечать границы, переходя которые одна сетка меняется на другую. Однако, на расстановку элементов и пространство вокруг них может влиять не только размер экрана, но и собственно сам контент.
Точно так же, как посетители сайта могут пользоваться множеством устройств с разными размерами экранов, ваши контент-менеджеры и редакторы могут добавлять или удалять контент. У них даже для этого целые CMS есть. Именно поэтому дизайны страниц в фотошопе потеряли свою актуальность — в них всегда фиксированная ширина экрана и всегда фиксированный контент.
В этой статье я опишу технику создания CSS, лишенного проблем с количеством (подсчётом) элементов. Достигается это за счёт специально оформленных селекторов. Я буду применять их в контесте решения классической проблемы: как разделить вёрстку элементов в горизонтальном меню сайта, когда в нём мало и много элементов. Например, как добиться того, что при 6 и более пунктах меню элементы имели стиль display: inline-block, а при меньшем количестве — display: table-cell.
Я не буду использовать шаблонизацию или js, мне даже не понадобятся прописывать классы у элементов меню. Техника использования только CSS селекторов соответствует принципу разделения интересов, согласно которому, контент (HTML) и отображение (CSS) имеют ясно обозначенные роли. Разметка — это работа CSS и, по возможности, одного только CSS.
Демо доступно на CodePen и еще будет упоминаться по ходу статьи.
Чтобы упростить понимание, я буду использовать картинки с кальмарами вместо HTML тегов. Зеленые кальмары будут за элементы, которые попадают под конкретный селектор, красные — за те, которые не попадают, а серые будут значить, что элемента не существует.
Счёт
Чтобы узнать количество элементов, их нужно посчитать.
Прим. пер
Капитан
CSS не даёт явного «подсчитывающего API», но мы можем решить эту проблему в обход, комбинируя селекторы нужным образом.
Считаем до одного
Селектор :only-child срабатывает на элементах, которых всегда одна штука. По сути, это позволяет нам «применить стили ко всем дочерним элементам конкретного элемента, если суммарно их ровно 1». Это единственный простой селектор, который можно описать как «подсчитывающий» (кроме, конечно, похожего на него :only-of-type).
В описанном ниже примере я использую :only-of-type, чтобы применить стили ко всем кнопкам, которые являются единственными чилдами-кнопками среди их соседей.
button {
font-size: 1.25em;
}
button:only-of-type {
font-size: 2em;
}
Важно понимать, что очередность строк здесь имеет ключевое значение. Кроме этого, полезно видеть этот код с точки зрения селекта «меньше-чем-два»:
Аналогично, мы теперь можем сделать селект «больше-чем-один», используя отрицание.
/* "больше-чем-один" будут иметь уменьшенный размер шрифта */
button {
font-size: 2em;
}
button:not(:only-of-type) {
font-size: 1.25em;
}
N элементов
Применять стили, основываясь на «больше-чем-один» и «меньше-чем-два» это ловкий трюк, но нам нужен более гибкий инструмент, позволяющий оперировать с любым числом. Мы хотим использовать селекты “больше или равно N” для любого N. Кроме этого, хочется иметь селект «ровно 745» или «суммарно ровно 6».
Для этого у нас есть селектор :nth-last-child(n), в который мы параметром передаем любое число. Он позволяет отсчитать столько-то элементов назад от конца списка. Например, :nth-last-child(6) выберет элемент, который является шестым с конца среди своих соседних элементов.
Всё становится интереснее, когда мы совмещаем :nth-last-child(6) и :first-child, в результате получая все элементы, которые являются шестыми с конца и при этом первыми с начала.
li:nth-last-child(6):first-child {
/* зеленый кальмар */
}
Если такой элемент существует, это будет значить, что у нас ровно 6 элементов. Таким образом, я написал CSS код, который может сказать, сколько элементов я вижу перед собой.
Осталось теперь воспользоваться этим одновременно «шестым с конца и первым с начала» элементом, чтобы еще и поселектать все остальные 5 элементов. Для этого я воспользуюсь общим соседним комбинатором.
Если вы не знакомы с этим комбинатором, то объясняю, ~ li в селекте li:nth-last-child(6):first-child ~ li значит «любой li, который идёт после li:nth-last-child(6):first-child». В нашем случае, элементы будут иметь зеленый цвет шрифта, если их ровно 6 штук.
li:nth-last-child(6):first-child,
li:nth-last-child(6):first-child ~ li {
color: green;
}
Больше или равно 6
Селектать фиксированное количество, будь то 6, 19 или 653 — не очень-то полезно, так как подобная необходимость очень редка. Это как в media queries — не очень удобно использовать фиксрованную ширину вместо min-width или max-width:
@media screen and (width: 500px) {
/* стили для ширины вьюпорта ровно в 500px */
}
В
навигационном меню
я хочу переключать стили с границей, основанной на количестве элементов, например, поменять нужные стили, если у меня 6 и больше элементов (а не ровно шесть).
Вопрос в том, как сделать такой селектор? и это вопрос смещений.
Параметр n+6
Селектор :nth-child() может принимать параметром не только число, но и формулу “n + [число]”. Например, :nth-child(n+6) будет применён ко всем элементам, начиная с шестого.
Хоть этот селектор и является мощным инструментом сам по себе, он не позволяет оперировать с количеством. Он применится не тогда, когда у нас больше шести элементов, а просто к элементам, у которых номер больше пяти.
Чтобы обойти эту проблему, нам нужно создать такой селект, который выделит все элементы, кроме последних пяти. Используя обратный к :nth-child(n+6) селект :nth-last-child(n+6) мы сможем выделить все элементы «от с шестого с конца и до самого первого с начала».
li:nth-last-child(n+6) {
/* здесь стили */
}
Такой селект отсекает последние пять элементов от набора любой длины, что означает, что если у вас меньше шести элементов, то в селект ничего и не попадет.
Если же в списке шесть или больше элементов, нам остаётся прибавить к селекту оставшиеся пять элементов. Это легко — если элементов больше шести, то срабатывает условие nth-last-child(n+6), и комбинируя его с «~» мы сможем поселектать все нужные нам элементы.
Такая вот короткая запись и является решением нашей проблемы:
li:nth-last-child(n+6),
li:nth-last-child(n+6) ~ li {
/* здесь стили */
}
Разумеется, тут может быть любое положительное целое число, даже 653,279.
Меньше или N
Как и в предыдущем примере с :only-of-type, селектор можно использовать в обе стороны, и как «больше или равно N» и как «меньше или равно N». Какой вариант вы будете использовать? Зависит от того, какую сетку вы будете считать основной.
В случае «Меньше или N» мы берем n с минусом и добавляем условие :first-child.
li:nth-last-child(-n+6):first-child,
li:nth-last-child(-n+6):first-child ~ li {
/* здесь стили */
}
В результате, использование «-» меняет направление селекта: вместо того, чтобы считать от начала и до шести, отсчёт будет идти от конца до шести. В обоих случаях, шестой элемент будет включён в селект.
nth-child против nth-of-type
Заметьте, что в предыдущих примерах я использовал :nth-child() и :nth-last-child(), а не :nth-of-type() с :nth-last-of-type(). Так как я селектал теги
- могут быть только они, :last-child() и :last-of-type() оказываются одинаково результативны.
Обе группы селектов :nth-child() и :nth-of-type() имеют свои преимущества, исходя из того, чего вы хотите добиться. Так как :nth-child() не привязан к конкретному тегу, описанную выше технику можно применять к смешанным дочерним элементам:
<div>
<p>...</p>
<p>...</p>
<blockquote>...</blockquote>
<figure>...</figure>
<p>...</p>
<p>...</p>
</div>
.container > :nth-last-child(n+3),
.container > :nth-last-child(n+3) ~ * {
/* здесь стили */
}
(Обратите внимание, чтобы не привязываться к тегам, я использую
универсальный селектор
. :last-child(n+3) ~ *. В этом случае, он обозначает «любой элемент любого тега, следующий за :last-child(n+3).»
С другой стороны, преимущество :nth-last-of-type() в том, что вы можете селектать элементы с одним тегом среди множества других соседних. Например, можно посчитать количество тегов <p>, несмотря на то, что они в одной куче с <div> и <blockquote>.
<div>
<div>...</div>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<blockquote>...</blockquote>
</div>
p:nth-last-of-type(n+6),
p:nth-last-of-type(n+6) ~ p {
/* здесь стили */
}
Поддержка браузерами
Все используемые в статье селекторы CSS2.1 и CSS3 поддерживаются в Internet Explorer 9 и выше, а так же все современные мобильные и десктопные браузеры.
Internet Explorer 8 неплохо поддерживает большинство селектов, но задуматься о полифилле на js не помешает. В качестве альтернативы, можно расставить специальные классы для старых версий IE и приписать их к своим селекторам. В случае с навигационным меню, код будет выглядеть примерно так:
nav li:nth-last-child(n+6),
nav li:nth-last-child(n+6) ~ li,
.lt-ie9 nav li {
display: inline-block;
/* и т.д. */
}
В реальном мире
Предположим, наше навигационное меню принадлежит сайту с CMS. В зависимости от того, кто его наполняет и использует, в меню будет разное количество элементов. Кто-то старается не усложнять и ему хватает «Home» и «About», а кто-то хочет запихать в меню всё, что есть у него на сайте.
Создавая стили, учитывающие разные сетки для разного количества элементов в меню, мы делаем вёрстку более стройной и подходящей для самых разных форматов — какой бы ни был контент, у нас всё учтено.
Поздравляю, теперь в вашем CSS арсенале есть умение оперировать количеством элементов.
Контент-независимый дизайн
Респонсив дизайн решает одну важную проблему: он позволяет комфортно расположить один и тот же контент на множестве разных устройств. Было бы неприемлемо видеть разный контент только потому, что у тебя экран неправильного размера. Так же и неприемлемо диктовать дизайнеру, под сколько пунктов меню должен быть заточен сайт. «Не рисуй так, у нас вся сетка поедет, если будет столько элементов».
Какую форму примет контент и сколько его будет в конкретный момент времени — никто не знает. И мы не можем всегда полагаться на скрипты или обрезание текста, это неправильно. Правильно — быть независимым от количества контента и создавать для этого нужные механизмы и инструменты. Количественные селекторы это просто одна из идей для этого.
Веб дизайн это всегда изменчивость, гибкость и неопределенность. В нём скорее не знаешь, чем знаешь. Он уникален тем, что представляет с собой вид визуального дизайна, который не определяет формы, а предвидит, какие формы может что-то принять. Для кого-то это неприемлемо и непонятно, но для вас и меня это вызов и удовольствие.
Что означает селектор CSS «+» (знак плюса)?
Селектор знака «+» используется для выбора элементов, которые помещаются сразу после указанного элемента, но не внутри конкретных элементов.
Примечание: IE8 и более ранние версии должны быть объявлены как рабочий элемент + селектор элемента.
Синтаксис:
element + element { // свойство CSS }
Пример:
|
Выход:
Поддерживаемые браузеры: Браузеры, поддерживаемые селектором «+», перечислены ниже:
- Apple Safari
- Google Chrome
- Firefox
- Opera
- Internet Explorer 7.0
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции конкурентного конкурентного программирования с помощью веб-дизайна для начинающих | HTML курс.
селекторов CSS - CSS: каскадные таблицы стилей
Селекторы CSS определяют элементы, к которым применяется набор правил CSS.
Примечание : нет селекторов или комбинаторов для выбора родительских элементов, братьев и сестер родителей или потомков родных братьев и сестер.
- Универсальный селектор
- Выбирает все элементы. При желании он может быть ограничен определенным пространством имен или всеми пространствами имен.
Синтаксис:*
нс | *
* | *
Пример:*
будет соответствовать всем элементам документа. - Переключатель типа
- Выбирает все элементы с заданным именем узла.
Синтаксис:имя элемента
Пример:input
будет соответствовать любому элементу - Селектор класса
- Выбирает все элементы, которые имеют данный атрибут
class
.
Синтаксис:. имя класса
Пример:.index
будет соответствовать любому элементу, имеющему класс "index". - Селектор идентификатора
- Выбирает элемент на основе значения его атрибута
id
. В документе должен быть только один элемент с данным идентификатором.
Синтаксис:# idname
Пример:#toc
будет соответствовать элементу с идентификатором toc.= значение ][ attr $ = value ]
[ attr * = value ]
Пример:[autoplay]
будет соответствовать всем элементам, у которых естьautoplay
набор атрибутов (любое значение).
- Список выбора
-
,
- это метод группировки, он выбирает все совпадающие узлы.
Синтаксис:A , B
Пример:div, span
будут соответствовать элементам.- Комбинатор потомков
- Комбинатор
Синтаксис:A B
Пример:div span
будет соответствовать всем элементам.- Детский комбинатор
- Комбинатор
>
выбирает узлы, которые являются прямыми дочерними элементами первого элемента.
Синтаксис:A > B
Пример:ul> li
будет соответствовать всем элементам
, которые вложены непосредственно внутри элемента
.- Общий родственный комбинатор
- Комбинатор
~
выбирает братьев и сестер. Это означает, что второй элемент следует за первым (хотя и не обязательно сразу), и оба имеют одного и того же родителя.
Синтаксис:A ~ B
Пример:p ~ span
будет соответствовать всем элементам
, сразу или нет.- Комбинатор смежных братьев и сестер
- Комбинатор
+
соответствует второму элементу, только если он следует сразу за первым элементом.
Синтаксис:A + B
Пример:h3 + p
будет соответствовать всем элементам
, которые сразу следует за элементом.
- Комбинатор колонн
- The
|| Комбинатор
выбирает узлы, принадлежащие столбцу.
Синтаксис:A || B
Пример:col || td
будет соответствовать всем элементам, которые принадлежат области
.- Псевдоклассы
- Псевдо
:
позволяет выбирать элементы на основе информации о состоянии, которая не содержится в дереве документа.
Пример:a: visit
будет соответствовать всем элементам - Псевдоэлементы
- Псевдо
::
представляют объекты, которые не включены в HTML.
Пример:p :: first-line
будет соответствовать первой строке всех элементов
.
Спецификация Статус Комментарий Селекторы уровня 4 Осадка рабочий Добавлен || Комбинатор столбцов
, структурные селекторы сетки, логические комбинаторы, местоположение, временное измерение, состояние ресурса, лингвистические псевдоклассы и псевдоклассы пользовательского интерфейса, модификатор для чувствительного к регистру и нечувствительного к регистру выбора значений атрибутов ASCII.Селекторы уровня 3 Рекомендация Добавлены общий родственный комбинатор ~
и древовидные псевдоклассы.
Псевдоэлементы используют префикс с двойным двоеточием::
. Дополнительные селекторы атрибутовCSS, уровень 2 (редакция 1) Рекомендация Добавлены дочерние комбинаторы >
и смежные родственные комбинаторы+
.
Добавлены универсальные селекторы и атрибутов .CSS Уровень 1 Рекомендация Первоначальное определение. См. Подробности в таблицах спецификации псевдоклассов и псевдоэлементов.
Что означает селектор CSS «+» (знак плюса)?
<
HTML
>
<
Головка
>
<
заголовок
> + селектор знака
заголовок
>
<
стиль
>
h3 + div {
размер шрифта: 20 пикселей;
font-weight: жирный;
дисплей: встроенный;
цвет фона: желтый;
цвет: зеленый;
}
h2 {
цвет: зеленый;
}
корпус {
выравнивание текста: по центру;
}
стиль
>
Головка
>
<
корпус
>
<
h2
> GeeksforGeeks
h2
>
<
h3
> + Выбор знака
h3
>
<
div
> Портал информатики для вундеркиндов
div
>
корпус
>
html
>
Полное руководство для повышения уровня ваших навыков работы с селектором 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
- Селектор соседних братьев и сестер, e.г.,
А + В
- Общий родственный селектор, например,
A ~ B
Соседний переключатель
A + B
должен быть вам знаком. Он выбирает элементB
, который следует сразу заA
. Но как насчет общего селектора родственниковA ~ B
? При этом выбираются все элементы-родственникиB
, следующие заA
.Вот их пример в действии:
См. Селекторы комбинатора Pen
Дэвида Гвайера (@dgwyer)
на CodePen.Строка Нью-Йорк выбрана, потому что она следует сразу за первой строкой, а последние два города выделены, так как общий селектор братьев и сестер соответствует всем городам после четвертого.
Селекторы CSS атрибутов
Мне очень нравятся селекторы атрибутов. Они настолько гибки, когда вам нужно сопоставить элементы, содержащие атрибуты, с определенными значениями.
См. Селекторы атрибутов Pen
# 1 Дэвида Гвайера (@dgwyer)
на CodePen.В этом примере демонстрируется выбор всех элементов ввода флажков и применение стилей к связанным с ними меткам, чтобы сделать их полужирными и окрашенными в синий цвет.
Затем мы переопределяем стиль для флажка с определенным именем
chk2
и окрашиваем связанную с ним метку в красный цвет. Обратите внимание на то, что метки других элементов формы не затронуты и к ним не применяются стили меток.Селекторы атрибутов
предназначены не только для элементов формы, они могут нацеливать атрибуты на любой элемент. Вы можете сопоставить любой атрибут, а не только официально поддерживаемые. Кроме того, вы можете просто проверить наличие атрибута следующим образом:
кнопка [значок]
Соответствует
элементам
, которые содержат атрибут icon .Он будет соответствовать атрибуту независимо от того, является ли он пустым или для него задано определенное значение.Еще несколько примеров:
См. Селекторы атрибутов Pen
# 2 Дэвида Гвайера (@dgwyer)
на CodePen.Первая ссылка не имеет атрибута
target
, поэтому не соответствует. Следующие две ссылки совпадают, потому что они либо имеют пустой атрибутtarget
, либо один с определенным значением. Наконец, последняя ссылка установлена нарозовый
, так как она соответствует атрибутуfluffy
.Его значение не имеет значения и просто должно существовать, чтобы соответствовать селекторуa [пушистый]
.Практическим примером этого может быть выделение изображений, у которых нет атрибута
alt
. Этот атрибут необходим для доступности, поэтому для целей SEO важно убедиться, что все элементы изображения содержат этот атрибут.Для этого мы можем использовать следующее правило:
img: not ([alt]) { граница: 2px красная пунктирная; }
См. Pen
Attribute Selectors # 3 Дэвида Гвайера (@dgwyer)
на CodePen.= 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
# 2 Дэвида Гвайера (@dgwyer)
на CodePen.На первый взгляд, здесь много чего происходит, и вы должны быть осторожны при использовании этих типов селекторов, так как вы можете получить результаты, которых не ожидали.
Например, вам может быть интересно, почему текст And so on… синий внутри тега
. На самом деле все содержимое раздела окрашено в синий цвет, так как это последний дочерний элемент основного контейнера div. У других элементов раздела есть свои собственные цвета, переопределенные другими селекторами, оставляя единственный абзац окрашенным в синий цвет. Селекторы содержимого 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
, который является удобным селектором и делает то же самое, что и: 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 для веб-приложений , записывая все, что происходит в вашем веб-приложении или на сайте. Вместо того, чтобы гадать, почему возникают проблемы, вы можете агрегировать и составлять отчеты по ключевым показателям производительности внешнего интерфейса, воспроизводить пользовательские сеансы вместе с состоянием приложения, регистрировать сетевые запросы и автоматически обнаруживать все ошибки.
Модернизируйте отладку веб-приложений - начните мониторинг бесплатно.
CSS-селекторов · Документы WebPlatform
Резюме
Селектор представляет структуру. Эта структура может использоваться как условие (например, в правиле CSS), которое определяет, каким элементам соответствует селектор в дереве документа, или как простое описание фрагмента HTML или XML, соответствующего этой структуре.
Селекторы могут варьироваться от простых имен элементов до богатых контекстных представлений.
Справочник по селектору CSS
Выбор типа
Универсальный селектор
Селектор атрибутов
Селектор класса
Селектор идентификаторов
Псевдоклассы
Динамические псевдоклассы
Целевой псевдокласс
Псевдокласс языка
Элемент пользовательского интерфейса состояния псевдоклассов
Структурные псевдоклассы
Псевдокласс отрицания
Псевдоэлементы
Комбинаторы
Комбинатор потомков
Детский комбинатор
Комбинатор смежных братьев и сестер
Родственный комбинатор общего назначения
Чувствительность к регистру
Синтаксис 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-classes) [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
- Рекомендация
Селектор смежных братьев и сестер
Селектор соседних братьев и сестер
Web Review
Июль 2000 г.Как было показано в предыдущих статьях этой серии, в CSS появилось несколько интересных новых селекторов.Между универсальным селектором и дочерним селектором можно создавать селекторы, которые были бы практически невозможны при использовании традиционных селекторов в стиле CSS1.
Что ж, в этом выпуске мы продолжаем тенденцию. Однако на этот раз мы поговорим о том, что практически невозможно сделать с помощью контекстных селекторов. С помощью селектора соседних братьев , вы можете применять стили к элементам на основе элементов, которые непосредственно предшествуют им в документе.
Как это работает
Синтаксис достаточно прост: всего два или более селектора, разделенных знаком плюса (
+
). Самая простая конструкция - это два элемента с плюсом между ними. Выбранным будет элемент, следующий сразу за знаком плюса, но только после элемента, указанного перед плюсом. Например:h2 + P {margin-top: 0;}
Правило будет применяться ко всем абзацам, которые следуют сразу за элементом
h2
и имеют один и тот же родительский элемент.Отсюда и название: элементы должны иметь один и тот же родительский элемент, что делает их родственными, и они должны быть смежными друг с другом в дереве документа.Давайте рассмотрим это немного подробнее. Изучите древовидное представление на рисунке 1 на мгновение.
Рис. 1. Поиск соседних братьев и сестер с помощью дерева документов. Одним из примеров смежных родственных элементов являются элементы
EM,
иSTRONG
внутри абзаца.Фактически, единственное место на рисунке 1, где элементы не имеют смежных братьев и сестер, - это там, где у них вообще нет братьев и сестер, например, элементA
; и в неупорядоченном списке с тремяLI
дочерними элементами. Там первый и третий элементыLI
не смежные. Первый и второй являются смежными, как и второй и третий, но первый и третий разделены вторым и, следовательно, не являются смежными.Итак, предположим, что мы хотим, чтобы текст
STRONG
был зеленым, но только если он следует за текстомEM
.Правило для этого:EM + STRONG {цвет: зеленый;}
Возвращаясь к рисунку 1, мы видим, что элемент
STRONG
, который является частью абзаца, будет зеленым, а элементSTRONG
, который является частьюLI
, не будет. Обратите внимание, что это правда, несмотря на то, что в абзаце может быть текст, который находится между элементамиEM
иSTRONG
. Например:Этот абзац содержит некоторые выделенный текст и после что мы находим некоторые сильно подчеркнутые текст, который тоже зеленый , несмотря на промежуточный текст.
Текст между элементами не влияет на работу селектора. Это верно даже для блочных элементов. Рассмотрим:
Эй, элемент h4
Вот текст, который является частью DIV, и не содержится в его дочернем элементе.Вот абзац короткий
Мы можем сделать абзац серым по следующему правилу:
h4 + P {цвет: серый;}
Помните, что смежный селектор заботится только об элементах и о том, где они вписываются в структуру документа.Вот почему текст фактически игнорируется. (Технически это часть
DIV
и поэтому находится «на один уровень выше» в дереве документа, как часть родительскогоDIV
.)Комбинирование с другими селекторами
Конечно, предыдущий пример фактически выберет любой абзац, следующий за
h4
, независимо от того, где в документе это происходит. Если мы хотим выбрать только те абзацы, которые следуют за заголовками уровня h4, которые содержатся внутри подразделения (DIV
), то мы должны написать:DIV h4 + P {цвет: серый;}
Предположим, мы хотим сузить его еще больше: мы хотим, чтобы эта серость возникла только тогда, когда элементы
h4
иP
являются дочерними элементамиDIV
(в отличие от потомков любого уровня).В этом случае мы пишем:DIV> h4 + P {цвет: серый;}
А теперь давайте немного шире. Предположим, мы хотим, чтобы любой элемент, следующий за
h4
, который является дочерним элементомDIV
, был вообще окрашен в серый цвет. Вы знаете, к чему все это идет, верно?DIV> h4 + * {цвет: серый;}
Мы тоже можем это изменить. Мы могли бы применить стили к любому элементу, который является потомком
DIV
с классомпомимо
, который следует сразу за таблицей.Кроме того, любые гиперссылки, которые находятся в такомDIV
, должны быть темно-серыми и подчеркнутыми. Таким образом:ТАБЛИЦА + DIV.aside * {color: gray;} ТАБЛИЦА + DIV.aside A: ссылка {color: # 444; украшение текста: подчеркивание;}
Если вы все еще не уверены в том, как это работает, попробуйте взять собственный документ средней сложности и попытаться создать селекторы, которые будут точно адресовать данный элемент, используя все различные селекторы CSS2, которые мы здесь использовали.Небольшая практика поможет вам освоиться с этими селекторами. (Чтобы узнать, какие браузеры помогут вам в этой практике, см. Раздел «Поддержка браузеров» в конце статьи.)
Интересное применение
Ладно, все хорошо, что мы можем делать такие вещи, но что в этом такого? Есть сотни ответов, но вот несколько, которые пришли мне в голову, когда я писал статью.
Обычный эффект печати - это выделить первый абзац статьи курсивом, жирным шрифтом или большим шрифтом, во всяком случае, отличным от остальной части статьи.Предположим, что заголовок статьи - это элемент
h2
, тогда все, что нам нужно, это что-то вроде этого:h2 + P {стиль шрифта: курсив; размер шрифта: 150%;}
Это также предполагает, что никаких других элементов
h2
не будет в статье, или, если они есть, то ни за одним не будет следовать абзац. Если вы уже классифицируетеh2
, чтобы отметить его как заголовок статьи, вы можете использовать это в своих интересах:h2.заголовок + P {стиль шрифта: курсив; font-size: 150%;}
Вот еще одна возможность. Вы можете изменить стиль каждого элемента в списке, кроме первого. Например, предположим, что вы хотите, чтобы первый элемент в списке был оформлен в обычном стиле, а следующие - серым и немного меньшего размера. Вот правило:
LI + LI {цвет: серый; font-size: 90%;}
Первый
LI
в списке не будет выбран, потому что он не следует сразу за элементом LI, а все остальные делают.Как насчет сокращения расстояния между заголовками и следующими элементами? Авторы всегда пытаются сделать это с помощью классов и других уловок, но с селектором смежных братьев это становится очень легко. Попробуйте это в браузере с поддержкой CSS2:
h2, h3, h4 {margin-bottom: 0,125em;} h2 + *, h3 + *, h4 + * {margin-top: 0,125em;}
Та-да! Обычный размер поля между заголовками и всем, что следует за ними, составляет всего лишь восьмую часть em.Вы, конечно, можете варьировать эту сумму по своему усмотрению. Это можно адаптировать любым количеством способов: вы можете подтягивать списки ближе к абзацам, используя
P + UL
, увеличивать разделение между таблицами, которые непосредственно следуют друг за другом, и любым другим количеством других вещей.Поддержка браузера
Селекторы соседних братьев поддерживаются в Internet Explorer 5.x Macintosh. Они также поддерживаются в предварительном выпуске 1 Netscape 6 для всех бесчисленных платформ, для которых он доступен, и в предварительном выпуске 3 Opera 4 для Windows.В IE5 для Windows и Opera 3 для Windows есть ошибки в обработке селекторов соседних братьев и сестер.
Еще не все
Во многих отношениях селектор по соседству - самый крутой из новых селекторов CSS2. Благодаря добавлению к CSS, очень легко выбрать для определенных обстоятельств, которые хотят решить многие авторы, например, закрытие пространства после заголовков, но до сих пор были вынуждены использовать классы или другие уловки для обработки. В сочетании с такими вещами, как универсальный селектор, открывается широкий спектр возможностей.
В следующей статье мы рассмотрим два новых псевдокласса. Один из них может быть полезен в многоязычных документах, а другой может быть очень полезен в любом документе.
3 уровня CSS-селекторов для выбора всех элементов
Style-fact part3
Эта глава из серии StyleFacts посвящена тому, как вы можете выбрать свой элемент - «оружие по выбору»: Селектор. Вы увидите, как можно указать селекторы для правильного каскадного эффекта.Вы узнаете, как перезаписывать селекторы и как применять селекторы к элементу косвенно с помощью псевдоселекторов. Мы можем выбирать элементы. Мы можем выбрать поведение элементов, выбрав состояние. Мы даже можем выбрать элементы, которых на самом деле нет. Здесь вы достигнете последнего уровня селекторов - псевдоэлемента. Давайте посмотрим, какой уровень выбора больше всего подходит для применения ваших стилей: селектор, псевдоселектор или селектор псевдоэлементов.
Как большинство из вас, возможно, испытали, написание стилей - это баланс между написанием слишком специфических селекторов стилей (которые нацелены только на одну вещь) и селекторов, которые слишком глобальны (которые портят все, что они касаются.)
.page-container div
Вот например. Если «div» является наиболее широко используемым элементом, нацеленным на случайный «div» в глобальном классе, он будет нацелен на каждый элемент «div» на вашей странице. Выбор каждого класса и элемента на пути к цели будет противоположным сценарием. Это неэффективный способ нацеливания на элемент, который нужно стилизовать. Это дает вам массивные таблицы стилей, которые каждый раз нацелены очень мало.
Типы селекторов:
Итак, какие типы селекторов существуют? В стилизации у нас есть 5 типов селекторов.Я перечислил их для вас в предпочтительном порядке использования:
Класс
.класс-селектор {}
На мой взгляд, наиболее предпочтительный селектор, он нацелен на элементы с классом, указанным после точки.
Элемент
элемент-селектор {}
Селектор элементов слабее, чем использование селектора классов и целевых типов элементов напрямую.
Атрибут
Элемент
[attribute = "selector"] {}
Он слабее (менее специфичен), чем использование селектора элемента, и записывается в скобках '[]'.
Универсальный
элемент & gt; * {} / * универсальный селектор * /
Не указывается ни элементу, ни классу. Это мощный селектор, поэтому будьте осторожны при его глобальном использовании. он обозначен звездочкой.
ID
#idSelector {}
Самый надежный селектор, который можно использовать. Это тоже проблема. Если вы используете ID-селектор в комбинированном выборе. Он может превзойти множество аналогичных вариантов выбора комбинаторного спуска. Это хороший мост к комбинаторам.Он объединяет перечисленные выше типы селекторов в выборку.
Комбинаторы:
Когда вы объединяете классы, они станут более конкретными. Таким образом, вы можете нацеливать классы, которые глубоко вложены в ваш шаблон, не влияя на другие элементы. Есть четыре способа объединить селекторы в комбинатор: по потомкам, потомкам, братьям и сестрам и по общему объединению братьев и сестер. Самым известным и наиболее часто используемым является Descendent Combinator:
.
Потомок
.родительский класс .descendant-class
Здесь (родительский) элемент и элемент на (нескольких) более вложенных уровнях объединяются в один селектор.
Селектор вложенного уровня не обязательно должен быть дочерним элементом элемента, на который нацелен родительский селектор. Вот как вы можете пропустить уровни явных селекторов, чтобы перейти к целевому селектору через «уникальные» ориентиры в вашем шаблоне.Детский
.parent-class & gt; .child-class
Хотя указывать прямые дочерние элементы в качестве селектора необязательно, это может быть реализовано в CSS путем объединения комбинатора в цепочку с шевроном (стрелкой) справа.Это будет нацелено на всех детей с особенностями вашего второго селектора.
Родной брат
. Родительский класс +. Родственный класс
С появлением CSS2 мы можем нацеливаться на одноуровневые и общие одноуровневые элементы с помощью комбинаторов. Родственный селектор, помеченный знаком «+» в приведенном выше примере, предназначен для нацеливания на следующий непосредственный родственный элемент предыдущего связанного селектора (элемента). Чтобы настроить таргетинг на всех братьев и сестер с помощью следующего связанного селектора, можно использовать '~'. Как в примере ниже:
Общий брат
.родительский класс ~ .general-sibling-class
Мы узнали, какие типы селекторов бывают: класс, элемент, атрибут, универсальный и ID-селектор. Мы знаем, как их объединить: через потомков, потомков или общих / братьев и сестер. Итак, мы готовы перейти к селекторам, которые могут неявно нацеливать элементы. Так называемые псевдоселекторы.
Псевдо-селекторы
Псевдоселекторы позволяют выбирать элемент неявно в зависимости от состояния или местоположения. Например: если вам нужен второй дочерний элемент элемента с определенным селектором.Другой пример - выбор элемента только при наведении курсора. Существует много псевдоселекторов, и каждый месяц добавляются новые в качестве экспериментальных селекторов CSS3. Чтобы проверить доступность, перейдите на сайт www.caniuse.com и введите селектор, который вы хотите использовать, чтобы проверить, поддерживают ли его уже наиболее часто используемые браузеры.
штат
Мы можем разделить псевдоселекторы на 2 группы: на основе местоположения таргетинга или на основе определенного состояния элемента. Чтобы проиллюстрировать группу состояний, мы можем просмотреть псевдоселекторы в элементе ссылки действия «».Видишь, что я там делал? 🙂
Ниже вы можете увидеть пример нескольких распространенных псевдоселекторов ссылок: ': hover', ': link', ': loaded':.link-element: link {}
.link-element: посещено {}
.link-element: hover {}В коде вы можете увидеть это в действии, щелкнув, наведя указатель мыши или перейдя по ссылке. Все эти разные цвета и внешний вид ссылки указываются отдельно. Большинство этих интерактивных элементов в html имеют стиль по умолчанию для браузера. Без стиля они были бы белыми на белом фоне и поэтому не были бы видны.доступно гораздо больше псевдоселекторов для определения состояния элемента. Например, состояние ": focus" при щелчке по полю ввода или состояние ": checked" при выборе флажка или переключателя. Полный список псевдоклассов можно найти здесь.
место
Вторая группа псевдоселекторов (-класс) - это селекторы для определения местоположения элемента. Возможно, вы знаете псевдоселектор: first-child. Это нацелено на первого дочернего элемента выбранного элемента.Итак, если у вас есть:
.list & gt; div: first-child {} / * выбирает первого дочернего элемента в списке * /
Будет выбран первый дочерний элемент в элементе с классом [class]. Аналогичным образом можно настроить таргетинг на последнего ребенка. Вы можете сделать это, определив ': last-child'. Для каждого промежуточного дочернего элемента был создан новый псевдоселектор. Так называемый селектор: nth-child. Этот селектор дает вам возможность выбрать один или несколько дочерних элементов. Вы даже можете написать уравнения в атрибутах, чтобы выбрать различные последовательности дочерних элементов.Разрешите пояснить это на примере:
.list> div: last-child {} / * выбирает последнего дочернего элемента в списке * /
.list> div: nth-child (odd) {} / * выбирает нечетных дочерних элементов в списке * /
.list> div : nth-child (7) {} / * выбирает 7-й дочерний элемент в списке * /
.list> div: nth-child (4n + 1) {} / * выбирает дочерний элемент 1,5,9 и т. д. в списке * /Этот вид выбора может быть удобен в списке или таблицах, в которых все элементы и строки принадлежат одним и тем же элементам. Не имеет значения, указаны ли элементы с классом.Вы можете нацелить их в любом случае. В коде вы можете найти пример таргетинга на nth-child. Я сделал вам что-то вроде парящей на память nth-child :). Сможете ли вы найти все цветовые дуэты, посмотрев на селекторы?
Я упоминал, что вы можете добавить математическое уравнение в селектор nth-child. Возьмем, к примеру, «4n + 1». Вы могли узнать это по математике в старшей школе. Это похоже на 4x +1. Он выбирает каждого четвертого ребенка, а затем сдвигает выбор на один. Выбор следующего элемента.Это означает 1 (4 x 0 +1), 5 (4 x 1 +1), 9 (4 x 2 +1) и так далее… вот подробный блог о селекторе nth-child.Псевдоэлементы
Перейдем к псевдоэлементам. Они были введены в CSS3 для добавления семантически правильного украшения к элементам. Например, добавление значка к кнопке без добавления пустого i-тега или добавление таргетинга на элемент-заполнитель, который является невидимым элементом, принадлежащим элементу input. Вы можете увидеть этот селектор как «выбор части элемента.Обычно для этого вы создаете новый элемент, но теперь вы можете сделать его частью исходного элемента.
Давайте посмотрим на псевдоэлемент в действии:.selector-class :: before {
content: "x";
позиция: абсолютная;
дисплей: блочный;
верх: 0;
осталось: 0;
ширина: 30 пикселей;
высота: 30 пикселей;
цвет фона: серый;
}Здесь вы можете найти полный набор селекторов псевдоэлементов. Какие еще волшебные вещи можно делать с псевдоэлементами, мы обсудим в следующей главе этого блога.
выбор элемента карате для детей
Теперь вы знаете, какой селектор можно использовать в какой ситуации. Где использовать тип селекторов, где использовать комбинаторы, где использовать псевдоэлементы и где вы можете использовать псевдоэлементы. Вы знаете специфику селекторов. Селектор элементов самый сильный. Потом занятия. Потом псевдо и атрибуты. Теперь вы готовы выбрать любой элемент на странице.
Как и при вождении автомобиля, написание элегантных CSS-селекторов приходит с опытом написания стилей и игры с брендингом.Шаблон будет вашим холстом. Попробуйте использовать селекторы по-новому, чтобы увидеть, какие возможности у вас есть.