Основы CSS
← К неделе 5 Лонгрид · Основы CSS

Основы CSS

CSS (Cascading Style Sheets — каскадные таблицы стилей) описывает внешний вид элементов страницы: цвета, шрифты, отступы, положение.

Мы не пишем код с нуля. Учимся читать CSS, который выдал ИИ, находить нужное правило и менять значение под себя.

Раздел 1 из —

1 Где живёт CSS

Где пишутся стили? Есть три способа: прямо в теге, в HTML-файле и в отдельном файле.

В атрибуте style прямо в теге <p style="color: red;">Применяем CSS</p> — стиль действует только на указанный элемент, на другие части документа не влияет.
Во внешнем файле .css Файл создаётся как обычный текстовый, с расширением .css, и подключается в <head> строкой <link rel="stylesheet" href="style.css">. Один файл стилей можно связать с несколькими HTML-файлами: правишь один файл — дизайн меняется на всех страницах, а код HTML упрощается.
В теге <style> внутри <head> Стили описываются внутри элемента style в разделе <head> и действуют в пределах одного HTML-файла.

Приоритет. Стили, которые загружаются в браузер позже, имеют более высокий приоритет по отношению к остальным. Сначала всегда загружается внешний файл, затем — элемент style, затем — атрибут style.

Стили во внешних файлах Стили в элементе style Стили в атрибуте style
низкийприоритетвысокий

Основное правило: более поздняя инструкция отменяет более раннюю.

2 Базовый формат CSS

Инструкция CSS собирается из селектора, свойства и значения:

h1 {
  color: red;
  /* красный цвет текста */
}

Нажимай на подсвеченные части

h1 — селектор
Указывает браузеру, к какому элементу применить стиль: тег, класс или идентификатор. Все инструкции селектора заключаются в фигурные скобки { }.
color — свойство
Характеристика элемента, которую меняем: цвет, размер, отступ. От значения отделяется двоеточием :.
red — значение
Конкретное значение для выбранного свойства. Пара «свойство: значение» называется объявлением и заканчивается точкой с запятой ;. Объявлений внутри скобок может быть несколько: h1 { color: red; font-style: italic; }
/* … */ — комментарий
Текст между /* и */ браузер не читает. В CSS комментарии пишутся не так, как в HTML. Вложенными они быть не могут.

Пробелы и переносы строк не влияют на работу кода — их вставляют, чтобы инструкции легче читались.

Значение по умолчанию. У каждого свойства есть заранее заданное значение — оно применяется, если своё не указано и не унаследовано. Например, у font-weight по умолчанию normal: текст не жирный, даже если про насыщенность нигде не написано.

3 Область применения стилей: селекторы

Селектор — это указатель: он говорит браузеру, каким элементам достанется стиль. Три главных способа указать элемент — по тегу, по классу и по идентификатору:

p { }
По тегу. Пишешь имя тега без скобок — стиль получают все такие теги на странице: правило p покрасит каждый абзац <p>.
.book { }
По классу. Класс — это метка, которую вешают на элемент в HTML: <p class="book">. В CSS к метке обращаются через точку: .book. Одну и ту же метку можно повесить хоть на десять элементов — все получат этот стиль.
#intro { }
По идентификатору. Тоже метка — <p id="intro">, — но уникальная: один id носит только один элемент на странице. В CSS к нему обращаются через решётку: #intro.
h1, h2 { }
Несколько селекторов через запятую — один стиль сразу всем перечисленным: и заголовкам <h1>, и <h2>.
* { }
Звёздочка — вообще все элементы страницы разом.

Как это выглядит вживую:

<!-- HTML -->
<p id="intro">Знакомься: капибара</p>
<p>Капибара живёт у воды</p>
<p class="fact">Капибара — самый крупный грызун</p>

/* CSS */ p      { color: gray; }
.fact  { background-color: #ABDBDB; }
#intro { font-weight: bold; }

Щёлкай селекторы — в результате подсветятся элементы, которые они находят

Результат

Знакомься: капибара

Капибара живёт у воды

Капибара — самый крупный грызун

p — селектор типа
Находит все теги <p> — серый цвет текста получают все три абзаца.
.fact — селектор класса
Находит элементы с class="fact" — здесь это третий абзац: у него появляется мятная подложка. Серый цвет от правила p при этом остаётся — правила дополняют друг друга, когда меняют разные свойства. Тот же класс можно присвоить и другим элементам.
#intro — селектор идентификатора
Находит элемент с id="intro" — первый абзац становится жирным, оставаясь серым. Идентификатор на странице один.

Чтобы найти стиль элемента в чужом коде: посмотри в HTML его class или id — и найди такой же селектор в CSS.

4 Псевдоклассы

Стиль может применяться только при наступлении события — такие классы называются псевдоклассами. Имя тега и псевдокласс соединяются двоеточием:

a:hover  { color: red; }   /* при наведении указателя на ссылку */
a:active { color: #EE3B96; } /* пока ссылка активна */

:hover срабатывает, пока на элементе указатель мыши. :active — активное состояние: между нажатием и отпусканием кнопки мыши. Псевдокласс active указывают после hover.

Попробуй

5 Как указать цвет и длину

Цвет в CSS складывается из трёх составляющих: красной (red), зелёной (green) и синей (blue). Чем выше значение составляющей, тем интенсивнее цвет. Способы записи:

red
Название цвета словом.
rgb(255, 0, 0)
Три составляющие числами от 0 до 255 (или в процентах).
#ff0000
Шестнадцатеричный формат: по два символа на каждую составляющую, от 00 до ff. Используются цифры 0–9 и буквы a–f.
#f00
Трёхзначная запись — когда оба символа каждой составляющей одинаковы: ff, 00, 00f00.
transparent
Прозрачность. Если у родительского элемента задан цвет фона или фоновая картинка, они будут видны и у дочернего.
Попробуй: собери цвет из трёх составляющих

Размеры элементов задают в единицах:

px
Количество пикселей: font-size: 14px;
%
Коэффициент в процентах от родительского элемента: width: 120%;
em
Множитель для текущего размера текста: 1.2em.

Если значение равно нулю, единицы измерения можно не указывать: padding: 0;

Проверь себя
В коде видишь font-size: 1.2em; Что означает это значение?

6 Свойства шрифта и текста

color
Цвет текста. Если не указан — наследуется от родительского элемента.
font-family
Тип шрифта: имя шрифта или имя семейства — serif (с засечками), sans-serif (без засечек), monospace (фиксированной ширины). Можно указать несколько через запятую: следующее используется, если недоступно предыдущее. Вначале обычно пишут название конкретного шрифта, затем — семейство. Имя с пробелами — в кавычках: font-family: "PT Sans", sans-serif; Шрифт не из стандартного набора сначала подключают файлом в <head> — например, строкой <link> с Google Fonts. <link> скачивает шрифт, а font-family указывает, где его применить: без первого браузер шрифта не знает, без второго — не использует.
font-size
Размер шрифта (кегль): в пикселях или процентах.
font-weight
Насыщенность: число от 100 до 900, больше — толще. normal — обычный (400), bold — жирный (700).
font-style
Начертание: italic — курсив.
line-height
Расстояние между строками. Число без единиц — высота строки равна размеру шрифта, умноженному на это число: line-height: 1.2;
text-align
Выравнивание текста по горизонтали: left, right, center, justify (по ширине).
text-indent
Отступ красной строки.
text-decoration-line
Линии у текста: underline — подчёркивание, overline — надчёркивание, line-through — перечёркивание, none — без линии.
text-shadow
Тень, отбрасываемая текстом: смещение по горизонтали, по вертикали, радиус размытия, цвет — text-shadow: 10px 5px 3px #BDAFA1; Если цвет опущен, тень совпадёт с цветом текста. Отрицательное смещение сдвигает тень в противоположную сторону.
Проверь себя
Нужно поменять цвет текста у кнопки. Какое свойство ищешь в её правиле?

7 Блочная модель

Каждый элемент, описанный в коде HTML, занимает прямоугольную область — блок. Блок состоит из содержимого, внутренних отступов, границы и внешних отступов:

margin — внешний отступ, за пределами границы
border — граница
padding — внутренний отступ, вокруг содержимого
содержимое — текст или изображение
width, height
Ширина и высота области содержимого.
padding
Ширина внутреннего отступа — между содержимым и границей.
border
Граница. Ширину, тип и цвет задают одним свойством — значения через пробел в любом порядке: border: 5px dotted #CE7C9F; Типы: solid — сплошная, dotted и dashed — пунктирные, double — двойная.
margin
Ширина внешнего отступа — от границы до соседних элементов.
border-radius
Скругление углов границы. Степень скругления — радиус окружности, вписанной в угол: border-radius: 20px; Фон элемента обрезается по скруглению.

Одно число в margin или padding задаёт одинаковый отступ со всех четырёх сторон. Четыре числа — по сторонам в порядке: сверху, справа, снизу, слева. Два — первое сверху и снизу, второе слева и справа. Отдельную сторону задают своим свойством: margin-top, padding-left и так далее.

Попробуй: тяни ползунки — блок перестроится, код обновится
содержимое
 
div {
  width: 100px; padding: 10px; border: 2px solid #CE7C9F; margin: 20px;
  background-color: #F3EEE7;
}

Нажимай на строки — увидишь, за какой слой блока отвечает каждая

width: 100px;
Ширина области содержимого — 100 пикселей. Отступы и граница в это число не входят.
padding: 10px;
Внутренний отступ: 10 пикселей между содержимым и границей, со всех четырёх сторон. Цвет фона закрашивает и эту область.
border: 2px solid #CE7C9F;
Граница: ширина 2 пикселя, тип — сплошная линия, цвет — розовый из палитры. Три параметра одним свойством, порядок любой.
margin: 20px;
Внешний отступ: 20 пикселей от границы до соседних элементов, со всех сторон. Фон эту область не закрашивает — она всегда прозрачная.
Проверь себя
Блоки прижались вплотную друг к другу. Каким свойством их раздвинуть?

8 Свойства фона

background-color
Цвет фона. Применяется к области содержимого, внутренним отступам и границе. К внешним отступам не применяется — фон margin всегда прозрачный.
background-image
Фоновое изображение: background-image: url("wall.png"); По умолчанию картинка повторяется по горизонтали и вертикали.
background-repeat
Повтор фона: repeat-x — по горизонтали, repeat-y — по вертикали, no-repeat — не повторять.
background-position
Положение фона: left / center / right по горизонтали, top / bottom по вертикали, либо число в px или %.
background-size
Размер фонового изображения: contain — всё изображение целиком с сохранением пропорций, cover — пропорции сохраняются и занята вся площадь. Вместо этих слов можно задать точный размер картинки в пикселях или процентах: background-size: 200px;

9 Отображение и размещение

Свойство display задаёт способ отображения элемента:

inline
Элемент располагается как строчный, не создавая нового блока. Ширину и высоту содержимому задать нельзя.
block
Элемент отображается как блок.
inline-block
Располагается как строчный, но содержимое может иметь ширину и высоту.
none
Элемент скрыт — приравнивается к его отсутствию, поэтому не отображается.
flex
Гибкий контейнер — про него следующий раздел.

Обычно браузер сам расставляет элементы по порядку — как они идут в коде. Свойство position позволяет сдвинуть элемент с его обычного места. Значения отличаются тем, от чего отсчитывается сдвиг:

static
По умолчанию: элемент стоит там, куда его поставил порядок кода. Сдвинуть нельзя.
relative
Элемент можно сдвинуть относительно его обычного места: top: 10px; — на 10 пикселей ниже, чем он стоял бы сам.
absolute
Элемент вынимается из общего потока и ставится в точку, отсчитанную от родительского блока. Соседи ведут себя так, будто его нет.
fixed
Элемент прибит к окну браузера: при прокрутке остаётся на месте. Так делают «плавающие» кнопки и шапки сайтов.

Куда и насколько сдвигать, задают свойства top, bottom, left, right — отступ от соответствующего края.

Если границы элементов перекрываются, порядок наложения меняют свойством z-index: значение — целое число, чем оно выше, тем ближе элемент к переднему плану. Чтобы z-index работал, у элемента должно быть значение position, отличное от static.

10 Гибкая компоновка: флексбокс и колонки

Флексбокс (flexbox, flexible box) — контейнер, размещение и размер которого можно гибко регулировать. Раньше макеты собирали свойствами float и position; флексбокс упрощает эту работу.

Свойство задаётся родительскому элементу: display: flex — контейнер занимает всю ширину, display: inline-flex — пространство, ограниченное содержимым. Родительский элемент становится флекс-контейнером, вложенные в него — флекс-элементами:

#container {
  display: flex;
}
flex-direction
Направление выравнивания флекс-элементов: row — слева направо (по умолчанию; совпадает с направлением письма), row-reverse — справа налево, column — сверху вниз, column-reverse — снизу вверх.
order
Порядок отображения флекс-элемента: элементы с меньшим номером идут раньше. Задаётся дочерним элементам.
justify-content, gap
Распределение флекс-элементов вдоль направления (center, space-between) и расстояние между ними.

Попробуй сам: переключай значения — флекс-элементы перестроятся, а код ниже обновится.

flex-direction
justify-content
gap
1
2
3
 

Многоколоночная вёрстка раскладывает содержимое в несколько колонок, как в газете: column-count — количество колонок, column-width — ширина колонки, columns: 5em 2; — оба значения одним свойством. Расстояние между колонками — column-gap.

11 Движение: прозрачность, градиент, переходы

opacity
Прозрачность элемента: число от 0.0 (полностью прозрачный) до 1.0 (полностью непрозрачный, по умолчанию).
linear-gradient
Градиент — плавный переход от одного цвета к другому. Линейный — когда цвет меняется в одном направлении: background: linear-gradient(45deg, #CE7C9F, #F9F8F4); — направление, начальный цвет, конечный. Направление задаётся углом или конечной позицией (to right). Цветов может быть несколько, с позициями смены.

Переходы обеспечивают плавную смену одного стиля другим: цвет, размер или положение меняются не скачком, а в течение заданного времени. Указываются только первый и последний стили — промежуточные состояния браузер рассчитывает сам. transition-property — какие свойства менять (несколько — через запятую), transition-duration — за сколько времени (в секундах или миллисекундах):

div {
  width: 100px;
  background-color: #F3EEE7;
  transition-property: width, background-color; transition-duration: 3s;
}
div:hover {
  width: 200px;
  background-color: #ABDBDB;
}

Нажимай на подсвеченные строки

transition-property
Какие свойства менять плавно. Здесь два — ширина и цвет фона, через запятую.
transition-duration: 3s;
За сколько времени завершить изменение — три секунды. Задаётся в секундах (s) или миллисекундах (ms).
div:hover
Конечный стиль — действует, пока на элементе указатель мыши. При наведении блок меняет цвет, медленно растягиваясь по горизонтали. Промежуточные состояния браузер рассчитывает сам.
Попробуй: этот блок живёт по коду выше
наведи на меня

Практика

Перед тобой карточка с готовыми стилями. Найди нужные свойства, поменяй значения, допиши новые — как будешь делать в своём проекте.

  1. Смени цвет фона background (например, на #181818 — тогда поменяй и color, чтобы текст читался).
  2. Увеличь padding — больше 16px.
  3. Увеличь font-size — больше 16px.
  4. Допиши в .card скругление углов: border-radius: 12px;
  5. Найди правило с селектором .card h2 (оно уже есть в коде) и допиши в него цвет заголовка: color: #CE7C9F;
Твой код (меняй значения в блоке .card)
Превью
Нажми «▶ Запустить»
чтобы увидеть карточку
Пример решения (сравни со своим)
0 / 5 выполнено
  • Изменён цвет фона background
  • Увеличен padding (больше 16px)
  • Увеличен font-size (больше 16px)
  • Дописан border-radius
  • В правиле .card h2 дописан color