dr.Brain

doctor Brain

мир глазами веб-разработчика

CSS: откажись от margin-top

формируем отступы с помощью margin-bottom и gap

dr.Brain

время чтения 2 мин.

Photo by Tim Wildsmith on Unsplash

Вот и настало время для переосмысления подхода к верстке макетов. Давайте поговорим о CSS-свойстве margin-top. Уже много лет margin-top - один из основных элементов в наборе инструментов верстальщика. Но важно знать, что есть и более интересные способы управления пространством между блоками, позволяющие создавать понятный и удобный для дальнейшей работы код: margin-bottom и gap.

Почему не margin-top

Использование margin-top кажется интуитивно понятным. В конце концов, оно напрямую влияет на пространство над элементом. Однако, этот метод часто приводит к неожиданным результатам, особенно в сочетании со схлопывающимися полями или при реализации flexbox или grid моделей верстки. Схлопывающиеся поля часто формируют сложные для понимания интервалы, что затрудняет прогнозирование окончательного макета, а при работе с flex или grid контейнером margin-top может настолько разрушить последовательность элементов, что его будет трудно отладить.

Почему margin-bottom лучше

Переход на margin-bottom сохраняет последовательный и предсказуемый поток элементов. При использовании margin-bottom, интервал между текущим и следующим элементами становится легко объяснимым. Такой метод упрощает логику макета и не добавляет ненужных сложностей.

Например, рассмотрим вертикальный стек элементов. Используя margin-bottom, можно гарантировать, что каждый текущий элемент сдвинет следующий вниз, создавая единообразные интервалы во всём макете. Не нужно беспокоиться о том, как поля элемента будут взаимодействовать с родительскими контейнерами — все будет работать просто, именно так, как и ожидалось.

.element {
  margin-bottom: 20px;
}

gap

При работе с flexbox и grid макетами свойство gap меняет правила игры. Оно позволяет определять интервалы между элементами непосредственно внутри контейнера, не беспокоясь о стилях, написанных для отдельных элементов. Это не только упрощает CSS-код, но и повышает удобство дальнейшей работы с ним.

.container {
  display: flex;
  gap: 20px;
}

Пример

Представьте, что необходимо создать макет карты с несколькими элементами, расположенными вертикально. Традиционно, чтобы создать интервалы между элементами, можно использовать margin-top. Однако, margin-bottom или gap значительно упростят логику CSS и облегчат дальнейшую поддержку и масштабирование макета.

.card {
  margin-bottom: 30px;
}

.card-container {
  display: grid;
  gap: 30px;
}

Такой подход гарантирует равномерное размещение карточек и отсутствие необходимости беспокоиться о непредвиденном результате или схлопывании полей.

Заключение

Пришло время выйти за рамки привычного использования margin-top и обратить внимание на более эффективные и надежные методы формирования интервалов. margin-bottom и gap, создают более понятные, предсказуемые и управляемые макеты.

Каждый раз, собираясь применить привычный margin-top, остановитесь и подумайте - что лучше подойдет для ваших нужд: margin-bottom или gap.


Спасибо за внимание.


Перевод статьи Safdar Ali “Stop Using Margin-Top: Use Margin-Bottom and Gap Instead”

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.