JavaRush /Курсы /Модуль 1: Web Core /Продвинутые техники CSS Grid

Продвинутые техники CSS Grid

Модуль 1: Web Core
14 уровень , 9 лекция
Открыта

10.1 Комбинирование с медиа-запросами

CSS Grid Layout предоставляет крутые инструменты для создания сложных и адаптивных макетов. Комбинирование CSS Grid с медиа-запросами позволяет создавать макеты, которые адаптируются к различным размерам экранов и устройствам. Рассмотрим, как использовать медиа-запросы вместе с CSS Grid для создания гибких и адаптивных веб-страниц.

Основные концепции медиа-запросов

Медиа-запросы позволяют применять различные стили CSS в зависимости от характеристик устройства, таких как ширина экрана, высота экрана, ориентация экрана и другие. В комбинации с CSS Grid, медиа-запросы позволяют изменять структуру и размещение элементов в зависимости от размеров экрана.

Синтаксис медиа-запросов:

    
      @media (условие) {
        /* Стили, которые применяются при выполнении условия */
      }
    
  

Где «условие» — это условие, при котором будут применяться стили. Чаще всего используются условия, связанные с шириной экрана, такие как max-width и min-width.

10.2 Изменение количества столбцов

Пример полной реализации (изменение количества столбцов в зависимости от ширины экрана):

CSS
    
      /* Базовый стиль для всех экранов */

      .grid-container {
        display: grid;
        grid-template-columns: 1fr;
        gap: 10px;
      }

      .grid-item {
        background-color: #3498db;
        color: white;
        padding: 20px;
        text-align: center;
        border: 1px solid #fff;
      }

      /* Для экранов шире 600px */

      @media (min-width: 600px) {
        .grid-container {
          grid-template-columns: repeat(2, 1fr); /* Два столбца */
        }
      }

      /* Для экранов шире 900px */

      @media (min-width: 900px) {
        .grid-container {
          grid-template-columns: repeat(3, 1fr); /* Три столбца */
        }
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивный макет с CSS Grid</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <div class="grid-container">
            <div class="grid-item">Элемент 1</div>
            <div class="grid-item">Элемент 2</div>
            <div class="grid-item">Элемент 3</div>
            <div class="grid-item">Элемент 4</div>
            <div class="grid-item">Элемент 5</div>
            <div class="grid-item">Элемент 6</div>
          </div>
        </body>
      </html>
    
  

Объяснение кода:

  • Базовый стиль: создает контейнер Grid с одним столбцом для всех экранов
  • Медиа-запрос для экранов шире 600px: изменяет макет на два столбца
  • Медиа-запрос для экранов шире 900px: изменяет макет на три столбца

10.3 Зависимость от ширины экрана

Пример полной реализации (изменение размещения элементов в зависимости от ширины экрана):

CSS
    
      /* Базовый стиль для всех экранов */

      .grid-container {
        display: grid;
        grid-template-areas:
          "header"
          "main"
          "sidebar"
          "footer";
        gap: 10px;
      }

      .header {
        grid-area: header;
        background-color: #2ecc71;
        padding: 20px;
        text-align: center;
      }

      .sidebar {
        grid-area: sidebar;
        background-color: #3498db;
        padding: 20px;
        text-align: center;
      }

      .main {
        grid-area: main;
        background-color: #9b59b6;
        padding: 20px;
        text-align: center;
      }

      .footer {
        grid-area: footer;
        background-color: #e74c3c;
        padding: 20px;
        text-align: center;
      }

      /* Для экранов шире 600px */

      @media (min-width: 600px) {
        .grid-container {
          grid-template-areas:
            "header header"
            "sidebar main"
            "footer footer";
          grid-template-columns: 1fr 3fr;
        }
      }

      /* Для экранов шире 900px */

      @media (min-width: 900px) {
        .grid-container {
          grid-template-areas:
            "header header header"
            "sidebar main main"
            "footer footer footer";
          grid-template-columns: 1fr 2fr;
        }
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивное размещение с CSS Grid</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <div class="grid-container">
            <div class="header">Header</div>
            <div class="sidebar">Sidebar</div>
            <div class="main">Main Content</div>
            <div class="footer">Footer</div>
          </div>
        </body>
      </html>
    
  

Объяснение кода:

  • Базовый стиль: создает контейнер Grid с четырьмя строками и одной колонкой для всех экранов
  • Медиа-запрос для экранов шире 600px: изменяет макет на два столбца и изменяет размещение областей: заголовок занимает две колонки, основное содержимое и боковая панель занимают по одному столбцу, подвал занимает две колонки
  • Медиа-запрос для экранов шире 900px: изменяет макет на три столбца и изменяет размещение областей: заголовок занимает три колонки, основное содержимое и боковая панель занимают по одному и два столбца соответственно, подвал занимает три колонки

10.4 Изменение размеров элементов

Пример полной реализации (изменение размеров элементов в зависимости от ширины экрана):

CSS
    
      /* Базовый стиль для всех экранов */

      .grid-container {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        grid-auto-rows: 100px;
        gap: 10px;
      }

      .grid-item {
        background-color: #3498db;
        color: white;
        padding: 20px;
        text-align: center;
        border: 1px solid #fff;
      }

      /* Для экранов шире 600px */

      @media (min-width: 600px) {
        .grid-container {
          grid-template-columns: repeat(3, 1fr);
          grid-auto-rows: 150px;
        }
      }

      /* Для экранов шире 900px */

      @media (min-width: 900px) {
        .grid-container {
          grid-template-columns: repeat(4, 1fr);
          grid-auto-rows: 200px;
        }
      }
    
  
HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Адаптивные размеры с CSS Grid</title>
          <link rel="stylesheet" href="styles.css">
        </head>
        <body>
          <div class="grid-container">
            <div class="grid-item item1">Элемент 1</div>
            <div class="grid-item item2">Элемент 2</div>
            <div class="grid-item item3">Элемент 3</div>
            <div class="grid-item item4">Элемент 4</div>
            <div class="grid-item item5">Элемент 5</div>
            <div class="grid-item item6">Элемент 6</div>
          </div>
        </body>
      </html>
    
  

Объяснение кода:

  • Базовый стиль: создает контейнер Grid с двумя столбцами и автоматическими строками высотой 100px для всех экранов
  • Медиа-запрос для экранов шире 600px: изменяет макет на три столбца и увеличивает высоту строк до 150px
  • Медиа-запрос для экранов шире 900px: изменяет макет на четыре столбца и увеличивает высоту строк до 200px
1
Задача
Модуль 1: Web Core, 14 уровень, 9 лекция
Недоступна
Адаптивное размещение
Адаптивное размещение
1
Задача
Модуль 1: Web Core, 14 уровень, 9 лекция
Недоступна
Grid и медиа-запросы
Grid и медиа-запросы
1
Опрос
Выравнивание Grid-контейнера, 14 уровень, 9 лекция
Недоступен
Выравнивание Grid-контейнера
Выравнивание Grid-контейнера
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
No Name Уровень 12
31 мая 2025
Этот Грид вообще кайфовый был
No Name Уровень 12
31 мая 2025
+ лекция в копилке
RayCowperwood Уровень 48
26 мая 2025
grid-gap Устаревший (deprecated) синоним gap, предназначенный только для CSS Grid. Сейчас его использовать не рекомендуется, оставлен для обратной совместимости. а в опросе - наоборот, с решением gap - пишет ошибка, требует чтоб ученики указывали grid-gap
wh1telis Уровень 48
3 марта 2025
задачи одинаковые..в обеих размещение с использованием area
RayCowperwood Уровень 48
26 мая 2025
в первой задачи не нужно grid-template-area задавать для стиля по умолчанию, а во втором нужно. только в этом разница. а так да
Анастасия Уровень 47
21 июля 2025
Ну хз-хз.... Я первое задание делала с grid-template-area тоже, в задании нет конкретной задачи что без них надо делать. И в итоге у меня получилось 2 одинаковых решения... При этом они все проверку прошли