03-11-2018 20:13

Значение и возможности Margin в CSS

Magrin в CSS регулирует внешние отступы элементов. Элементы в html — это прямоугольники. Они имеют границы, поля и отступы.

Область полей (margin) — пространство за пределами границ элемента. Свойство используется для задавания расстояния между элементами и позиционирования их на странице.

Поля, отступы, границы

Отступы

Свойство Margin в CSS может иметь значение в %, px, vh/vw, em и rem. Значение Margin может наследоваться от родительского элемента (inherit) или автоматически рассчитываться браузером (auto). Значения для Margin в CSS можно прописать множеством способов (приведены примеры в em — масштабируемых единицах, зависящих от размера шрифта элемента).

Как обновить Windows без доступа в ИнтернетВам будет интересно:Как обновить Windows без доступа в Интернет

Способы задания значения отступам:

  • для каждой из сторон (top, right, bottom, left) элемента (например, указано значение верхнего внешнего отступа от края элемента center);

.center { margin-top: 1em; }

  • для противоположных сторон (сначала указывается значение для top и bottom, потом для left и right);

.center { margin: 1em, 0.5em; } Указание одного и двух значений

  • для трех сторон (первым указывается значение для margin-top, вторым - для left и right, третьим - для bottom);

.center { margin: 0em 1.1em 2em; }

  • для каждой стороны можно указать значения поочередно (margin-top, margin-right и т. д.) или в одну строку от top до left по часовой стрелке;

Личные данные клиентов «Акадо» - в открытом доступеВам будет интересно:Личные данные клиентов «Акадо» - в открытом доступе

.center { margin: 0.5em 1em 1.5em 2em; } Три и четыре значения

  • значение элемента margin может быть одинаково для каждой стороны;

.center { margin: 1em; }

  • значение для margin может быть не задано;

Одно значение для всех сторон элемента

  • значение margin может быть отрицательным, например, в CSS margin-top с отрицательным значением перемещает элемент вверх;

.center { margin-top: -1em; }

  • отрицательное значение margin может быть у всех сторон элемента, и тогда он "высвобождает" место для окружающих его элементов снизу и справа и "наезжает" на левый и верхний элементы;

.center { margin: -1em; } Отрицательные значения

Отрицательный отступ

Отрицательный отступ часто используют для изменения положения элемента. При использовании отрицательного margin элемент освобождает место для других при перемещении. Элементы, к которым применено свойство, могут пересекать другие элементы или позволять "наезжать" на себя другим элементам.

ERP для малого бизнеса: из чего выбрать?Вам будет интересно:ERP для малого бизнеса: из чего выбрать?

.first { background-color: white; border: 0.06vw solid gold; box-shadow: 0 0 0.09vw gold; width: 50vw; padding: 2vw; margin-bottom: -1vw; margin-left: -9vw; } .second { background-color: black; color: white; font-size: 0.7rem; width: 10vw; padding: 0.5vw; margin-left: 27vw; } Отрицательный отступ

С помощью отрицательных margin-left и margin-top можно "сдвинуть" элемент влево или вверх. Если на месте, куда перемещается элемент, уже есть объекты, тогда он их перекрывает.

Margin-bottom и margin-right не влияют на положение элемента, к которому применяются, но для других объектов он становится меньше. Благодаря этому на картинке блок с именем автора цитаты "залез" на блок с цитатой.

Auto и inherit

Использование auto в CSS у margin и text-align со значением center оказывают схожее действие. Auto центрирует элемент по горизонтали на равном расстоянии от границ контейнера.

До указания значения auto элементы располагаются друг за другом без внешних отступов (если не указано другое значение margin) так же, как они расположены при нулевом margin. После указания значения center смещается к центру ряда.

.center { margin: auto; } Центрирование элемента с помощью auto

Использование значения inherit подразумевает наследование значения от элемента-родителя. Допустим, родительскому элементу прописано значение в CSS margin-left, у элемента center стоит значение, указанное в предыдущем примере.

body { margin-top: 1em; }

.center { margin: auto; }

Родительский элемент, в который вложены все остальные элементы, сместился чуть ниже относительно своего старого положения. Если изменить у элемента center значение margin на наследуемое, то в результате центрирование исчезнет, а объект, который наследует свойство, таким же образом сместится вниз.

body { margin-top: 1em; }

.center { margin: inherit; } Наследование значения

Использование в CSS Margin у body может привести к схлопыванию отступов. Обычно у body обнуляют значение margin, при необходимости отступов от элементов используют padding.

Соседние элементы

Из-за того, что внешние отступы, по сути, не являются частью самого элемента, они часто работают не совсем так, как можно было бы предположить, под влиянием других объектов. Одним из примеров такого влияния является эффект схлопывания отступов.

Допустим, есть два элемента, которые расположены один под другим, у них нулевые margin. Если добавить одному из них значение margin, отличное от нуля, видно, как один сдвигается относительно второго элемента. Прописав аналогичное значение второму элементу, видим, что у него появляются внешние отступы (он сдвигается вправо от своего старого положения), но расстояние между ними не растет, хотя они выравниваются по горизонтальной линии.

.first { background-color: black; border: 0.1vw solid gold; margin: 3vw; width: 10vw; } .second { background-color: black; border: 0.1vw solid darkslateblue; margin: 3vw; width: 10vw; } Схлопывание отступов

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

.first { background-color: black; border: 0.1vw solid gold; margin: 3vw; width: 10vw; } .second { background-color: black; border: 0.1vw solid darkslateblue; margin: 5vw; width: 10vw; } Схлопывание при разных значениях margin

Вложенные элементы

Margin некорректно работает в случае вложенных элементов, имеющих отступы. Если верхний отступ прописан у родительского и дочернего элементов, то сработает только один из них.

.parent { width: 40vw; height: 20vh; background-color: rgba(214, 254, 255, 0.82); margin-top: 2vw; }

.child { width: 10vw; height: 10vh; background-color: rgba(255, 235, 145, 0.82); margin-top: 2vw; } Отступы дочерних и родительских элементов

На картинке приведены примеры поведения элементов и тогда, когда значения margin у родительского и дочернего элементов различны. Как видно, если у дочернего указано значение margin-top больше, чем у родительского, то родительский смещается именно на значение, указанное у дочернего элемента.

.parent { width: 25vw; height: 20vh; background-color: rgba(214, 254, 255, 0.82); margin-top: 2vw; }

.child { width: 10vw; height: 10vh; background-color: rgba(255, 235, 145, 0.82); margin-top: 4vw; }

Сходный эффект наблюдается в поведении отступов, когда при высоте родительского элемента auto устанавливается нижний отступ у родительского и дочернего элементов. Приоритет большего отступа сохраняется и в этом случае.

.parent { width: 25vw; height: auto; background-color: rgba(214, 254, 255, 0.82); margin-bottom: 2vw; }

.child { width: 10vw; height: 10vh; background-color: rgba(255, 235, 145, 0.82); margin-bottom: 4vw; } Нижний отступ и схлопывание

Пустые элементы

У пустых элементов будут схлопываться верхние и нижние поля. Причем формально они будут существовать, объект будет увеличиваться, но фактически на элементы, находящиеся рядом с ним, будет влиять только одно значение.

.first { background-color: black; width: 10vw; }

.second_empty { width: 10vw; margin-top: 5vw; margin-bottom: 10vw; }

.third { background-color: rgba(199, 90, 175, 0.76); width: 10vw; } Пустой элемент и отступы

Исключения и правила

Во многих рассмотренных случаях добавление дополнительных свойств элементу позволяет исключить появление схлопывания. Исчезновение эффекта схлопывания объясняется тем, что отступы двух элементов перестают контактировать полностью.

Проблем схлопывания между родительскими и дочерними элементами удается избежать только через вставку чего-либо между ними, например добавляя границу дочернему элементу. Для того чтобы схлопывания не происходило между соседними объектами, margin лучше прописывать в одном направлении.

Границы против схлопывания

Несколько общих правил использования margin:

  • лучше прописывать отступы в одном направлении для всех элементов (вправо и вниз);
  • формирование расстояния между элементами не должно происходить за счет дочерних элементов;
  • отступ дочернего элемента внутри родительского от границ родительского прописывают с помощью padding родительского, а не margin дочернего.

Margin в CSS - одно из свойств элемента, позволяющее управлять его расположением на странице по отношению к другим объектам. У свойства есть четыре вариации, позволяющие изменять положение элемента по горизонтали и вертикали. Одной из проблем использования margin является схлопывание отступов (объединение двух отступов в один).