JavaRush /Курсы /Модуль 1: Web Core /Отзывчивые сетки

Отзывчивые сетки

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

3.1 Flexbox

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

Flexbox (Flexible Box Layout Module) предназначен для одномерного размещения элементов (либо по строке, либо по колонке). Flexbox упрощает создание гибких и отзывчивых макетов.

Основные концепции Flexbox:

  • Flex-контейнер: элемент, к которому применяется свойство display: flex
  • Flex-элементы: дочерние элементы flex-контейнера, которые располагаются внутри него

Свойства Flexbox

Flex-контейнер:

  • display: flex: определяет элемент как flex-контейнер
  • flex-direction: устанавливает направление расположения flex-элементов (row, column, row-reverse, column-reverse)
  • justify-content: управляет выравниванием flex-элементов по главной оси (flex-start, flex-end, center, space-between, space-around)
  • align-items: управляет выравниванием flex-элементов по поперечной оси (stretch, flex-start, flex-end, center, baseline)

Flex-элементы:

  • flex-grow: определяет способность элемента увеличиваться при наличии свободного пространства
  • flex-shrink: определяет способность элемента уменьшаться при недостатке пространства
  • flex-basis: задает начальный размер элемента перед распределением свободного пространства
  • align-self: переопределяет выравнивание элемента по поперечной оси, заданное в align-items

Пример использования Flexbox

Создадим макет с тремя колонками, который будет адаптироваться к различным размерам экрана:

HTML
    
      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Пример Flexbox</title>
          <style>
            .flex-container {
              display: flex;
              justify-content: space-between;
              align-items: stretch;
              flex-wrap: wrap;
            }

            .flex-item {
              flex: 1 1 200px;
              margin: 10px;
              padding: 20px;
              background-color: #f4f4f4;
              text-align: center;
            }
          </style>
        </head>
        <body>
          <div class="flex-container">
            <div class="flex-item">Колонка 1</div>
            <div class="flex-item">Колонка 2</div>
            <div class="flex-item">Колонка 3</div>
          </div>
        </body>
      </html>
    
  

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

  • .flex-container: определяет контейнер как flex-контейнер, выравнивает элементы с равными промежутками между ними и позволяет элементам переноситься на следующую строку при недостатке пространства
  • .flex-item: flex-элементы, которые занимают равное пространство, имеют минимальную ширину 200px и равномерно распределены внутри контейнера

3.2 CSS Grid

CSS Grid Layout — это двухмерная система компоновки, которая позволяет создавать сложные макеты с использованием строк и колонок.

Основные концепции CSS Grid:

  • Grid-контейнер: элемент, к которому применяется свойство display: grid
  • Grid-элементы: дочерние элементы grid-контейнера, которые располагаются в сетке

Свойства CSS Grid

Grid-контейнер:

  • display: grid: определяет элемент как grid-контейнер
  • grid-template-columns: устанавливает количество и размеры колонок в сетке
  • grid-template-rows: устанавливает количество и размеры строк в сетке
  • gap: управляет промежутками между строками и колонками
  • justify-items: управляет горизонтальным выравниванием grid-элементов
  • align-items: управляет вертикальным выравниванием grid-элементов

    Grid-элементы:

  • grid-column: определяет, на сколько колонок элемент будет простираться
  • grid-row: определяет, на сколько строк элемент будет простираться
  • justify-self: переопределяет горизонтальное выравнивание элемента
  • align-self: переопределяет вертикальное выравнивание элемента

Пример использования CSS Grid

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

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>
          <style>
            .grid-container {
              display: grid;
              grid-template-columns: repeat(3, 1fr);
              grid-template-rows: repeat(2, 1fr);
              gap: 10px;
            }

            .grid-item {
              padding: 20px;
              background-color: #e4e4e4;
              text-align: center;
            }
          </style>
        </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-container: определяет контейнер как grid-контейнер с тремя колонками и двумя строками, каждый элемент занимает равное пространство
  • .grid-item: grid-элементы с равномерными отступами и фоном
1
Задача
Модуль 1: Web Core, 13 уровень, 2 лекция
Недоступна
Flexbox карточки
Flexbox карточки
1
Задача
Модуль 1: Web Core, 13 уровень, 2 лекция
Недоступна
Гибкая сетка
Гибкая сетка
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Cathrine Уровень 26
15 апреля 2026
Вообще странно вставлять пример по работе с Grid, ведь знакомство с этой темой будет только на 27 уровне. Еще и не рабочий 😢
Vlad Tagunkov Уровень 25
18 марта 2026
вторая задачка какая то странная. валидатор дает не верные подсказки. вот кусок который он хотел от меня. причем без строки вообще не проходило решение хотя без нее такая же картинка в браузере но решение не проходило.

   .grid-item:nth-child(1){
            grid-column: 1 / -1;
            grid-row: 1 / 2;
        }
Liliput Уровень 40
2 марта 2026
Вторая задача так и не проходит решение. Ни с WebStorm, ни с сайта. Уже вставил ответ в решение, все равно ошибка. Сначала использовал в своем решении для первой строки - .grid-item:first-child, потом вставил как в решении - .grid-item:nth-child(1). Картинка в браузере одинаковая в обоих случаях, но решение не проходит.
Cathrine Уровень 26
15 апреля 2026
Плюсую. Даже после того, как вставляю верное решение, по второму условию не проходит решение.
Liliput Уровень 40
26 февраля 2026
Ощущение что вторая задача из другой лекции вообще.
Evgeniy Fedorov Уровень 3
16 декабря 2025
Может кому пригодиться 😁😁😁 Первый пример .container { display: flex; flex-wrap: wrap; justify-content: space-between; flex-direction: row; } .card { width: calc(100% / 4); box-sizing: border-box; } @media (min-width: 1001px) { .card { width: calc(100% / 4); } } @media (min-width: 601px) and (max-width: 1000px) { .card { width: calc(100% / 2); } } @media (max-width: 600px) { .card { width: calc(100% / 1); } .container { flex-direction: column; } }