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 лекция
Недоступна
Гибкая сетка
Гибкая сетка
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
No Name Уровень 36
26 мая 2025
+ лекция в копилке
Vadim Makarenko Уровень 42
7 мая 2025
А в чём адаптивность приведенного в лекционном примере макета к различным размерам экрана? До этой лекции говорилось, что для этого нужны медиазапросы, которых здесь нет. Да, здесь размеры элементов вычисляются автоматически, но достаточно ли этого. Может для некоторых экранов трёх колонок окажется много, или фактическая ширина элементов будет недостаточной для размещения контента?
Ilona Уровень 23
23 марта 2025
grid-template-columns: --- плохо раскрыто описание и значения. Пришлось идти и гуглить, чтобы решить задачу.
wh1telis Уровень 48
10 февраля 2025
ради грипов покупала курс, в итоге, все равно пришлось гуглить...вариант со span по grid-column как-то проще...
Антон Уровень 90
15 ноября 2024
Вот так не принимает: grid-template-columns: 200px 1fr ; А вот так ответ принят: grid-template-columns: 200px 1fr ;
2 марта 2025
тут с тестами какая то фигня, я с 6 раза закрыл задачу - при этом ничего не меняв просто тыкал проверку
neubah neubah Уровень 27
3 ноября 2025
и правда. ничего не меняю-каждая проверка дает разные ошибки
Андрей Уровень 50
23 октября 2024
Гибкая сетка. код в браузере Edge не работает