Контекстные селекторы | htmlbook.ru
При создании веб-страницы часто приходится вкладывать одни теги внутрь других. Чтобы стили для этих тегов использовались корректно, помогут селекторы, которые работают только в определённом контексте. Например, задать стиль для тега <b> только когда он располагается внутри контейнера <p>. Таким образом можно одновременно установить стиль для отдельного тега, а также для тега, который находится внутри другого.
Контекстный селектор состоит из простых селекторов разделенных пробелом. Так, для селектора тега синтаксис будет следующий.
Тег1 Тег2 { ... }
В этом случае стиль будет применяться к Тегу2 когда он размещается внутри Тега1, как показано ниже.
<Тег1> <Тег2> ... </Тег2> </Тег1>
Использование контекстных селекторов продемонстрировано в примере 10.1.
Пример 10.1. Контекстные селекторы
HTML5CSS 2.1IECrOpSaFx
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Контекстные селекторы</title> <style> P B { font-family: Times, serif; /* Семейство шрифта */ color: navy; /* Синий цвет текста */ } </style> </head> <body> <div><b>Жирное начертание текста</b></div> <p><b>Одновременно жирное начертание текста и выделенное цветом</b></p> </body> </html>
В данном примере показано обычное применение тега <b> и этого же тега, когда он вложен внутрь абзаца <p>. При этом меняется цвет и шрифт текста, как показано на рис. 10.1.
Рис. 10.1. Оформление текста в зависимости от вложенности тегов
Не обязательно контекстные селекторы содержат только один вложенный тег. В зависимости от ситуации допустимо применять два и более последовательно вложенных друг в друга тегов.
Более широкие возможности контекстные селекторы дают при использовании идентификаторов и классов. Это позволяет устанавливать стиль только для того элемента, который располагается внутри определённого класса, как показано в примере 10.2.
Пример 10.2. Использование классов
HTML5CSS 2.1IECrOpSaFx
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Контекстные селекторы</title> <style> A { color: green; /* Зеленый цвет текста для всех ссылок */ } .menu { padding: 7px; /* Поля вокруг текста */ border: 1px solid #333; /* Параметры рамки */ background: #fc0; /* Цвет фона */ } . menu A { color: navy; /* Темно-синий цвет ссылок */ } </style> </head> <body> <div> <a href="1.html">Русская кухня</a> | <a href="2.html">Украинская кухня</a> | <a href="3.html">Кавказская кухня</a> </div> <p><a href="text.html">Другие материалы по теме</a></p> </body> </html>
Результат данного примера показан на рис. 10.2.
Рис. 10.2. Ссылки разных цветов
В данном примере используется два типа ссылок. Первая ссылка, стиль которой задаётся с помощью селектора A, будет действовать на всей странице, а стиль второй ссылки (.menu A) применяется только к ссылкам внутри элемента с классом menu.
При таком подходе легко управлять стилем одинаковых элементов, вроде изображений и ссылок, оформление которых должно различаться в разных областях веб-страницы.
Вопросы для проверки
1. Какой цвет будет у текста списка в следующем коде?
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Контекстные селекторы</title> <style> UL LI UL { color: green; } UL UL { color: red; } LI SPAN { color: blue; } LI LI { color: fuchsia; } UL SPAN { color: orange; } </style> </head> <body> <ul> <li> <ul> <li><span>Первый</span></li> <li><span>Второй</span></li> <li><span>Третий</span></li> </ul> </li> </ul> </body> </html>
- Зелёный.
- Красный.
- Синий.
- Розовый.
- Оранжевый.
2. В коде выше какого цвета будут маркеры перед текстом?
- Зелёного.
- Красного.
- Синего.
- Розового.
- Оранжевого.
Ответы
1. Оранжевый.
2. Розового.
селекторы
Селекторы CSS и их применение в автоматизации тестирования Программного Обеспечения / Хабр
Всем добра!
Данную тему мы уже раскрывали на вебинаре, который проводил наш преподаватель, но решили дополнить чуть текстом (да и многим, как оказалось, так удобнее). В общем представляем статью на тему «Селекторы CSS», которую Павел Попов прорабатывал в рамках нашего курса «Автоматизация в тестировании».
Поехали.
Каждый курс или статья для начинающих автоматизаторов рассказывает об удобном и универсальном средстве поиска элементов Web-страницы, как XPath. Данный вид локаторов на элемент был создан в 1999 году для указания на элементы в XML файлах. С помощью встроенных функций XPath стал очень популярным инструментом поиска элементов на Web-странице. Если HTML код вашего приложения выглядит как-то так:
… <form class=“form_upload> <div> <div class=“row_element_3 row tile_fixed”> <div class=“button_cell wrapper_tile”> <button type=“submit” class=“button_submit wrapper_button”>Нажми меня</button> </div> </div> </div> </form> …
и вы не можете найти достойный XPath для кнопки “Нажми меня”, не стоит сразу бежать в сторону разработчика с просьбой о помощи. Есть отличная возможность воспользоваться CSS селектором, он будет выглядеть так:
.button_submit
Добро пожаловать в мир CSS.
Принято считать, что в CSS селекторах все завязано на классы. Это не совсем так, но если Web приложение использует “оптимизатор” или “обфускатор” HTML кода, и выглядит вот так:
<form class=“afhfsdh__”> <div> <div class=“hfgeyq fjjs qurlzn”> <div class=“fjdfmzn fjafjd”> <button type=“submit” class=“ajffalf wjf_fjaap”></button> </div> </div> </div> </form> …
(все названия css классов уменьшены с помощью оптимизатора)
, то получить короткий CSS селектор не удастся — как правило, после каждого нового билда css классы меняются на новые. Но все равно, CSS селектор может оказаться проще и в этом случае: css: form button[type=‘submit’]
, вместо XPath: //form//button[@type=‘submit’]
Допустим, что оптимизаторы HTML у нас не установлены и разработчики не планируют его использовать на проекте (проверьте этот факт!).
Как вы могли уже догадаться, символ. используется вместо слова class и будет искать вхождение данного класса в любом элементе, в независимости от количества классов у этого элемента.
Смотрите:
<form class=“form_upload> <div> <div class=“row_element_3 row tile_fixed”> <div class=“button_cell wrapper_tile”> <button type=“submit” class=“button_submit wrapper_button”></button> </div> </div> </div> </form>
css для элемента button: .button_submit
, при этом класс .wrapper_button
указывать необязательно, но если он нужен для указания на наш класс, мы можем его добавить сразу после указания первого css класса: css: . button_submit.wrapper_button
. Порядок классов роли не играет, поэтому их можно поменять местами:
.wrapper_button.button_submit .
Следующим незаменимым помощником в поиске HTML элементов являются Теги. Написать css селектор, указывающий на тег button очень просто, тем более, что он уже был написан в этом предложении. CSS селектор для button –
css: button.
И ничего больше указывать вам не требуется, если ваша цель — это привязка к тегу. Совмещая теги и классы получаем::
button.button_submit
и это также является css селектором к нашему элементу.
Помимо тегов, атрибуты также помогают уникально идентифицировать элемент на странице. Часто разработчики создают дополнительные атрибуты вместо добавления новых “айдишников”, например, могут создавать дополнительные атрибуты data-id или auto-id у каждого элемента, с которым планируется дальнейшее действие. К примеру, разработчики могут добавить атрибут data-id
к нашей кнопке button. Тогда к атрибутам с помощью css селектора можно обратиться через фигурные скобки: [data-id=‘submit’]
. Дополнительно, вы можете не указывать значение атрибута после знака равно [data-id]
. Такой селектор найдет вам все элементы, у которого существует атрибут data-id
с любым значением внутри. Вы также можете указать атрибут class для поиска нашей кнопки: [class=‘button_submit’]
, но в CSS, как вы уже знаете, можно полениться и написать так: .button_submit
. Соединять все вместе также достаточно просто:
button[type=‘submit’].button_submit тег атрибут класс
Но это большая удача, если нам удается находить элемент, используя селектор с указанием только одного элемента, как, например, использовать атрибут [data-id] который однозначно находит один элемент на странице. Очень часто нам приходится использовать предков элемента, чтобы найти потомка. И это в CSS тоже возможно сделать достаточно просто:
<form class=“form_upload> <div> <div class=“row_element_3 row tile_fixed”> <div class=“button_cell wrapper_tile”> <button type=“submit” class=“button_submit wrapper_button”></button> </div> </div> </div> </form>
css:form > div > div > div > button.button_submit
и знак >
позволяет найти элемент исключительно у предка внутри. Но писать все элементы ненужно, так как в CSS есть возможность поиска во всех потомках, этот символ — пробел “ “
. Используя данный указатель мы можем быстро найти элемент внутри формы:
Было: css: form > div > div > div > button.button_submit
Стало: css: form button,button_submit
Удобно также находить следующего “родственника” через предыдущего. Дополним наш пример еще одним span
:
<form class=“form_upload> <div> <div class=“row_element_3 row tile_fixed”> <div class=“button_cell wrapper_tile”> <div class=“content”></div> <span data-id=“link”>Ссылка</span> <!-- элемент с атрибутом data-id --> <button type=“submit” class=“button_submit wrapper_button”> <!-- искомая кнопка --></button> </div> </div> </div> </form>
[data-id=‘link’] + button
найдет button
, у которого выше на один уровень есть родственник с атрибутом data-id=”link”
. Этим указателем можно пользоваться, когда у предыдущего элемента есть id или уникальный атрибут, а у элемента, который находится следующим после нужного, таких идентификаторов нет. Итак, с помощью символа + css селектор найдет следующего родственника. =“https:”] — найдет все ссылки, которые начинаются с https,a[href$=“.pdf”]
— найдет все ссылки, которые заканчиваются на .pdf.
Немного о том, как найти потомков с одним и тем же тегом у предка. Начнем, как всегда, с примера:
<div class=“tiles”> <div class=“tile”>…</div> <div class=“tile”>…</div> </div>
Как найти второй div class=“tile”
у div class=“tiles”
? Варианта два:
div > div:nth-of-type(2) div > div:nth-child(2)
Но в чем различие между этими двумя селекторами? Дополним пример:
<div class=“tiles”> <a class=“link”>…</a> <!—1—> <div class=“tile”>…</div><!—2—> <div class=“tile”>…</div><!—3—> </div>
css 1 вариант: div > div:nth-of-type(2)
css 2 вариант: div > div:nth-child(2)
Теперь эти селекторы ведут на два разных элемента. Прежде чем идти далее, попробуйте догадаться, какой селектор ведет на какой элемент?
Разгадка:
первый селектор будет указывать на строчку номер 2, тогда как второй селектор будет указывать на строчку номер 3. nth-child
ищет второй div
, который является потомком родителя . Второй
<div>
у элемента
<div class=“tiles”>
это третья строка. В свою очередь nth-of-type
ищет второй элемент у родителя
<div class=“tiles”>
, который должен являться тегом
div
, это строка номер два.
Есть правило, которое позволяет упростить работу с селекторами в ситуации, когда вам нужно найти конкретный элемент: использовать nth-of-type
везде, где это возможно. Если вы разобрались с примером выше, рекомендую вам всегда обращать внимание на количество одинаковых элементов у предка, используя nth-child
, и тогда вам будет неважно, куда поместят ссылку
<a>
: наверху, между
<div>
или внизу блока, всегда селектор div:nth-child(2)
будет все равно указывать на нужный элемент – второй элемент div внутри блока.
Была опущена еще одна функция поиска элемента по id. Вы уже знаете, что поиск по любому из атрибутов осуществляется с использованием указания квадратных скобок [attribute=“value”]
и для нашего случая мы можем найти элемент так [id=“value”]
. А что если есть существует более быстрый способ поиска по id элемента?
#value. “#” - указатель, что поиск осуществляется по id.
Используя все приобретенные навыки попробуйте написать селектор для кнопки
<button>
Отправить … <div> <div class=“tile_wrapper tile content”> <div class=“row row_content”> <div class=“outline description__on”></div> <div class=“outline description__off button_send hover_mouse”> <button class=“outline button_send”>Отправить</button> </div> </div> </div> </div>
Будем рады увидеть ваши комментарии и варианты в комментариях тут или обсудить это на очередном открытом уроке, который пройдёт у нас 13-го марта.
Спасибо!
html — Как выбрать элемент определенного класса?
спросил
Изменено 2 года, 11 месяцев назад
Просмотрено 213 тысяч раз
Насколько я понимаю, использование element.class
должно позволять определенному элементу, назначенному классу, получать другой «стиль», чем остальная часть класса. Это не вопрос о том, следует ли это использовать или нет, а скорее я пытаюсь понять, как этот селектор должен работать. Изучив множество примеров в Интернете, я считаю, что синтаксис правильный, и не понимаю, почему это не работает.
Вот пример:
CSS:
h3 { красный цвет; } .мои занятия { цвет: зеленый; } h3.мой класс { цвет синий; }
HTML:
Этот заголовок должен быть КРАСНЫМ, чтобы соответствовать селектору элемента h3
<дел>Этот заголовок должен быть ЗЕЛЕНЫМ, чтобы соответствовать селектору класса
Этот заголовок должен быть СИНИМ, чтобы соответствовать селектору element.
class
- HTML
- CSS
- синтаксис
- css-селекторы
1
Должно быть так:
h3.myClass
ищет h3 с классом myClass
. Но на самом деле вы хотите применить стиль для h3 внутри .myClass
, чтобы вы могли использовать селектор потомков .myClass h3
.
h3 { красный цвет; } .мои занятия { цвет: зеленый; } .мой класс h3 { цвет синий; }
Демонстрация
Эта ссылка даст вам некоторое общее представление о селекторах и познакомит вас с селекторами-потомками
4
h3.myClass
относится ко всем h3
с class="myClass"
.
.myClass h3
относится ко всем h3
, которые являются дочерними элементами (т.е. вложенными) с class="myClass"
.
Если вы хотите, чтобы h3
в вашем HTML отображался синим цветом, измените CSS на следующее:
.myClass h3 { цвет синий; }
Если вы хотите сослаться на этот h3
классом, а не его тегом, вы должны оставить CSS как есть и дать h3
класс в HTML:
Этот заголовок должен быть СИНИМ, чтобы соответствовать селектору element.class
6
Селектор element.class предназначен для стилей, например:
.большой { размер шрифта: 150%; вес шрифта: полужирный; } р.большой { цвет синий; }
И для span, и для p будут назначены размер шрифта и вес шрифта из .large, но синий цвет будет назначен только для p.
Как указывали другие, вы работаете с селекторами потомков.
1
h3.myClass
действителен только для элементов h3
, которым непосредственно присвоен класс myClass
.
Вы хотите отметить это так:
.myClass h3
Выбирает все дочерние элементы myClass
с тэгом h3
Селектор CSS :first-child
позволяет выбрать элемент, который является первым дочерним элементом в своем родительском элементе.
элемент: первый дочерний элемент { style_properties } таблица: первый ребенок {style_properties}
Зарегистрируйтесь или войдите
Зарегистрироваться через Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Специфика селектора — CSS — Ваши первые 30 дней веб-разработки
\newline
Этот пост является частью серии 30 дней веб-разработки .
В этой серии мы начнем с основ и пройдемся по всему, что вам нужно знать, чтобы приступить к веб-разработке.
Что проще сказать, «игрушечный кораблик ⛵️» или «спецификация селектора» в три раза быстрее? Попробуйте. Я не могу сказать ни того, ни другого.
Специфика селектора
#
В прошлой статье мы узнали, что Selector указывает на элемент HTML. Например, в следующем фрагменте кода селектором является тег p
:
p {цвет: синий}
Специфичность — это просто причудливый способ сказать конкретный . Чем конкретнее селектор, тем выше его приоритет. Вы используете различные типы селекторов, чтобы указать, насколько конкретными вы хотите быть.
Различные типы селекторов
#
Существует три различных типа селекторов: Tag, Class и Id.
До сих пор мы рассматривали только селекторов тегов . Селекторы тегов — это селекторы, указывающие на тег элемента. Итак, p
, body
, h2
— все это примеры селекторов тегов.
В игру вступает специфичность, потому что между тремя селекторами существует иерархия. Селектор идентификатора является наиболее конкретным (№ 1), селектор тегов наименее конкретным (№ 3), а селектор класса находится между ними (№ 2).
Причина, по которой важно знать, какой селектор является относительно более конкретным, заключается в том, что более конкретный селектор превосходит менее конкретные селекторы.
Если я установлю для абзаца сине-фиолетовый цвет с помощью селектора тегов, но также установлю для этого же абзаца ярко-розовый цвет с помощью селектора идентификатора, абзац будет ярко-розовым, а не сине-фиолетовым.
Чтобы лучше понять иерархию селекторов, я собираюсь использовать аналогию и возвращаться к ней по мере прохождения определения каждого селектора.
Аналог Представьте, что у вас есть комната, полная друзей, наполовину идентифицирующих себя как женщины, и одну из ваших подруг зовут Макс.
Сектор тегов
#
Когда вы назначаете с помощью селектора тегов, вы назначаете CSS для любого HTML-тега этого типа. Например, мы использовали тег абзаца, чтобы применить к нему цвет.
Возвращаясь к аналогии с друзьями, селектор тэгов походил бы на фразу: «Хорошо, все мои «друзья», поднимите руки». Это не очень конкретно, поэтому все в зале поднимают руки.
Селектор класса
#
Селектор класса — это когда вы используете имя класса элемента HTML для его выбора.
Класс — это еще один тип атрибута . Атрибуты находятся внутри тега элемента и предоставляют дополнительную информацию об этом элементе.
Отличительной особенностью атрибута класса класса является то, что мы можем использовать его для присвоения имени класса нескольким элементам. Скажем, например, мы хотели абзац и , оба имеют темно-зеленый цвет. Используя атрибут класса, мы дали бы обоим элементам одно и то же имя класса.
В следующем примере я дал элементам h2
и p
одно и то же имя класса: «some-className». Затем в стилях я присвоил «some-className» темно-зеленый цвет.
Используя селектор класса, мы избежали необходимости назначать значение цвета как для тега h2
, так и для тега p
. Вместо этого мы смогли сделать это с помощью одного селектора CSS.
Чтобы использовать селектор класса, используйте точку .
+ className
.
Возвращаясь к аналогии с друзьями, селектор класса немного более конкретен, чем «друзья», так что это все равно, что сказать: «Хорошо, все, кто идентифицирует себя как женщина, прыгают вверх и вниз». Теперь все поднимают руки. Но только самки прыгают вверх и вниз, а также поднимают руки.
Селектор идентификаторов
#
Идентификаторы — это еще один тип HTML-атрибутов. Однако атрибуты Id, в отличие от атрибутов класса, должны иметь уникальное значение.
Вы можете присвоить нескольким тегам HTML одно и то же имя класса, но если вы используете селектор CSS с идентификатором, значение идентификатора можно использовать только один раз в документе HTML.
Чтобы выбрать элемент по его идентификатору, вы используете синтаксис фунта (он же хэштег) #
+ idName
. См. следующий пример:
Возвращаясь к аналогии с друзьями, селектор Id является наиболее конкретным селектором, и он должен быть уникальным, как уникально имя человека. Назначение стиля на основе селектора идентификатора похоже на фразу: «Эй, Макс, просто ты , я хочу, чтобы ты пел во время прыжка». Теперь у вас все поднимают руки, но прыгают только самки, а бедный Макс прыгает и поет.