ШПАРГАЛКА

CSS

Шпаргалка по CSS: подключение, селекторы, специфичность, цвета, единицы, блочная модель, display, position, переменные, медиазапросы, Flexbox и Grid.

CSS (Cascading Style Sheets) — язык описания внешнего вида HTML-документа: цвета, размеры, отступы, расположение блоков, шрифты и анимации. Эта шпаргалка собирает основные конструкции CSS с короткими рабочими примерами. Для глубокого погружения во Flexbox и Grid есть отдельные шпаргалки.

Подключение CSS

Стили можно подключить тремя способами. Рекомендуемый — внешний файл через <link>: его кеширует браузер и переиспользуют все страницы.

/* 1. Внешний файл styles.css, в <head> HTML:
   <link rel="stylesheet" href="styles.css"> */

/* 2. Внутренний блок <style> внутри <head>:
   <style> p { color: red; } </style> */

/* 3. Инлайн прямо в атрибуте элемента (избегайте):
   <p style="color: red;">текст</p> */

Совет: инлайн-стили имеют высокую специфичность и мешают переиспользованию — держите стили во внешнем файле.

Синтаксис правила

CSS-правило состоит из селектора и блока объявлений в фигурных скобках. Каждое объявление — это пара свойство: значение;.

селектор {
  свойство: значение;   /* объявление */
  color: #333;          /* цвет текста */
  font-size: 16px;      /* размер шрифта */
}

/* Несколько селекторов через запятую — общий стиль */
h1, h2, h3 {
  margin: 0;
}

/* Комментарий: /* ... */ — однострочных // в CSS нет */

Селекторы

Селектор определяет, к каким элементам применится правило. Базовые: по тегу, по классу (.) и по id (#).

p        { color: gray; }   /* по тегу: все <p> */
.btn     { padding: 8px; }   /* по классу: class="btn" */
#header  { height: 60px; }    /* по id: id="header" */
*        { margin: 0; }       /* универсальный: все элементы */

/* По атрибуту */
input[type="text"] { border: 1px solid #ccc; }
a[target="_blank"] { color: teal; }

Комбинаторы

Комбинаторы выбирают элементы по их отношению друг к другу в дереве документа.

div p     { }  /* потомок: любой <p> внутри <div> */
div > p   { }  /* прямой ребёнок: <p> непосредственно в <div> */
h2 + p    { }  /* соседний: первый <p> сразу после <h2> */
h2 ~ p    { }  /* все следующие соседи <p> после <h2> */

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

Псевдоклассы (одно двоеточие :) описывают состояние или позицию элемента.

a:hover        { color: red; }       /* наведение мышью */
a:visited      { color: purple; }     /* посещённая ссылка */
input:focus    { outline: 2px solid blue; }  /* фокус */
button:disabled{ opacity: 0.5; }       /* выключенный */
li:first-child { font-weight: bold; }  /* первый ребёнок */
li:last-child  { border: none; }        /* последний */
li:nth-child(2n) { background: #f0f0f0; }  /* чётные */
p:not(.intro)  { color: gray; }         /* кроме .intro */

Псевдоэлементы

Псевдоэлементы (два двоеточия ::) стилизуют часть элемента или вставляют контент.

p::first-line   { font-weight: bold; }   /* первая строка */
p::first-letter { font-size: 200%; }      /* первая буква */

/* ::before и ::after вставляют контент через content */
.label::before { content: "★ "; }
.link::after   { content: " ↗"; }

/* стиль выделенного мышью текста */
::selection { background: yellow; }

Специфичность и каскад

Когда несколько правил задают одно свойство одному элементу, побеждает правило с большей специфичностью. Считают четыре уровня (по убыванию веса):

ЧтоПримерВес
Инлайн-стильstyle="..."самый высокий
id#headerвысокий
Класс, атрибут, псевдокласс.btn, :hoverсредний
Тег, псевдоэлементp, ::beforeнизкий
/* Специфичность: #id (1,0,0) победит .class (0,1,0) */
#box   { color: green; }   /* применится это */
.box   { color: red; }

/* !important перебивает всё — используйте крайне редко */
p { color: blue !important; }

/* При равной специфичности побеждает правило, идущее ниже */

Цвета

Цвет задают именем, шестнадцатеричным кодом (hex), функциями rgb() и hsl(). Альфа-канал — прозрачность от 0 до 1.

.a { color: red; }                  /* имя цвета */
.b { color: #ff0000; }               /* hex, можно #f00 */
.c { color: #ff000080; }             /* hex с альфой (~50%) */
.d { color: rgb(255, 0, 0); }        /* красный, зелёный, синий */
.e { color: rgba(255, 0, 0, 0.5); }  /* с прозрачностью 50% */
.f { color: hsl(0, 100%, 50%); }     /* тон, насыщенность, светлота */
.g { color: hsla(0, 100%, 50%, 0.5); }
.h { background: transparent; }      /* прозрачный */

Единицы измерения

Единицы бывают абсолютные (px) и относительные (em, rem, %, vw, vh). Относительные удобнее для адаптивности.

.a { width: 200px; }   /* пиксели — фиксированный размер */
.b { font-size: 1.5em; }  /* em — относительно шрифта родителя */
.c { font-size: 1.5rem; } /* rem — относительно шрифта <html> */
.d { width: 50%; }      /* процент от родителя */
.e { width: 50vw; }     /* 50% ширины окна (viewport width) */
.f { height: 100vh; }   /* 100% высоты окна (viewport height) */

Правило большого пальца: для шрифтов берите rem, для ширин — % или px, для полноэкранных секций — vw/vh.

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

Каждый элемент — прямоугольник: контент, внутренний отступ padding, рамка border и внешний отступ margin.

.box {
  margin: 10px;             /* внешний отступ со всех сторон */
  margin: 10px 20px;        /* верх/низ 10, лево/право 20 */
  margin: 5px 10px 15px 20px; /* верх право низ лево (по часовой) */
  padding: 16px;            /* внутренний отступ */
  border: 2px solid #333;   /* толщина, стиль, цвет */
}

/* box-sizing: border-box включает padding и border
   в заданную width — размеры считаются предсказуемо */
* { box-sizing: border-box; }

Важно: по умолчанию width задаёт ширину только контента, а padding и border добавляются сверху. С border-box width — это итоговая ширина блока.

display

Свойство display определяет, как элемент участвует в потоке и как ведут себя его потомки.

.a { display: block; }        /* блок: на всю ширину, с новой строки */
.b { display: inline; }       /* строчный: ширина по контенту */
.c { display: inline-block; } /* строчный, но принимает width/height */
.d { display: none; }         /* полностью убрать из потока */
.e { display: flex; }         /* флекс-контейнер (см. шпаргалку Flexbox) */
.f { display: grid; }         /* грид-контейнер (см. шпаргалку Grid) */

Отличие от visibility: hidden: при display: none элемент не занимает места, при visibility: hidden — занимает, но невидим.

position

Свойство position управляет позиционированием со смещениями top, right, bottom, left.

.a { position: static; }   /* по умолчанию, в обычном потоке */
.b { position: relative; top: 10px; left: 5px; } /* сдвиг от своего места */
.c { position: absolute; top: 0; right: 0; }      /* от ближайшего
       позиционированного предка (relative/absolute/fixed) */
.d { position: fixed; bottom: 20px; right: 20px; } /* от окна, не скроллится */
.e { position: sticky; top: 0; }  /* липкий: прилипает при прокрутке */

/* z-index управляет наложением слоёв (выше — поверх) */
.modal { position: fixed; z-index: 100; }

Текст и шрифты

Группа свойств для оформления текста: семейство шрифта, размер, начертание, выравнивание, межстрочный интервал.

.text {
  font-family: "Arial", sans-serif; /* шрифт + запасной */
  font-size: 16px;
  font-weight: bold;        /* или 100..900, normal */
  font-style: italic;
  line-height: 1.5;         /* межстрочный интервал */
  text-align: center;       /* left | right | center | justify */
  text-decoration: underline;  /* подчёркивание */
  text-transform: uppercase;   /* ВЕРХНИЙ регистр */
  letter-spacing: 1px;       /* трекинг между буквами */
  color: #222;
}

Фон

Фон может быть цветом, изображением или градиентом. Удобна короткая запись background.

.a { background-color: #f5f5f5; }
.b { background-image: url("bg.png"); }
.c {
  background-image: url("hero.jpg");
  background-size: cover;      /* заполнить блок */
  background-position: center;
  background-repeat: no-repeat;
}
/* короткая запись */
.d { background: #fff url("bg.png") no-repeat center / cover; }
/* градиент */
.e { background: linear-gradient(to right, #ff7e5f, #feb47b); }

Границы и тени

Рамки, скругление углов и тени делают интерфейс выразительнее.

.card {
  border: 1px solid #ddd;
  border-radius: 8px;            /* скругление углов */
  border-top: 3px solid teal;    /* только одна сторона */
}
/* тень блока: x y размытие разброс цвет */
.box   { box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); }
/* тень текста: x y размытие цвет */
.title { text-shadow: 1px 1px 2px gray; }
/* несколько теней через запятую */
.deep  { box-shadow: 0 1px 2px #0002, 0 4px 12px #0001; }

Переменные CSS

Кастомные свойства (переменные) объявляют с префиксом -- и читают через var(). Обычно их кладут в :root, чтобы они были глобальными.

:root {
  --primary: #4f46e5;
  --gap: 16px;
  --radius: 8px;
}

.button {
  background: var(--primary);
  padding: var(--gap);
  border-radius: var(--radius);
}

/* второе значение var() — запасное, если переменной нет */
.box { color: var(--accent, #333); }

/* переменные наследуются и переопределяются локально */
.dark { --primary: #1e1b4b; }

Медиазапросы (адаптивность)

Медиазапросы применяют стили в зависимости от ширины экрана, ориентации и других условий. Основа адаптивной (responsive) вёрстки.

/* мобильный по умолчанию, затем расширяем — mobile-first */
.container { width: 100%; }

@media (min-width: 768px) {   /* планшеты и шире */
  .container { width: 750px; }
}

@media (min-width: 1200px) {  /* десктоп */
  .container { width: 1140px; }
}

/* диапазон и ориентация */
@media (max-width: 600px) and (orientation: portrait) {
  .menu { display: none; }
}

Переходы и анимации

transition плавно меняет значение свойства, animation с @keyframes описывает многошаговую анимацию.

/* плавный переход: свойство длительность функция задержка */
.btn {
  background: #4f46e5;
  transition: background 0.3s ease;
}
.btn:hover { background: #3730a3; }

/* несколько свойств */
.box { transition: transform 0.2s, opacity 0.2s; }

/* ключевые кадры и их запуск */
@keyframes pulse {
  0%   { transform: scale(1); }
  50%  { transform: scale(1.1); }
  100% { transform: scale(1); }
}
.heart {
  animation: pulse 1s ease-in-out infinite;
}

Основы Flexbox

Flexbox раскладывает элементы в одну ось (строку или столбец) и удобно центрирует. Полный разбор — в отдельной шпаргалке Flexbox.

.container {
  display: flex;
  flex-direction: row;        /* или column */
  justify-content: center;    /* выравнивание по главной оси */
  align-items: center;        /* по поперечной оси */
  gap: 16px;                  /* промежутки между элементами */
  flex-wrap: wrap;            /* перенос на новую строку */
}
.item { flex: 1; }            /* элемент растягивается поровну */

Основы Grid

Grid — двумерная сетка из строк и столбцов. Подробнее — в отдельной шпаргалке Grid.

.grid {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;  /* 3 равных колонки */
  grid-template-columns: repeat(3, 1fr); /* то же короче */
  gap: 16px;                            /* промежутки */
}

/* адаптивная сетка без медиазапросов */
.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 12px;
}

/* растянуть элемент на несколько колонок */
.wide { grid-column: span 2; }
Поддержать проект