
Эта серия заданий поможет вам попрактиковаться в создании адаптивных дашбордов с использованием CSS. Вы будете работать с готовой HTML-структурой, представляющей собой типичный макет дашборда (шапка, боковая панель, основное содержимое с карточками). Ваша задача — заполнить пропущенные части CSS-кода, чтобы правильно настроить макет, его компоненты и адаптивное поведение для разных размеров экрана. Задания охватывают использование Flexbox для базового позиционирования, управление переносом элементов, применение медиа-запросов для изменения макета на малых экранах (например, для мобильных устройств, учитывая iframe), а также работу со свойствами для управления видимостью и размерами элементов в адаптивном контексте. Сложность заданий постепенно возрастает.
- Модуль 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-арта.
Базовая структура дашборда (Flexbox)
Создайте базовую двухколоночную структуру для дашборда. Используя CSS Flexbox, расположите боковую панель (.sidebar) и основное содержимое (.main-content) рядом друг с другом внутри контейнера .dashboard-container. Боковая панель должна занимать фиксированную ширину, а основное содержимое — оставшееся пространство.
.dashboard-container {
input1: flex;
min-height: 300px; /* Для наглядности в iframe */
}
.sidebar {
width: 120px; /* Фиксированная ширина */
background-color: #f0f0f0;
padding: 15px;
border-right: 1px solid #ccc;
}
.main-content {
input2: 1;
padding: 15px;
background-color: #ffffff;
}
/* Базовые стили для шапки и карточек */
.header {
background-color: #4a90e2;
color: white;
padding: 10px 15px;
margin-bottom: 15px;
}
.card {
background-color: #e9e9e9;
border: 1px solid #d1d1d1;
padding: 10px;
margin-bottom: 10px;
}
<div class="dashboard-container">
<aside class="sidebar">
<p>Навигация</p>
<ul>
<li>Меню 1</li>
<li>Меню 2</li>
</ul>
</aside>
<main class="main-content">
<header class="header">
<h1>Дашборд</h1>
</header>
<div class="card">Карточка 1</div>
<div class="card">Карточка 2</div>
</main>
</div>
Расположение карточек (Flexbox Wrap)
Теперь настроим расположение карточек (.card) внутри основного содержимого (.main-content). Используйте Flexbox, чтобы карточки располагались в ряд и автоматически переносились на следующую строку, если не помещаются в одну. Добавьте небольшой отступ между карточками.
.dashboard-container {
display: flex;
min-height: 300px;
}
.sidebar {
width: 120px;
background-color: #f0f0f0;
padding: 15px;
border-right: 1px solid #ccc;
}
.main-content {
flex-grow: 1;
padding: 15px;
background-color: #ffffff;
/* Добавьте стили для расположения карточек */
input1: flex;
input2: wrap;
input3: 10px;
}
.header {
background-color: #4a90e2;
color: white;
padding: 10px 15px;
/* Убираем нижний отступ у шапки, т.к. gap добавит отступы */
margin-bottom: 0;
}
.card {
background-color: #e9e9e9;
border: 1px solid #d1d1d1;
padding: 10px;
/* Убираем нижний отступ, т.к. gap добавит отступы */
margin-bottom: 0;
/* Зададим базовую ширину, чтобы было что переносить */
flex-basis: 150px;
}
<div class="dashboard-container">
<aside class="sidebar">
<p>Навигация</p>
<ul>
<li>Меню 1</li>
<li>Меню 2</li>
</ul>
</aside>
<main class="main-content">
<header class="header">
<h1>Дашборд</h1>
</header>
<div class="card">Карточка 1</div>
<div class="card">Карточка 2</div>
<div class="card">Карточка 3</div>
<div class="card">Карточка 4</div>
</main>
</div>
Адаптация для малых экранов (Stacking)
Сделаем дашборд адаптивным. На малых экранах (например, шириной 600px и меньше) боковая панель и основное содержимое должны располагаться не рядом, а друг под другом (вертикально). Используйте медиа-запрос для применения этих изменений.
.dashboard-container {
display: flex;
min-height: 300px;
}
.sidebar {
width: 120px;
background-color: #f0f0f0;
padding: 15px;
border-right: 1px solid #ccc;
/* Чтобы сайдбар не сжимался */
flex-shrink: 0;
}
.main-content {
flex-grow: 1;
padding: 15px;
background-color: #ffffff;
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.header {
background-color: #4a90e2;
color: white;
padding: 10px 15px;
margin-bottom: 0;
width: 100%; /* Шапка на всю ширину */
}
.card {
background-color: #e9e9e9;
border: 1px solid #d1d1d1;
padding: 10px;
margin-bottom: 0;
flex-basis: 150px;
}
/* Медиа-запрос для малых экранов */
@media (max-width: 600px) {
.dashboard-container {
input1: column;
}
.sidebar {
/* Убираем фиксированную ширину и границу справа */
width: auto;
border-right: none;
border-bottom: 1px solid #ccc; /* Добавляем границу снизу */
}
}
<div class="dashboard-container">
<aside class="sidebar">
<p>Навигация</p>
<ul>
<li>Меню 1</li>
<li>Меню 2</li>
</ul>
</aside>
<main class="main-content">
<header class="header">
<h1>Дашборд</h1>
</header>
<div class="card">Карточка 1</div>
<div class="card">Карточка 2</div>
<div class="card">Карточка 3</div>
<div class="card">Карточка 4</div>
</main>
</div>
Скрытие боковой панели на очень малых экранах
Для очень маленьких экранов (например, меньше 400px, что актуально для нашего iframe) часто бывает полезно полностью скрыть боковую панель для экономии места. Добавьте еще один медиа-запрос, чтобы скрыть элемент .sidebar.
.dashboard-container {
display: flex;
min-height: 300px;
}
.sidebar {
width: 120px;
background-color: #f0f0f0;
padding: 15px;
border-right: 1px solid #ccc;
flex-shrink: 0;
/* Плавное скрытие/появление */
transition: transform 0.3s ease, width 0.3s ease;
}
.main-content {
flex-grow: 1;
padding: 15px;
background-color: #ffffff;
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.header {
background-color: #4a90e2;
color: white;
padding: 10px 15px;
margin-bottom: 0;
width: 100%;
}
.card {
background-color: #e9e9e9;
border: 1px solid #d1d1d1;
padding: 10px;
margin-bottom: 0;
flex-basis: 150px;
}
/* Медиа-запрос для малых экранов */
@media (max-width: 600px) {
.dashboard-container {
flex-direction: column;
}
.sidebar {
width: auto;
border-right: none;
border-bottom: 1px solid #ccc;
}
}
/* Медиа-запрос для очень малых экранов */
@media (max-width: 400px) {
.sidebar {
input1: none;
}
}
<div class="dashboard-container">
<aside class="sidebar">
<p>Навигация</p>
<ul>
<li>Меню 1</li>
<li>Меню 2</li>
</ul>
</aside>
<main class="main-content">
<header class="header">
<h1>Дашборд</h1>
</header>
<div class="card">Карточка 1</div>
<div class="card">Карточка 2</div>
<div class="card">Карточка 3</div>
<div class="card">Карточка 4</div>
</main>
</div>
Использование Grid для основной разметки
В качестве альтернативы Flexbox, попробуйте использовать CSS Grid для создания основной структуры дашборда. Задайте две колонки: одну фиксированной ширины для `.sidebar` и вторую, занимающую оставшееся пространство, для `.main-content`. Также определите одну строку, которая будет занимать всю доступную высоту.
.dashboard-container {
input1: grid;
input2: 120px 1fr; /* Колонка для сайдбара и для контента */
input3: minmax(300px, auto); /* Строка с минимальной высотой */
gap: 0; /* Убираем gap, если он был, т.к. стилизуем иначе */
}
.sidebar {
/* width уже не нужен, управляется grid-template-columns */
background-color: #f0f0f0;
padding: 15px;
border-right: 1px solid #ccc;
}
.main-content {
/* flex-grow уже не нужен */
padding: 15px;
background-color: #ffffff;
/* Стили для карточек оставляем flex */
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.header {
background-color: #4a90e2;
color: white;
padding: 10px 15px;
margin-bottom: 0;
width: 100%;
}
.card {
background-color: #e9e9e9;
border: 1px solid #d1d1d1;
padding: 10px;
margin-bottom: 0;
flex-basis: 150px;
}
/* Адаптация для Grid */
@media (max-width: 600px) {
.dashboard-container {
/* Меняем шаблон колонок на одну */
grid-template-columns: 1fr;
/* Добавляем строку для сайдбара */
grid-template-rows: auto minmax(300px, auto);
}
.sidebar {
border-right: none;
border-bottom: 1px solid #ccc;
}
}
@media (max-width: 400px) {
.sidebar {
display: none;
}
}
<div class="dashboard-container">
<aside class="sidebar">
<p>Навигация</p>
<ul>
<li>Меню 1</li>
<li>Меню 2</li>
</ul>
</aside>
<main class="main-content">
<header class="header">
<h1>Дашборд</h1>
</header>
<div class="card">Карточка 1</div>
<div class="card">Карточка 2</div>
<div class="card">Карточка 3</div>
<div class="card">Карточка 4</div>
</main>
</div>
Адаптация Grid-макета
Теперь адаптируем Grid-макет для малых экранов (шириной 600px и меньше). Вместо двух колонок должна остаться только одна, а сайдбар и основное содержимое должны располагаться друг под другом. Измените свойства Grid внутри медиа-запроса.
.dashboard-container {
display: grid;
grid-template-columns: 120px 1fr;
grid-template-rows: minmax(300px, auto);
}
.sidebar {
background-color: #f0f0f0;
padding: 15px;
border-right: 1px solid #ccc;
}
.main-content {
padding: 15px;
background-color: #ffffff;
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.header {
background-color: #4a90e2;
color: white;
padding: 10px 15px;
margin-bottom: 0;
width: 100%;
}
.card {
background-color: #e9e9e9;
border: 1px solid #d1d1d1;
padding: 10px;
margin-bottom: 0;
flex-basis: 150px;
}
/* Адаптация для Grid */
@media (max-width: 600px) {
.dashboard-container {
/* Меняем шаблон колонок */
input1: 1fr;
/* Меняем шаблон строк */
input2: auto minmax(300px, auto);
}
.sidebar {
border-right: none;
border-bottom: 1px solid #ccc;
}
}
@media (max-width: 400px) {
.sidebar {
display: none;
}
}
<div class="dashboard-container">
<aside class="sidebar">
<p>Навигация</p>
<ul>
<li>Меню 1</li>
<li>Меню 2</li>
</ul>
</aside>
<main class="main-content">
<header class="header">
<h1>Дашборд</h1>
</header>
<div class="card">Карточка 1</div>
<div class="card">Карточка 2</div>
<div class="card">Карточка 3</div>
<div class="card">Карточка 4</div>
</main>
</div>