
Эта серия упражнений поможет вам освоить и закрепить использование именованных линий и областей в CSS Grid Layout. Вы будете работать с готовыми HTML-структурами и CSS-стилями, в которых нужно будет заполнить пропущенные части кода. Задания построены по принципу 'от простого к сложному': сначала вы научитесь задавать имена линиям и областям, а затем использовать эти имена для позиционирования элементов внутри грид-контейнера. Теории здесь нет – только практика для оттачивания навыков размещения элементов с помощью удобных и читаемых имен.
- Модуль 1: Основы CSS
- Селекторы элементов.
- Селекторы классов и идентификаторов.
- Цвет текста и фона.
- Размеры и единицы измерения в CSS.
- Семейство шрифта и базовые свойства текста.
- Стилизация текста (жирный, курсив, подчеркивание).
- Выравнивание и интервалы текста.
- Комбинированные селекторы.
- Псевдоклассы для ссылок.
- Приоритеты стилей и каскадность.
- Наследование в CSS.
- Модуль 2: Блочная модель и позиционирование
- Блочная модель CSS (box model).
- Внутренние отступы (padding).
- Внешние отступы (margin).
- Границы элементов (border).
- Сокращенная запись свойств границ.
- Радиус скругления углов (border-radius).
- Свойство display и его значения.
- Блочные элементы (display: block).
- Строчные элементы (display: inline).
- Строчно-блочные элементы (display: inline-block).
- Скрытие элементов (display: none, visibility: hidden).
- Статичное позиционирование (position: static).
- Относительное позиционирование (position: relative).
- Абсолютное позиционирование (position: absolute).
- Фиксированное позиционирование (position: fixed).
- Липкое позиционирование (position: sticky).
- Свойство z-index и порядок наложения элементов.
- Свойство float и его применение.
- Свойство clear для обтекания.
- Центрирование элементов различными способами.
- Модуль 3: Селекторы CSS продвинутый уровень
- Групповые селекторы.
- Селекторы потомков (descendant selectors).
- Дочерние селекторы (child selectors).
- Соседние селекторы (adjacent sibling selectors).
- Общие сиблинги (general sibling selectors).
- Селекторы атрибутов: точное совпадение.
- Селекторы атрибутов: частичное совпадение.
- Псевдоклассы состояний (:hover, :active, :focus, :visited).
- Псевдоклассы для форм (:checked, :disabled, :required).
- Структурные псевдоклассы (:first-child, :last-child).
- Псевдоклассы :nth-child() и :nth-of-type().
- Псевдоклассы :not() и :empty.
- Псевдоэлементы ::before и ::after.
- Псевдоэлементы ::first-letter и ::first-line.
- Псевдоэлемент ::selection.
- Псевдоэлемент ::placeholder.
- Комбинирование псевдоклассов и псевдоэлементов.
- Создание декоративных элементов с помощью псевдоэлементов.
- Модуль 4: Работа с фоном и визуальными эффектами
- Фоновый цвет (background-color).
- Фоновое изображение (background-image).
- Повторение фона (background-repeat).
- Позиционирование фона (background-position).
- Размер фона (background-size).
- Фиксация фона (background-attachment).
- Сокращенная запись свойств фона.
- Множественные фоновые изображения.
- Линейные градиенты (linear-gradient).
- Радиальные градиенты (radial-gradient).
- Конические градиенты (conic-gradient).
- Тень блока (box-shadow).
- Тень текста (text-shadow).
- Прозрачность (opacity).
- Фильтры (filter: blur, grayscale, etc.).
- Режимы смешивания (mix-blend-mode, background-blend-mode).
- Маски с mask-image.
- Формы с clip-path.
- Модуль 5: Типографика продвинутый уровень
- Межстрочное расстояние (line-height).
- Интервалы между буквами (letter-spacing).
- Интервалы между словами (word-spacing).
- Трансформация текста (text-transform).
- Декорирование текста (text-decoration).
- Перенос слов (word-break, overflow-wrap).
- Управление пробелами (white-space).
- Многоколоночный текст (columns).
- Обрезка текста (text-overflow, ellipsis).
- Вертикальное выравнивание текста (vertical-align).
- Направление текста (direction, writing-mode).
- Веб-шрифты и @font-face.
- Модуль 6: Flexbox
- Введение в Flexbox.
- Включение Flexbox (display: flex).
- Flex-контейнер и flex-direction.
- Выравнивание с justify-content.
- Выравнивание с align-items.
- Выравнивание с align-content.
- Свойство align-self для отдельных элементов.
- Свойство flex-wrap.
- Свойство flex-flow (сокращение для direction и wrap).
- Свойство flex-grow.
- Свойство flex-shrink.
- Свойство flex-basis.
- Сокращенное свойство flex.
- Порядок элементов с order.
- Сложные макеты на Flexbox.
- Вложенные flex-контейнеры.
- Создание адаптивной навигационной панели с Flexbox.
- Модуль 7: CSS Grid Layout
- Введение в Grid Layout.
- Включение Grid Layout (display: grid).
- Создание сетки: grid-template-columns.
- Создание сетки: grid-template-rows.
- Единица измерения fr.
- Функция repeat().
- Промежутки с gap, row-gap, column-gap.
- Размещение элементов: grid-column.
- Размещение элементов: grid-row.
- Сокращенная запись grid-area.
- Именованные линии и области.
- Свойство grid-template-areas.
- Автоматическое размещение элементов.
- Автоматические треки (grid-auto-rows, grid-auto-columns).
- Управление потоком элементов (grid-auto-flow).
- Выравнивание в Grid: justify-items и align-items.
- Выравнивание в Grid: justify-content и align-content.
- Выравнивание отдельного элемента (justify-self, align-self).
- Сложные макеты на Grid.
- Комбинирование Grid и Flexbox.
- Модуль 8: Трансформации и переходы
- Трансформации: translate.
- Трансформации: scale.
- Трансформации: rotate.
- Трансформации: skew.
- Комбинирование трансформаций.
- Точка трансформации с transform-origin.
- 3D-трансформации и перспектива.
- Переходы с transition-property.
- Длительность перехода с transition-duration.
- Функции плавности с transition-timing-function.
- Задержка с transition-delay.
- Сокращенное свойство transition.
- Переходы для нескольких свойств.
- Создание интерактивных элементов с переходами.
- Производительность трансформаций и переходов.
- Модуль 9: Анимации
- Создание keyframes.
- Свойство animation-name.
- Свойство animation-duration.
- Свойство animation-timing-function.
- Свойство animation-delay.
- Свойство animation-iteration-count.
- Свойство animation-direction.
- Свойство animation-fill-mode.
- Свойство animation-play-state.
- Сокращенное свойство animation.
- Множественные анимации.
- Создание сложных анимаций.
- Анимации с использованием переменных.
- Оптимизация производительности анимаций.
- Анимации и доступность.
- Модуль 10: Адаптивный дизайн
- Относительные единицы измерения (%, em, rem).
- Единицы vh и vw.
- Медиа-запросы: основы.
- Медиа-запросы: max-width и min-width.
- Медиа-запросы: ориентация устройства.
- Медиа-запросы: типы устройств и медиа-функции.
- Mobile-first подход.
- Адаптивные изображения.
- Элемент picture и атрибуты srcset/sizes.
- Адаптивная типографика.
- Адаптивная навигация.
- Адаптивные таблицы.
- Адаптивные формы.
- Отзывчивые медиа (видео, iframe).
- Тестирование адаптивности.
- Модуль 11: Формы и CSS
- Базовая стилизация input и button.
- Стилизация textarea.
- Стилизация состояний форм (:focus, :valid, :invalid).
- Стилизация placeholder.
- Кастомизация radio и checkbox с помощью CSS.
- Стилизация select и option.
- Создание кастомных выпадающих списков.
- Стилизация range input.
- Стилизация file input.
- Валидация форм и стилизация сообщений об ошибках.
- Модуль 12: Современные возможности CSS
- Переменные CSS (Custom Properties).
- Область видимости переменных.
- Функция calc().
- Свойство object-fit для изображений.
- Свойство object-position.
- Scroll Snap.
- Контейнерные запросы (Container Queries).
- Подсеточные элементы (Subgrid).
- Логические свойства (logical properties).
- CSS Houdini (введение).
- Feature Queries (@supports).
- Новые селекторы CSS (is(), where(), has()).
- Модуль 13: Практические проекты
- Создание адаптивной навигационной панели.
- Создание карточек товаров.
- Создание слайдера изображений на CSS.
- Создание табов.
- Создание дропдаун-меню.
- Создание галереи изображений с фильтрами.
- Создание анимированных иконок.
- Создание адаптивного лендинга.
- Создание тёмной темы с CSS-переменными.
- Создание анимированных кнопок.
- Создание анимированных форм.
- Создание сетки изображений с hover-эффектами.
- Создание адаптивного футера.
- Создание макета блога на CSS Grid.
- Создание адаптивного дашборда.
- Создание интерактивной формы с анимациями.
- Создание CSS-арта.
Именование колоночных линий
В этом задании вам нужно определить имена для вертикальных (колоночных) линий грид-контейнера. Задайте имена 'content-start' для первой линии, 'content-end' для второй линии. Это позволит в дальнейшем ссылаться на них при размещении элементов.
.container {
display: grid;
grid-template-columns: input1 1fr input2 1fr;
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #4CAF50;
color: white;
padding: 20px;
text-align: center;
border-radius: 5px;
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
Именование строчных линий
Теперь давайте зададим имена для горизонтальных (строчных) линий. Присвойте имя 'header-start' первой линии, 'header-end' второй линии и 'main-start' также второй линии (да, линии могут иметь несколько имен!). Имя 'main-end' присвойте третьей линии.
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: input1 50px input2 1fr input3 50px;
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #2196F3;
color: white;
padding: 10px;
text-align: center;
border-radius: 5px;
}
<div class="container">
<div class="item">H1</div>
<div class="item">H2</div>
<div class="item">M1</div>
<div class="item">M2</div>
<div class="item">F1</div>
<div class="item">F2</div>
</div>
Создание именованных областей
Определите структуру грида с помощью именованных областей. Создайте три области: 'header', 'main' и 'footer'. Область 'header' должна занимать всю первую строку, 'main' - всю вторую строку, а 'footer' - всю третью.
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto 1fr auto;
input1:
"header header"
"main main"
"footer footer";
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item-header { grid-area: header; background-color: #FF9800; }
.item-main { grid-area: main; background-color: #4CAF50; }
.item-footer { grid-area: footer; background-color: #2196F3; }
.item {
color: white;
padding: 20px;
text-align: center;
border-radius: 5px;
}
<div class="container">
<div class="item item-header">Header</div>
<div class="item item-main">Main Content</div>
<div class="item item-footer">Footer</div>
</div>
Размещение элемента по имени колоночных линий
Используя ранее определенные имена колоночных линий ('col-start', 'col-mid', 'col-end'), разместите элемент с классом 'special-item' так, чтобы он начинался от линии 'col-start' и заканчивался на линии 'col-mid'.
.container {
display: grid;
grid-template-columns: [col-start] 1fr [col-mid] 1fr [col-end];
grid-template-rows: 100px 100px;
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #607D8B;
color: white;
padding: 20px;
text-align: center;
border-radius: 5px;
}
.special-item {
background-color: #E91E63;
input1: col-start;
input2: col-mid;
}
<div class="container">
<div class="item">1</div>
<div class="item special-item">Special</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
Размещение элемента по имени строчных линий
Задайте положение элемента с классом 'highlight' по вертикали. Он должен начинаться от линии 'content-start' и заканчиваться на линии 'content-end', используя имена, определенные в `grid-template-rows`.
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: [row1-start] 50px [content-start] 1fr [content-end] 50px [row4-start];
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #795548;
color: white;
padding: 10px;
text-align: center;
border-radius: 5px;
}
.highlight {
background-color: #FFC107;
grid-column: 1 / 2; /* Занимает первую колонку */
input1: content-start / content-end;
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item highlight">Highlight</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>
Размещение элемента по имени области
В контейнере определены области 'header', 'sidebar', 'content', 'footer'. Разместите элемент с классом 'sidebar-item' в область с именем 'sidebar'.
.container {
display: grid;
grid-template-columns: 100px 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
min-height: 300px;
}
.item {
color: white;
padding: 15px;
text-align: center;
border-radius: 5px;
}
.header-item { grid-area: header; background-color: #FF5722; }
.content-item { grid-area: content; background-color: #8BC34A; }
.footer-item { grid-area: footer; background-color: #03A9F4; }
.sidebar-item {
background-color: #9C27B0;
input1: sidebar;
}
<div class="container">
<div class="item header-item">Header</div>
<div class="item sidebar-item">Sidebar</div>
<div class="item content-item">Content</div>
<div class="item footer-item">Footer</div>
</div>
Области с пустыми ячейками
Определите именованные области 'top', 'middle', 'bottom'. Область 'top' должна занимать первую ячейку первой строки, 'middle' - вторую ячейку второй строки, а 'bottom' - третью ячейку третьей строки. Остальные ячейки должны остаться пустыми.
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: repeat(3, 80px);
grid-template-areas:
input1
input2
input3;
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item-top { grid-area: top; background-color: #f44336; }
.item-middle { grid-area: middle; background-color: #ffeb3b; color: #333 !important;}
.item-bottom { grid-area: bottom; background-color: #00bcd4; }
.item {
color: white;
padding: 20px;
text-align: center;
border-radius: 5px;
}
<div class="container">
<div class="item item-top">Top</div>
<div class="item item-middle">Middle</div>
<div class="item item-bottom">Bottom</div>
</div>
Размещение элемента с охватом колонок по именам линий
Разместите элемент 'wide-item' так, чтобы он начинался от линии 'start' и заканчивался на линии 'end', охватывая таким образом все три колонки. Используйте имена линий, определенные в `grid-template-columns`.
.container {
display: grid;
grid-template-columns: [start] 1fr [mid1] 1fr [mid2] 1fr [end];
grid-template-rows: 100px 100px;
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #9E9E9E;
color: white;
padding: 20px;
text-align: center;
border-radius: 5px;
}
.wide-item {
background-color: #3F51B5;
input1: start / end;
grid-row: 1; /* Размещаем в первой строке */
}
<div class="container">
<div class="item wide-item">Wide Item</div>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
Размещение элемента с охватом строк по именам линий
Элемент 'tall-item' должен занимать пространство по вертикали от линии 'content-start' до линии 'footer-start'. Используйте имена линий, заданные в `grid-template-rows`.
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: [header-start] 50px [content-start] 1fr [footer-start] 50px [footer-end];
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #009688;
color: white;
padding: 10px;
text-align: center;
border-radius: 5px;
}
.tall-item {
background-color: #FF5722;
grid-column: 1; /* Размещаем в первой колонке */
input1: content-start / footer-start;
}
<div class="container">
<div class="item">H1</div>
<div class="item">H2</div>
<div class="item tall-item">Tall</div>
<div class="item">M2</div>
<div class="item">F1</div>
<div class="item">F2</div>
</div>
Использование неявных имен линий из областей
Грид-контейнер использует `grid-template-areas`. Разместите элемент 'special' так, чтобы он начинался у левой границы области 'content' и заканчивался у правой границы области 'content' по горизонтали. Используйте для этого неявные имена линий, создаваемые областями.
.container {
display: grid;
grid-template-columns: 100px 1fr 100px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"nav content aside"
"footer footer footer";
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item { padding: 10px; text-align: center; border-radius: 5px; color: white; }
.header { grid-area: header; background-color: #673AB7; }
.nav { grid-area: nav; background-color: #CDDC39; }
.content { grid-area: content; background-color: #4CAF50; }
.aside { grid-area: aside; background-color: #FFC107; }
.footer { grid-area: footer; background-color: #03A9F4; }
.special {
background-color: #E91E63;
/* Размещаем во второй строке, где область content */
grid-row-start: content-start;
grid-row-end: content-end;
input1: content-start;
input2: content-end;
}
<div class="container">
<div class="item header">Header</div>
<div class="item nav">Nav</div>
<div class="item content">
Content Area
<div class="item special">Special Item</div>
</div>
<div class="item aside">Aside</div>
<div class="item footer">Footer</div>
</div>
Комбинирование именованных линий и span
Разместите элемент 'banner' так, чтобы он начинался от линии 'main-start' и охватывал 2 колонки по горизонтали. Используйте имя линии и ключевое слово `span`.
.container {
display: grid;
grid-template-columns: [col1-start] 1fr [main-start] 1fr 1fr [col4-start];
grid-template-rows: repeat(2, 100px);
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
}
.item {
background-color: #8BC34A;
color: white;
padding: 20px;
text-align: center;
border-radius: 5px;
}
.banner {
background-color: #00BCD4;
input1: main-start / span 2;
grid-row: 1;
}
<div class="container">
<div class="item">1</div>
<div class="item banner">Banner</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
Сложная раскладка с областями
Создайте раскладку 'Святой Грааль' с помощью именованных областей. Должны быть области 'header' (вся первая строка), 'nav' (первая колонка второй строки), 'main' (вторая колонка второй строки), 'ads' (третья колонка второй строки) и 'footer' (вся третья строка).
.container {
display: grid;
grid-template-columns: 100px 1fr 100px;
grid-template-rows: auto 1fr auto;
input1:
"header header header"
input2
"footer footer footer";
gap: 10px;
padding: 10px;
background-color: #f0f0f0;
border: 1px solid #ccc;
height: 300px;
min-height: 300px;
}
.item { padding: 10px; text-align: center; border-radius: 5px; color: white; }
.header { grid-area: header; background-color: #F44336; }
.nav { grid-area: nav; background-color: #FF9800; }
.main { grid-area: main; background-color: #4CAF50; }
.ads { grid-area: ads; background-color: #2196F3; }
.footer { grid-area: footer; background-color: #607D8B; }
<div class="container">
<div class="item header">Header</div>
<div class="item nav">Nav</div>
<div class="item main">Main Content</div>
<div class="item ads">Ads</div>
<div class="item footer">Footer</div>
</div>