Cелекторы в CSS

До этого мы использовали только селектор конкретного тега ( например h1 {…} ) и селектор класса ( например some-class-name {…} ).

Селектор – это то, что мы пишем перед фигурными скобочками. Если чуть сложнее, то селектор – это шаблон по которому происходит привязка набора свойств к элементу на странице.

Очень важно рассмотреть некоторые другие селекторы помимо тех двух, что мы уже рассмотрели. Если не знать их, то можно насоздавать очень много лишних классов, а много лишнего кода – это всегда плохо. С помощью них можно выбирать потомков какого-либо html элемента по какому-либо признаку и присвоить им определенные свойства.

/*На странице у нас будет два div блока. Создадим и применим к ним два разных класса чтобы продемонстрировать работу и пользу селекторов*/ .divblock1 { width:410px; height:360px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } .divblock2 { width:410px; height:360px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } /* Ниже конекстный селектор. Здесь два html тега или класса (или и то и другое как в данном случае) пишутся через пробел. Здесь второй html тег это дочерний элемент первого. То есть если где-то на странице есть например div блоки к которым применен класс .divblock1 и в которых есть li теги то ко всем li тегам в этих div применяются свойства. Здесь у всех li в div с классом divblock1 меняется цвет текста с помощью color. */ .divblock1 li { color:blue; } /*ниже из прошлых уроков*/ .header { padding: 10px; background:#aaf6a1; } .nav { margin: 10px; padding: 10px; background:#f1f1a1; } .mainSection { float: left; width: 75%; height:600px; background:#b99999; } .aside { float: left; width: 25%; height:600px; background:#c1fee1; } .footer { clear: both; background:#d11777; } .header { padding: 10px; background:#aaf6a1; } .nav { margin: 10px; padding: 10px; background:#f1f1a1; } .section { float: left; width: 75%; height:600px; background:#b99999; } .aside { float: left; width: 25%; height:600px; background:#c1fee1; } .footer { clear: both; background:#d11777; } .divblock { width:410px; height:300px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } .imagePropsClass { width: 400px; height: 170px; } h1, h2 { font-weight: 600; font-family:’Brush Script MT’,cursive; } h3 { font-weight: 600; font-family: ‘Courier New’, monospace; } img { border-style: dashed; border-color: red; border-radius: 15px; }

Вот и сама страница с div-ами к которым будут применены классы divblock1 и divblock2. К списку в блоке класса divblock1 будет применен контекстный селектор.

Page tab text

Патрик учит div и CSS

  • List Item 1
  • List Item 2
  • List Item 3

Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p.

Патрик учит div и CSS

  • List Item
  • List Item
  • List Item

Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p.

Если открыть страницу, то можно увидеть, что все li в div с классом divblock1 окрасились в синий.

То есть контекстный селектор сработал.

Search Icon

Если бы мы не знали о контекстном селекторе, то не очень понятно как бы можно было бы применить какие-то свойства к li только в блоке класса divblock1, то есть, чтобы, например, элементов li в блоке класса divblock2 это не касалось.

Разве что создать отдельный класс для этих li и ко всем ним применить эти свойства через него, что ясное дело очень плохое решение по сравнению с этим.

Также обратите внимание, что li не прямой потомок div, a li прямой потомок ul.

То есть контекстный селектор работает для любых потомков прямых или не прямых.

Это пожалуй самый часто используемый селектор помимо двух ранее рассмотренных простейших селекторов.


Селектор дочерних элементов

В отличие от предыдущего контекстного селектора селектор ">" выбирает только прямых потомков html элемента.

Контекстный селектор выбирал вообще все li, которые есть в блоке div класса divblock1 и применял к ним синий цвет. Этот же селектор применяет свойства только к ПРЯМОМУ потомку html элемента.

/*На странице у нас будет два div блока. создадим и применим к ним два разных класса чтобы продемонстрировать работу и пользу селекторов*/ .divblock1 { width:410px; height:430px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } .divblock2 { width:410px; height:430px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } /* Очевидно что li в любом случае не может быть прямым потомком div блока, поскольку li очевидно всегда является прямым потомком только тега ul. Поэтому не получится окрасить в синий цвет li сделав например так .divblock1 > li { color:blue; } поскольку li не прямой потомок .divblock1. Вместо этого нужно указывать цепочку прямых потомков чтобы добраться к li вот так: */ .divblock1 > ul > li { color:blue; } /*Селектор выше применяет синий цвет ко всем li, которые являются прямыми потомками ul, при этом ul должен являться прямым потомком .divblock1.*/ /*ниже из прошлых уроков*/ .header { padding: 10px; background:#aaf6a1; } .nav { margin: 10px; padding: 10px; background:#f1f1a1; } .mainSection { float: left; width: 75%; height:600px; background:#b99999; } .aside { float: left; width: 25%; height:600px; background:#c1fee1; } .footer { clear: both; background:#d11777; } .header { padding: 10px; background:#aaf6a1; } .nav { margin: 10px; padding: 10px; background:#f1f1a1; } .section { float: left; width: 75%; height:600px; background:#b99999; } .aside { float: left; width: 25%; height:600px; background:#c1fee1; } .footer { clear: both; background:#d11777; } .divblock { width:410px; height:300px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } .imagePropsClass { width: 400px; height: 170px; } h1, h2 { font-weight: 600; font-family:’Brush Script MT’,cursive; } h3 { font-weight: 600; font-family: ‘Courier New’, monospace; } img { border-style: dashed; border-color: red; border-radius: 15px; }

Добавим еще один ul обернутый в чистый div блок в div блок класса divblock1.

Page tab text

Патрик учит div и CSS

  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item

Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p.

Патрик учит div и CSS

  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item

Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p. Какой-то текст в теге p.

Если откроем страницу, то можем увидеть что дочерний селектор > сработал и все прямые li потомки элемента ul, которые являются прямыми потомками блока с классом divblock1 окрасились в синий.

В отличие от предыдущего контекстного селектора этот исключает часть элементов внутри divblock1, к которым применяются свойства.

То есть синий цвет применился ко всем li, которые являются конечным элементом цепочки .divblock1 > ul > li, но он не был применен к li, которые являются конечным элементом .divblock1 > div > ul > li, поскольку такой цепочки в css файле мы не определяли.


Псевдокласс отрицания

С помощью псевдокласса отрицания not можно отключить применение свойств селектора к конкретным html элементам.

/*На странице у нас будет два div блока. Создадим и применим к ним два разных класса, чтобы продемонстрировать работу и пользу селекторов*/ .divblock1{ width:490px; height:925px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px 5px #888888; } .divblock2{ width:490px; height:930px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px 5px #888888; } /*В данном случае с помощью not можно сделать так чтобы свойства применялись ко всем дочерним img блока div с классом divblock1 КРОМЕ тех img которые с классом imagePropsClass.*/ .divblock1 img:not(.imagePropsClass){ border: 1.5px solid #d7d7d7; } /*ниже из прошлых уроков*/ .header { padding: 10px; background:#aaf6a1; } .nav { margin: 10px; padding: 10px; background:#f1f1a1; } .mainSection { float: left; width: 75%; height:600px; background:#b99999; } .aside { float: left; width: 25%; height:600px; background:#c1fee1; } .footer { clear: both; background:#d11777; } .header { padding: 10px; background:#aaf6a1; } .nav { margin: 10px; padding: 10px; background:#f1f1a1; } .section { float: left; width: 75%; height:600px; background:#b99999; } .aside { float: left; width: 25%; height:600px; background:#c1fee1; } .footer { clear: both; background:#d11777; } .divblock { width:410px; height:300px; background:#f1f1f1; float:left; margin: 0 15px 15px 0; text-align: center; padding: 5px 15px 15px 5px; box-shadow: 5px 10px #888888; } .imagePropsClass { width: 400px; height: 170px; } h1, h2 { font-weight: 600; font-family:’Brush Script MT’,cursive; } h3 { font-weight: 600; font-family: ‘Courier New’, monospace; } img { border-style: dashed; border-color: red; border-radius: 15px; }

Добавим пару картинок в div-ы. Как видим никаких классов к этим картинкам не применено.

Page tab text

Патрик учит div и CSS

  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item

Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p. Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p. Какой-то текст в теге p.Какой-то текст в теге p.

Патрик учит div и CSS

  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item
  • List Item

Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p. Какой-то текст в теге p.Какой-то текст в теге p.Какой-то текст в теге p. Какой-то текст в теге p.Какой-то текст в теге p.

Если откроем страницу, то можем увидеть, что свойства селектора (рамка фиолетового цвета) были применены ко всем картинкам div блока с классом divblock1 кроме картинки с классом imagePropsClass

То есть с помощью not мы исключили некоторые img из тех, к которым будут применяться свойства.

Также есть и другие селекторы, но здесь мы привели примеры наиболее полезных и часто используемых.

Тестирование в Java с помощью JUnit

Руководство по JUnit тестированию в Java: создание тестовых классов, использование assertEquals, assertTrue и других методов для проверки корректности работы кода.
Time to read: 17

Аннотации в JUnit тестах

Изучите основные аннотации JUnit: @Test, @Ignore, @Before, @After. Узнайте, как тестировать производительность методов и управлять выполнением тестов в Java.
Time to read: 18

Тестирование с Mockito

Mockito для тестирования Java-кода: mock и spy объекты, подмена зависимостей (stub), примеры тестирования методов с имитацией работы БД.
Time to read: 20