CSS: научитесь оформлять страницы
HTML создаёт скелет, а CSS придаёт ему облик: цвет, шрифт, расположение, анимацию. Вы пишете CSS и сразу видите результат в живом окне. От селектора до Flexbox и Grid.
Задача: Скруглите углы блока
Добро пожаловать! CSS (Cascading Style Sheets) — это язык оформления веб-страниц. Если HTML говорит, что есть на странице, то CSS говорит, как это выглядит: цвет, размер, расположение, отступы. В этом курсе вы увидите каждое понятие своими глазами и попробуете сами. Начнём.
Знакомство с CSS
Что такое CSS и зачем он нужен
Страница, написанная только на HTML, выглядит как чёрный текст в простом виде. CSS добавляет этой странице цвет, красивый шрифт и расположение. Ниже слева — код CSS, справа — результат. Измените значение color и посмотрите, как сразу поменяется цвет заголовка.
h1) цвет: в style.css напишите color: #2f6bed;. Результат сразу увидите в окне справа.Говорит, что есть: заголовок, текст, картинка. Без оформления, в простом виде.
Говорит, как это выглядит: цвет, размер, расположение. Оживляет страницу.
3 способа подключить CSS
CSS можно добавить к HTML-странице тремя разными путями. Лучший — способ 3: отдельный файл .css. Потому что один файл работает на весь сайт и код остаётся чистым. Именно так устроен и редактор этого курса: CSS вы пишете во вкладке style.css.
p) размер шрифта: напишите font-size: 20px;. Проверьте сами, как работает внешний CSS.style.css). Способ inline — только для мелких, разовых случаев.Синтаксис: селектор, свойство, значение
Каждое правило CSS имеет одинаковое строение. Сначала селектор (кого оформляем), затем в фигурных скобках пары свойство: значение. В конце каждой пары ставится точка с запятой (;).
селектор { свойство: значение; } = основная форма правила CSSh1) цвет (color) и сделайте абзац (p) крупнее (font-size: 18px или больше).Упражнения
Теперь попробуйте самостоятельно. В каждом упражнении напишите одно правило CSS в style.css. Если верно, кружок подтвердится зелёной галочкой.
Тест модуля 1
Чтобы завершить модуль, дайте не менее 4/5 правильных ответов.
Селекторы и специфичность
Селекторы элемента, класса и id
Селектор говорит CSS, какой элемент оформлять. Есть три основных типа: по имени элемента (без знака), по классу (с точкой .) и по id (с решёткой #). Класс можно задать нескольким элементам, а id должен быть на странице только один.
.class (точка), #id (решётка).sarlavha синим: .sarlavha { color: #2f6bed; }. Оба элемента .sarlavha изменятся одновременно.Комбинаторы: группировка, потомок, ребёнок, сосед
Селекторы можно объединять, чтобы точнее нацеливаться. Например, чтобы выбрать элемент только внутри другого элемента, используется селектор потомка (пробел).
.quti. Для этого используйте селектор потомка: .quti p. Абзац снаружи трогать не нужно.Псевдоклассы: состояние и порядок
Псевдокласс нацеливается на состояние или порядок элемента. Они пишутся с двоеточием (:). Самые используемые:
li:first-child { font-weight: bold; }.:hover.Псевдоэлементы: ::before и ::after
С помощью псевдоэлемента можно добавить дополнительную часть перед элементом или после него: ::before (перед) и ::after (после). Они пишутся с двойным двоеточием (::) и требуют свойства content.
::before добавляет часть перед элементом, ::after — после::before и content, например: content: "Привет, ".Специфичность, каскад и наследование
Иногда к одному элементу подходит несколько правил. Какое из них победит? Это решает специфичность: селектор id сильнее класса, а класс сильнее элемента. Inline-стиль (style="") сильнее всех.
#maxsus синим: #maxsus { color: #2f6bed; }. Он перебьёт и элемент, и класс.Если специфичность одинакова, побеждает правило, стоящее в файле ниже (последнее).
Некоторые свойства (color, font) переходят от родителя к детям. А border, padding — не переходят.
!important принудительно перебивает любое правило. Используйте его как можно реже, потому что потом сложнее исправлять.Упражнения
Попробуйте селекторы самостоятельно. В каждом упражнении выберите правильный селектор и напишите CSS.
Тест модуля 2
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Цвета и фон
Форматы цвета и прозрачность
В CSS цвет можно записать несколькими способами. Цвета экрана получаются из смеси красного, зелёного и синего лучей (RGB). Приведённые ниже форматы могут давать одинаковый результат, различается лишь запись.
.p2 { color: #2f6bed; }. Hex — это шестизначный код цвета, начинающийся с #.rgba и hsla (от 0 до 1) задаёт прозрачность. 1 = полностью, 0 = невидимо.background-color и background-image
Если color задаёт цвет текста, то background-color закрашивает задний фон элемента. Чтобы вместо фона поставить картинку, используется background-image.
.quti) какой-нибудь цвет фона. Используйте background или background-color (например: background: #2f6bed).Размер и положение фона
Можно настроить, как фоновая картинка располагается в блоке: background-size (размер), background-position (положение), background-repeat (повторение). Два важных размера:
Картинка заполняет весь блок. При необходимости края обрезаются. Пустого места не остаётся.
Вся картинка помещается внутрь. Не обрезается, но вокруг может остаться пустое место.
.contain свойство background-size: contain;. Посмотрите разницу с cover.background-repeat: no-repeat запрещает повторение картинки. Картинка в этом примере загружается из интернета.Градиенты: плавные переходы цвета
Градиент — это плавный переход между двумя или более цветами. Он считается картинкой, поэтому задаётся в background. Есть три основных вида:
.g3) свой градиентный фон. Например: background: linear-gradient(to right, #16a34a, #22c55e).conic-gradient вращает цвета по кругу, удобно для диаграмм и часов.Сокращение background и несколько слоёв
Сокращение background позволяет записать все настройки фона в одной строке. Кроме того, можно наложить несколько слоёв фона друг на друга, разделив их запятой. Слой, написанный выше, будет верхним.
.karta) градиентный фон: background: linear-gradient(120deg, #2f6bed, #1d4ed8);. Два цвета плавно переходят друг в друга.Записывает цвет, картинку, размер, положение в одну строку. Сокращает код.
Слои, разделённые запятой. Например, полупрозрачное градиентное покрытие поверх картинки.
Упражнения
Попробуйте цвета и фон самостоятельно. Используйте разные форматы цвета и градиент.
Тест модуля 3
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Текст и типографика
font-family: семейства шрифтов
font-family задаёт, каким шрифтом написан текст. Шрифты делятся на три больших семейства, у каждого свой вид и назначение.
.mono) моноширинный шрифт: font-family: 'Courier New', monospace;. Все буквы будут одной ширины.serif или sans-serif).font-size и единицы измерения
font-size задаёт размер текста. Есть несколько единиц: px — точные пиксели, em — относительно шрифта родителя, rem — относительно шрифта корня (html), % — тоже относительная.
font-size текста (.matn) равным 20px или больше.Жирность, курсив и межстрочный интервал
font-weight задаёт жирность (normal/bold или от 100 до 900), font-style: italic делает текст курсивным, а line-height управляет расстоянием между строками.
.b) жирным: font-weight: bold;.line-height: 1.6 умножается на размер шрифта и даёт самый удобный для чтения результат.Выравнивание и оформление текста
Текст можно оформить по-разному: text-align — выравнивание (влево/по центру/вправо/по ширине), text-decoration — подчёркивание, text-transform — заглавные или строчные буквы, letter-spacing — расстояние между буквами.
h2) по центру: text-align: center.text-shadow и веб-шрифты
text-shadow добавляет тень тексту: пишется в порядке горизонталь вертикаль размытие цвет. Кроме того, к странице можно подключить готовые шрифты из сервисов вроде Google Fonts.
.soya) тень текста: text-shadow: 2px 2px 0 #bcd0f7;.Тень делает текст заметнее и объёмнее. Можно задать и несколько теней через запятую.
Готовые шрифты придают странице особый вид. Помимо системных шрифтов вы подключаете любой нужный.
Упражнения
Попробуйте текст и типографику самостоятельно. Меняйте размер, жирность и выравнивание.
Тест модуля 4
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Box Model
Box Model: каждый элемент — это блок
В CSS каждый элемент похож на блок из четырёх слоёв. Изнутри наружу: content (текст), padding (внутренний отступ), border (граница) и margin (внешний отступ). Понимание этого строения — основа расположения.
.quti) границу: border: 3px solid #2f6bed;. Это внешняя линия блочной модели.padding создаёт отступ внутри блока, а margin — снаружи блока. Многие путаницы возникают именно из-за смешения этих двух.padding: внутренний отступ
padding создаёт отступ между текстом (content) и границей (border). Его можно задать одним или несколькими значениями.
.quti) padding в 16px или больше.border и border-radius
border рисует блоку границу и состоит из трёх частей: толщина стиль цвет. А border-radius скругляет углы.
.b) скруглённые углы: border-radius: 14px;.solid (сплошная), dashed (штриховая), dotted (точечная). Если границы нет, пишут none.margin и центрирование
margin создаёт отступ снаружи блока, между элементами. Самый полезный приём: разместить блок с заданной шириной по горизонтали по центру с помощью margin: 0 auto.
.quti) по центру горизонтали: margin: 0 auto.box-sizing: способ измерения блока
По умолчанию width измеряет только content, а padding и border добавляются как дополнительная ширина (content-box). А border-box включает padding и border внутрь width, поэтому размер остаётся точным.
.cb) box-sizing: content-box;. Тогда граница и padding добавятся снаружи ширины (общая ширина 228px). А .bb с border-box — ровно 180px.Общая ширина = 180 + padding + border. То есть реальная ширина получается больше указанной. Это вносит путаницу.
Padding и border считаются внутри width, размер остаётся точным. Поэтому многие проекты делают это стандартом.
Упражнения
Попробуйте box model самостоятельно. Меняйте padding, границу и скруглённые углы.
Тест модуля 5
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Display и расположение
display: как располагаются элементы
display задаёт, как элемент течёт по странице. block начинается с новой строки и занимает всю ширину, inline располагается в ряд, как текст, inline-block объединяет оба варианта, а none полностью скрывает элемент.
.tag) в ряд: display: inline-block;. Элементы span встанут в одну строку и примут размеры.display: none убирает элемент вместе с его местом, а visibility: hidden скрывает, но сохраняет место.position: виды позиционирования
position управляет тем, где стоит элемент. static — обычное состояние, relative сдвигает от своего места, absolute выводит из потока и располагает относительно ближайшего позиционированного родителя, fixed закрепляет на экране.
.bola) position: absolute и поместите в угол родительского блока.top/left и z-index
Позиционированный элемент сдвигается через top, right, bottom, left. Когда элементы накладываются друг на друга, z-index задаёт, какой из них будет сверху (большее число = сверху).
.q1) на самый верх: z-index: 5;. Больший z-index стоит выше.z-index работает только на элементах с заданным position (отличным от static).float и clear
float обтекает элемент влево или вправо, а текст обтекает его вокруг. Раньше на этом строили весь макет страницы. А clear опускает следующий за плавающим элемент вниз.
.rasm) float: left, чтобы текст обтекал его справа.overflow: лишний контент
Если контент не помещается в контейнер, overflow управляет тем, что произойдёт: вытечет наружу, обрежется или появится прокрутка.
.quti) overflow: auto;. Не поместившийся текст станет доступен через прокрутку.Часть, вышедшая за пределы контейнера, не видна. Полезно, чтобы держать углы картинок или карточек аккуратными.
Если контент помещается — обычный вид, если нет — появляется прокрутка. Самый удобный выбор для длинных списков.
Упражнения
Попробуйте расположение самостоятельно. Меняйте display, position и overflow.
Тест модуля 6
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Flexbox
Flexbox: гибкое расположение
Flexbox легко располагает элементы вдоль ряда (или столбца). Элемент с display: flex становится контейнером, а его прямые потомки — flex-элементами. Есть две оси: главная ось (main) и поперечная ось (cross).
.qator свойство display: flex;. Flex-контейнер выстроит потомков в одну строку.display: flex влияет только на прямых потомков, а не на внуков. Flexbox — основа современного расположения.flex-direction: направление
flex-direction задаёт направление главной оси: располагаются ли элементы в ряд (по горизонтали) или в столбец (по вертикали).
.qator в вертикальный столбец: flex-direction: column;. Теперь блоки выстроятся друг над другом.column главная ось становится вертикальной.justify-content: главная ось
justify-content распределяет элементы вдоль главной оси (в row — по горизонтали). Управляет тем, как делится свободное место.
justify-content: center.align-items: поперечная ось
align-items выравнивает элементы вдоль поперечной оси (в row — по вертикали). В сочетании с justify-content можно поместить любой элемент точно по центру.
align-items: center.flex-wrap, gap и flex
Если элементы не помещаются, flex-wrap: wrap переносит их на следующую строку. gap задаёт промежуток между элементами. А заданное самому элементу flex: 1 означает, что он растягивается, заполняя свободное место.
.katta) растянется, заполнив свободное место: flex: 1;.Если вместо margin использовать gap, промежуток появляется только между элементами, но не по краям. Чисто и удобно.
Если нескольким элементам задать flex: 1, они поровну поделят оставшееся место. Идеально для адаптивных панелей.
Упражнения
Попробуйте Flexbox самостоятельно. Меняйте display, направление и выравнивание.
Тест модуля 7
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
CSS Grid
Grid: двумерное расположение
Если Flexbox одномерный (ряд или столбец), то Grid двумерный: управляет строками и столбцами одновременно. Элемент с display: grid становится grid-контейнером, а grid-template-columns задаёт структуру столбцов.
.panjara 3 равных столбца: grid-template-columns: 1fr 1fr 1fr;. fr делит свободное место на равные доли.grid-template-columns и fr
Число и ширину столбцов задаёт grid-template-columns. Единица fr означает долю доступного свободного места: 1fr 1fr — два равных столбца, а 2fr 1fr — первый вдвое шире.
display: grid и с помощью grid-template-columns создайте 3 равных столбца.gap и repeat()
gap задаёт промежуток между ячейками (работает и в grid, и в flex). А repeat() коротко записывает повторяющиеся столбцы: repeat(3, 1fr) = 1fr 1fr 1fr.
.panjara — gap: 12px;.repeat(auto-fit, minmax(120px, 1fr)) автоматически подбирает число столбцов под ширину экрана (адаптивная галерея).grid-column и grid-row: растягивание
Элемент можно растянуть на несколько столбцов или строк. grid-column: span 2 делает элемент шириной в 2 столбца. Можно задать и через линии: grid-column: 1 / 3.
.katta) на 2 столбца с помощью grid-column: span 2.grid-template-areas: именованный макет
Самый наглядный способ Grid: даёте каждой ячейке имя и рисуете макет как ASCII-картинку. Так вы легко размещаете header, sidebar и контент.
.panjara свойство grid-template-areas (head сверху, side и main снизу). Каждый элемент попадёт на своё место через grid-area.Макет всей страницы: строки и столбцы одновременно. Идеально для header, sidebar, контента, footer.
Элементы в одном ряду: navbar, ряд кнопок, карточки. Используется и внутри Grid.
Упражнения
Попробуйте Grid самостоятельно. Меняйте столбцы, gap и растягивание.
Тест модуля 8
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Адаптивный дизайн
Responsive: адаптация ко всем экранам
Адаптивный дизайн показывает страницу одинаково красиво на телефоне, планшете и компьютере. Его основа — относительные единицы: % (относительно родителя), vw/vh (ширина/высота экрана), rem (относительно корневого шрифта).
.quti относительную ширину: width: 60%;. Он займёт 60 процентов родительского контейнера и подстроится при изменении экрана.<meta name="viewport"> в HTML адаптивность не работает. Вместо точных px выбирайте относительные единицы.max-width: не выходить за пределы
max-width ограничивает максимальную ширину элемента. max-width: 100% не даёт картинке или блоку выйти за пределы контейнера. Это одно из важнейших правил адаптивного дизайна.
.rasm) в контейнер с помощью max-width: 100% (чтобы не выходил за пределы).@media: стиль в зависимости от экрана
Правило @media задаёт другой стиль в зависимости от ширины экрана. С max-width пишут правила для узких экранов, с min-width — для широких. Это называется breakpoint (точка перелома).
.karta свойство border-radius: 10px;. Правило @media ниже меняет цвет фона, когда экран уже 600px (в коде уже готово).Сначала стиль широкого экрана, затем добавляются правила для узких. Старый подход.
Сначала стиль телефона (основа), затем добавляется для широких экранов. Современная рекомендация.
Подход mobile-first
Современная рекомендация: сначала напишите основной стиль для телефона, затем через @media (min-width: ...) добавьте дополнения для больших экранов. Это делает код чистым и лёгким.
.karta основной (мобильный) фон: background: #2f6bed;. А @media (min-width: 600px) увеличивает padding и шрифт на большем экране.clamp(), min() и max()
Эти функции дают гибкий размер без media query. clamp(min, ideal, max) удерживает значение между двумя границами: clamp(16px, 4vw, 28px) — текст меняется в зависимости от экрана, но не становится меньше 16px и больше 28px.
.quti) гибкий размер: font-size: clamp(18px, 5vw, 28px).Упражнения
Попробуйте адаптивные правила самостоятельно. Задавайте ограничения через max-width и min-width.
Тест модуля 9
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Анимация и transform
transform: сдвиг и вращение
transform сдвигает, вращает, увеличивает или наклоняет элемент, не нарушая макет. Это основа анимации, потому что работает очень быстро.
.quti: transform: rotate(8deg);. transform вращает, увеличивает или сдвигает элемент.transform: rotate(10deg) scale(1.1). Порядок важен.transition: плавный переход
transition делает изменение не мгновенным, а плавным (с анимацией). Например, цвет кнопки при :hover меняется постепенно. Пишется в порядке transition: свойство длительность кривая.
.quti) transition: 0.3s, затем наведите на него курсор (переход будет плавным).Интерактивность с :hover
Если :hover и transition использовать вместе, получаются живые и приятные кнопки. При наведении курсора элемент красиво меняется.
.tugma — transition: 0.25s;. Правило :hover ниже за счёт transition сработает мягко.@keyframes и animation
Для сложной, самостоятельно работающей анимации @keyframes задаёт этапы (from/to или 0%–100%), а animation применяет её к элементу.
.quti) готовую анимацию: animation: aylanish 2s linear infinite.Настройки animation
Для полного управления анимацией есть отдельные свойства: длительность, кривая скорости, сколько раз повторяется и задержка.
.yurak анимацию пульса: animation: puls 1.2s ease-in-out infinite;. @keyframes puls уже готов в коде.Изменение скорости движения. ease — естественнее, linear — равномерно. ease-in-out используют часто.
infinite повторяет бесконечно, а при заданном числе срабатывает столько раз и останавливается.
Упражнения
Попробуйте анимацию и transform самостоятельно. Меняйте transform, transition и прозрачность.
Тест модуля 10
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Продвинутый CSS
Переменные CSS (--var)
Переменные CSS позволяют хранить значение в одном месте и использовать во многих. Они объявляются в виде --имя (обычно в :root) и вызываются через var(--имя). Если изменить цвет в одном месте, он обновится везде.
--asosiy в корне равной #22c55e (зелёный) — блок тоже станет зелёным.calc(): вычисления внутри CSS
calc() выполняет математические вычисления, смешивая разные единицы. Например, calc(100% - 40px) вычитает 40px из полной ширины — очень полезно там, где нельзя сложить проценты с пикселями.
.quti ширину через calc(): width: calc(100% - 40px);. calc считает, складывая разные единицы.+, -) обязателен пробел: calc(100% - 40px) верно, а calc(100%-40px) не работает.filter: визуальные эффекты
filter добавляет элементу размытие, яркость, чёрно-белый и другие эффекты. Особенно мощно работает с картинками.
.a: filter: blur(2px);. filter добавляет элементу визуальный эффект (blur, grayscale).filter: grayscale(50%) brightness(1.2).object-fit и aspect-ratio
object-fit: cover заполняет контейнер картинкой без искажения пропорций (обрезая лишнее). А aspect-ratio задаёт элементу постоянное соотношение сторон — например 16 / 9, как рамка видео.
.quti) aspect-ratio: 16 / 9 — высота вычислится автоматически.clip-path: обрезка формы
clip-path обрезает элемент в форму, отличную от прямоугольника (треугольник, круг, многоугольник). Видна только указанная область.
.uchburchak треугольник: clip-path: polygon(50% 0%, 0% 100%, 100% 100%);. clip-path обрезает элемент в любую форму.Обрезает элемент в форме круга. Простое решение для аватара или круглых кнопок.
Произвольная форма из точек: треугольник, ромб, звезда. Для креативных секций.
Упражнения
Попробуйте продвинутый CSS самостоятельно. Работайте с calc, filter и aspect-ratio.
Тест модуля 11
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Современный CSS и итоговый проект
Тёмная тема (dark mode)
Современные сайты работают в двух темах. @media (prefers-color-scheme: dark) определяет выбор в системе пользователя, а переменные CSS позволяют менять цвета в одном месте.
:root сделайте --fon равной #22c55e. Одна переменная управляет всей темой (dark mode работает на этой основе).var(--fon). Тогда для смены темы достаточно обновить только переменные.:has() — родительский селектор
Долгожданная возможность: :has() выбирает родительский элемент по тому, что внутри него. Например, карточку с картинкой внутри можно оформить иначе — раньше это делали только с помощью JavaScript.
.belgi: .karta:has(.belgi) { background: #2f6bed }.CSS nesting (вложенная запись)
Современный CSS разрешает писать правила вложенно — как в Sass, но в чистом CSS. Символ & обозначает родительский селектор. Это держит связанные правила вместе и делает код упорядоченным.
.karta вложенное (nested) правило, сделайте абзац жёлтым: & p { color: gold; }.BEM: стиль именования классов
В больших проектах, чтобы имена классов не путались, используют методологию BEM: block__element--modifier. Это делает имена точными, уникальными и понятными.
.karta--faol — border: 2px solid #2f6bed;. В BEM --faol обозначает состояние карточки..karta__tugma сразу видно, что это кнопка внутри карточки. Конфликтов имён не будет.Доступность (a11y) и итоговые советы
Хороший сайт должен быть удобен для всех. Достаточный контраст между текстом и фоном, видимый фокус для клавиатуры и уменьшение анимации для чувствительных к движению пользователей — вот признаки профессиональной работы.
cursor: pointer; (показывает, что она интерактивна). Правило :focus-visible ниже рисует видимое кольцо при фокусе через Tab (важно для пользователей клавиатуры).На светлом фоне светлый текст не читается. При выборе цвета убедитесь, что контраст достаточен.
Для кнопки используйте <button>, для заголовка — <h1>: CSS оформляет, а HTML придаёт смысл.
Упражнения
Попробуйте современный CSS самостоятельно. Работайте с nesting, accent-color и outline.
Тест модуля 12
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Оформление форм
Стиль input, textarea и select
Элементы формы (текстовое поле, многострочный textarea, выпадающий select) приходят в старом, некрасивом стандартном виде браузера. С помощью CSS вы задаёте им границу, внутренний отступ, радиус скругления и шрифт, подгоняя под стиль вашего сайта. Если сделать ширину width: 100%, поле займёт весь контейнер.
border-radius: 8px, чтобы скруглить углы.16px или больше, на телефоне при нажатии на поле страница не будет автоматически увеличиваться.Состояния фокуса, hover и disabled
Когда пользователь нажимает на поле (фокус), наводит курсор (hover) или поле отключено (disabled), его нужно показывать иначе. Для :focus стандартное кольцо браузера сделайте красивее через outline или box-shadow. А :focus-visible виден только при переходе с клавиатуры.
input — padding: 11px 13px;. Правила :focus и :disabled ниже задают стиль в зависимости от состояния поля (попробуйте нажать на поле).outline: none, обязательно вместо него задайте вид фокуса через box-shadow или border. Иначе пользователь клавиатуры не поймёт, где он находится.Состояния проверки и placeholder
CSS может задавать стиль в зависимости от состояния формы: :checked (отмечено), :required (обязательное), :valid / :invalid (заполнено верно или с ошибкой), :placeholder-shown (ещё не введено). А псевдоэлемент ::placeholder оформляет серый текст в пустом поле.
input границу: border: 2px solid #cbd5e1;. Правила :valid и :invalid меняют цвет границы, когда email введён верно или с ошибкой.Выделяет обязательные для заполнения поля, например звёздочкой или цветом.
Срабатывает, когда checkbox или radio отмечены. Главный инструмент при создании кастомных кнопок и toggle.
accent-color и кастомный checkbox
Цвет checkbox, radio и слайдера (range) можно перекрасить в цвет бренда одним свойством: accent-color. Это самый простой путь. Если нужен полностью кастомный вид, отключите стандартную форму через appearance: none и рисуйте сами с нуля.
input) accent-color: #2f6bed, чтобы галочка была синей.Структура и расположение формы
Красивая форма — это не только цвет, но и структура. Свяжите каждое поле с <label> (при клике поле получает фокус). Связанные поля группируйте в <fieldset>. Для расположения очень удобен Flexbox: flex-direction: column и gap выстраивают поля ровно, с равными промежутками.
form свойства display: flex; и flex-direction: column;. Пары label и input выстроятся друг под другом.<label for="email"> и <input id="email">, поле активируется и при клике на подпись — пользоваться становится проще.Упражнения
Попробуйте стиль формы самостоятельно. Работайте с радиусом границы, accent-color и внутренним отступом.
Тест модуля 13
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Единицы измерения (units)
px и абсолютные единицы
В CSS есть два вида задания размера: абсолютные (неизменные) и относительные (зависящие от чего-либо). px (пиксель) — самая используемая абсолютная единица: одна точка на экране. Она даёт точный контроль, поэтому отлично подходит для границы (border) и тонких размеров. pt (пункт) используют в основном для печати (print).
width: 300px;. Пиксель (px) — жёсткая единица, не зависящая от экрана.px. Для текста и расположения относительные единицы (rem, %) делают страницу гибкой и соответствующей настройкам пользователя.Проценты (%): относительно родителя
% — относительная единица: значение вычисляется относительно родительского элемента. width: 50% берёт половину ширины родителя. Если родитель расширяется или сужается, потомок меняется вместе с ним. Поэтому проценты — основа адаптивных (responsive) макетов.
.bola) width: 50%, чтобы он занял половину родителя (200px).em: относительно текущего шрифта
em — относительная единица: относительно font-size текущего (родительского) элемента. Если шрифт родителя 16px, то 1em = 16px, 2em = 32px. При изменении шрифта размеры в em меняются пропорционально ему. Внимание: em накапливается (compounding) — во вложенных элементах может разрастаться.
.bola) font-size: 2em. Родитель 16px, значит текст станет 32px.rem: относительно корня
rem (root em) всегда вычисляется относительно font-size корневого (html) элемента. Стандартный шрифт html — 16px, значит 1rem = 16px, 2rem = 32px. Главное отличие от em: rem не накапливается, всегда берётся от корня. Поэтому он предсказуем и предпочтителен в современных проектах — весь сайт можно масштабировать из одного места (шрифт html).
Зависит от родителя. При вложении накапливается и неожиданно разрастается.
Всегда зависит от шрифта html, стабилен. Самый надёжный выбор для размеров текста.
.sarlavha) font-size: 2rem. Корень 16px, значит станет 32px.единицы viewport: vw, vh
Единицы viewport относятся к размеру экрана (окна браузера): vw = 1% ширины окна (viewport), vh = 1% высоты. Значит 100vw — вся ширина экрана, 100vh — вся высота экрана. vmin и vmax — 1% меньшего или большего размера. Они очень удобны для крупных заголовков и полноэкранных секций.
font-size: 5vw;. vw равен одному проценту ширины экрана (5vw = 5 процентов); при расширении окна шрифт растёт.clamp() (модуль 9): clamp(18px, 5vw, 40px) плавно подстраивает текст в пределах границ.Упражнения
Попробуйте единицы самостоятельно. Задавайте размеры через проценты, em и rem.
Тест модуля 14
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
3D-трансформации
perspective: создание 3D-сцены
В модуле 10 мы рассмотрели 2D-трансформации. 3D-трансформации двигают элемент ещё и в глубину (ближе или дальше от экрана). Для этого сначала нужна 3D-сцена: задайте свойство perspective родительскому элементу. Оно задаёт расстояние между глазом и экраном. Малое значение (например, 400px) даёт сильный, преувеличенный эффект, а большое — мягкий.
.sahna) perspective: 800px, чтобы открылось 3D-пространство.rotateX, rotateY, rotateZ
В 3D-пространстве элемент может вращаться вокруг трёх осей: rotateX вокруг горизонтальной оси (наклоняется вперёд или назад), rotateY вокруг вертикальной оси (поворачивается вбок, как дверь), а rotateZ в плоскости экрана (обычное 2D-вращение). Если использовать их вместе с perspective, появляется настоящее ощущение объёма.
.quti) transform: rotateY(40deg), чтобы он повернулся вбок.translateZ va translate3d
translateZ сдвигает элемент вдоль оси Z — ближе к экрану (положительное значение) или дальше от него (отрицательное). Это видно только при наличии perspective: положительный translateZ делает элемент крупнее (ближе). А translate3d(x, y, z) сдвигает по трём осям одновременно.
.quti вдоль оси Z: transform: translateZ(50px);. Благодаря perspective блок будет выглядеть крупнее (ближе).perspective. Без perspective сдвиг по Z незаметен.preserve-3d и backface-visibility
Для 3D нужны два важных вспомогательных свойства. transform-style: preserve-3d сохраняет потомков элемента в 3D-пространстве (иначе они станут плоскими, 2D). А backface-visibility: hidden скрывает обратную сторону элемента — она не видна, когда элемент повёрнут задом. Это особенно нужно для карт с переворотом (flip).
.karta) transform-style: preserve-3d.3D-карта с переворотом (проект)
Теперь объединим все знания. Чтобы сделать переворачивающуюся карту: у родителя perspective, у карты transform-style: preserve-3d и transition, у обеих сторон backface-visibility: hidden, а обратная сторона изначально повёрнута через rotateY(180deg). Если при hover повернуть всю карту на rotateY(180deg), она плавно перевернётся и покажет обратную сторону. Наведите курсор на карту ниже!
.karta свойство transform-style: preserve-3d;. Затем, если навести курсор на карту, она повернётся на 180 градусов.Открывает 3D-глубину. Без него вращение выглядит плоским, без объёма.
Обеспечивает, чтобы обратная сторона не была видна, когда карта повёрнута задом.
Упражнения
Попробуйте 3D-трансформации самостоятельно. Работайте с perspective, rotate и preserve-3d.
Тест модуля 15
Чтобы завершить модуль, дайте не менее 5/6 правильных ответов.
Практический экзамен и итоговый тест
Часть 1: Практический экзамен
Это самое большое испытание курса. Нажмите кнопку — откроется полноэкранная кодовая студия: слева вы пишете CSS, справа будут вкладки «Образец» (готовый дизайн, которого нужно достичь) и «Результат» (ваш живой результат). HTML готов, нужно только написать CSS и сделать карточку профиля из образца 1:1. Экзамен считается сданным, когда выполнены все 10 требований.
Слева вы пишете CSS, справа сравниваете Образец и Результат.
Часть 2: Итоговый тест из 50 вопросов
50 вопросов по всем 15 модулям. Чтобы получить сертификат, дайте не менее 40/50 правильных ответов.