Язык CSS: основы
Введение
CSS — язык для описания стилей документа, он как и HTML является декларативным. Для CSS существуют расширения: препроцессоры (SASS, LESS, Stylus) и постпроцессоры (PostCSS), но у современного CSS есть всё необходимое для того, чтобы можно было не использовать препроцессоры.
Декларативность
Так же, как и в HTML — мы формально описываем желаемый результат. Например, если мы хотим получить непрерывную красного цвета рамку вокруг элемента шириной 2 пикселя мы прямо так и напишем:
.border { border-style: solid; border-width: 2px; border-color: red; }
Языковые конструкции
Основной языковой конструкцией в CSS являются именно стили, которые мы задаём тем или иным элементам. А для привязки к этим элементам используются селекторы. В примере выше — наш селектор будет искать любой элемент с классом "border"
. Существует несколько разных видов селекторов. Базовые это:
- Селектор по тегу (пишется так:
div
) - Селектор по классу (пишется так:
.border
) - Селектор по id (пишется так:
#id
)
Так же существуют специфичные селекторы, которые могут заглядывать в атрибуты, например селектор input[type="email"]
будет искать на странице все поля ввода с типом email. Есть и более сложные селекторы, как то:
- * (выбирает ВООБЩЕ ВСЕ ЭЛЕМЕНТЫ на странице)
- > (выбирает дочерний элемент по отношению к родительскому)
- ~ (выбирает элементы, которые находятся на этом же уровне вложенности, после указанного элемента, с тем же родителем)
- + (выбирает элемент, который находится непосредственно после указанного элемента, если у них общий родитель)
- : (селектор по псевдоклассу, например:
::after
,:hover
)
Пример работы с селекторами
a:hover {/* ссылка в состоянии hover */} ul + li {/* выберет любой <li> элемент, который находится непосредственно после элемента <ul> */} * {/* выберет любой элемент */} #navbar {/* выберет элемент с id="navbar" */} .navbar {/* выберет элемент с class="navbar" */} ul > li {/* выберет только дочерние элементы <li>, которые находятся внутри, на первом уровне вложенности по отношению к элементу <ul> */} p ~ span {/* выберет все элементы <span>, которые находятся после элемента <p> внутри одного родителя */} p span {/* выберет все элементы <span>, которые лежат внутри элемента <p> */} p, span {/* выберет все элементы <p> и <span> */} a.link:not(.link-visited) {/* выберет все элементы <a> с классом "link", у которых отсутствует класс "link-visited" */}
Что почитать?
- Селекторы MDN (https://developer.mozilla.org/ru/docs/Web/CSS/CSS_Selectors)
- Руководство по CSS MDN (https://developer.mozilla.org/ru/docs/Web/CSS/Reference)
Ссылка на презентацию: https://docs.google.com/presentation/d/12XGe0u1SJu7PkGuYCl_V_sIpYhhs3iZ2OYAdd07Or3o/edit?usp=sharing