Padding, Margin и Border — задаем в CSS внутренние и внешние отступы, а так же рамкидля все сторон (top, bottom, left, right). Запомним навсегда: чем отличаются margin и padding

Статьи iT заметки HTML&CSS Запомним навсегда: чем отличаются margin и padding
Шастая по форумам наткнулся на то, что до сих пор возникает вопрос, что делает padding , а что margin , и какие отличия между ними. Именно поэтому я решил напомнить об этом. Итак, не прибегая к заумным фразам поставим задачу и разберём пример, на котором всё станет ясно.
Задача : на странице нужен блок красного цвета (200х200 пикселей), который отступает от краёв браузера сверху и слева на 40 и 70 пикселей соответственно, и текст внутри которого отступает слева и сверху на 40 пикселей.
Решение : смотрим на рисунок и на код. Наш блок красного цвета не должен превышать 200 на 200 пикселей и он должен иметь отступ от краёв браузера (или других блоков контента). Собственно эти отступы мы делаем через margin. Если мы делаем padding, то отступ происходит внутри нашего красного блока и отступы получаются с фоном самого блока (то есть красные).

200?"200px":""+(this.scrollHeight+5)+"px");">


текст, текст, много текста, много - много текста текста


Помимо использованных свойств (строки 6-9) есть ещё свойства margin-right, padding-right, margin-bottom, padding-bottom - они для отступов справа и снизу соответственно. Значения всех этих свойств могут быть в пикселях (px), процентах (%), либо в единицах em.
В принципе вот оно и всё. Однако есть ещё некоторые особенности работы с ними.

Особенности margin и padding

  • Если у блоков имеется CSS-свойство float, то необходимо прописать блокам display:inline, чтобы не было двойных отступов слева и справа (подробнее в статье Как подружить Internet Explorer 6 и CSS-свойство margin?)
  • При использовании padding, размеры padding"а должны вычитаться из высоты и ширины блока, в противном случае размер блока увеличится на размер padding"а.
  • Если какому-то блоку задать margin-left и margin-right со значениями auto, то если у блока имеется фиксированная ширина (например 400px) и нет CSS-свойста float, то этот блок будет выровнен по центру элемента, в котором он находится. Собственно для нерезиновой вёрстки с выравниванием по центру этот способ выравнивания обычно и используется. Несмотря на то, что IE 5.5 и младше значение auto не поддерживают, это всё равно не мешает его всё время использовать=).
  • Нежелательно использование padding и margin в таблицах, потому что эффект будет непредсказуемым в различных браузерах.
    И последнее, что я хотел сказать. Не забывайте использовать сокращённые конструкции записи, например margin: 10px 0 5px 20px;. Если отступ нулевой, то ставить можно просто нолик, без указания параметров. Запомнить какой из параметров к какой границе относится очень просто - для блока отступы идут по часовой стрелке: первое число - сверху, второе - справа, третье - снизу, четвёртое - слева.
    Вот собственно и всё, что я хотел рассказать сегодня. Всем счастливых выходных!
    +

    В этой теме Вы можете задать вопрос о материале.

  • В предыдущей главе мы упоминали о таких свойствах CSS, как margin (поле) и padding (отступ). Теперь мы остановимся на них более подробно и рассмотрим, чем они отличаются друг от друга и какие особенности имеют.

    Создавать промежутки между элементами можно и тем, и другим способом, но если padding – это отступ от содержимого до края блока, то margin – это расстояние от одного блока до другого, межблоковое пространство. На скриншоте показан наглядный пример:

    Padding отделяет содержимое от границы блока, а margin создает промежутки между блоками

    Как видите, поля и отступы CSS отличаются между собой, хоть иногда без просмотра кода и нельзя определить, с помощью какого свойства задано расстояние. Это случается в тех случаях, когда отсутствует рамка или фон блока с содержимым.

    Для установки полей или отступов в CSS от каждой стороны элемента существуют следующие свойства:

    Отступы:

    • padding-top: значение;
    • padding-right: значение;
    • padding-bottom: значение;
    • padding-left: значение;

    Поля:

    • margin-top: значение;
    • margin-right: значение;
    • margin-bottom: значение;
    • margin-left: значение;

    Значения могут быть указаны в любых единицах CSS – px, em, % и т. д. Пример: margin-top: 15px .

    Также существует очень удобная вещь как сокращенная запись margin и padding CSS . Если вам необходимо задать поля или отступы для всех четырех сторон элемента, совсем необязательно записывать свойство для каждой стороны по отдельности. Всё делается проще: для margin и padding можно указывать сразу 1, 2, 3 или 4 значения. От количества значений зависит, как распределяются настройки:

    • 4 значения: задаются отступы для всех сторон элемента в такой последовательности: сверху, справа, снизу, слева: padding: 2px 4px 5px 10px;
    • 3 значения: задается отступ сначала для верхней стороны, потом одновременно для левой и правой, а затем – для нижней: padding: 3px 6px 9px;
    • 2 значения: задаются отступы сначала одновременно от верхней и нижней стороны, а затем – одновременно для левой и правой: padding: 6px 12px;
    • 1 значение: задаются одинаковые отступы для всех сторон элемента: padding: 3px;

    Те же правила касаются и свойства margin CSS. Обратите внимание на то, что для margin можно использовать и отрицательные значения (например, -3px), которые иногда бывают весьма полезными.

    Схлопывание margin

    Представьте ситуацию: два блочных элемента находятся друг над другом и им заданы поля margin. Для верхнего блока установлено значение margin: 60px , а для нижнего – margin: 30px . Логично было бы предположить, что два граничащих поля двух элементов просто соприкоснутся и в итоге промежуток между блоками будет равен 90 пикселям.

    Однако дела обстоят по-другому. На самом деле в такой ситуации проявляется эффект, который называют схлопыванием, когда из двух примыкающих полей элементов выбирается наибольший по размеру. В нашем примере итоговый промежуток между элементами будет равен 60 пикселям.


    Расстояние между блоками равно большему из значений

    Схлопывание margin работает только для верхних и нижних полей элементов и не относится к полям с правой и левой сторон. Окончательная величина промежутка высчитывается в разных ситуациях по-разному:

    • Когда оба значения margin положительные, итоговый размер поля будет равен бóльшему значению.
    • Если одно из значений является отрицательным, то для вычисления размера поля нужно получить сумму значений. Например, при значениях 20px и -18px размер поля будет равен:
      20 + (-18) = 20 — 18 = 2 пикселя.
    • Если оба значения отрицательные, сравниваются модули этих чисел и выбирается число, бóльшее по модулю (следовательно, меньшее из отрицательных чисел). Пример: необходимо сравнить значения полей -6px и -8px . Модули сравниваемых чисел равны 6 и 8 соответственно. Отсюда следует, что 6 -8 . Итоговый размер поля равен -8 пикселей.
    • В случае, когда значения указаны в разных единицах CSS, они приводятся к одной, после чего сравниваются и выбирается бóльшее значение.
    • Размер margin для дочерних элементов определяется еще более интересно: если у потомка поле margin больше, чем у родителя, то приоритет отдается ему. В этом случае размеры верхнего и нижнего полей родителя станут такими, как задано у потомка. При этом расстояния между родителем и потомком не будет.
    18 октября 2017 в 15:36

    Организация отступов в верстке (margin/padding)

    • CSS ,
    • HTML
    • Tutorial

    Цель этой статьи не усложнить простые вещи, а акцентировать внимание на известных стандартах, о которых почему-то забывают. Важно соблюдать осмысленную структуру во всех аспектах верстки, и не менее важно придерживаться ее в отступах. И одним из основных принципов верстки является гибкость. А именно, возможность легко вносить какие-либо изменения и ничего при этом не сломать. Правильное обращение с margin и padding играет очень большую роль в этом деле.

    Ниже перечисленные принципы выполняются в среде позиционирования элементов на странице. В элементах декора тоже выполняются. Но не так категорично.

    Основные принципы:

    1. Отступ задается последнему возможному элементу в доме.
    2. Отступы нельзя задавать для независимых элементов (БЭМ блок).
    3. У последнего элемента группы, отступ обнуляется (всегда).

    Отступы идут от предыдущего элемента к следующему.

    margin(ы) задаются от предыдущего элемента к следующему, от первого ко второму, сверху вниз, слева направо.

    Это значит.что такие свойства как margin-left и margin-top не используются (не без исключений). С padding все немного наоборот (кроме того, что он используется для, декоративных целей, увеличения области ссылки и т.д.). Когда блоку нужен отступ сверху или слева, он его получает за счет padding-top и padding-left родителя.

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

    Отступ задается последнему возможному элементу в доме

    margin(ы) задаюся только между соседними элементами дом дерева.

    В примере 3 списка, в следующей структуре:

    • Далеко-далеко, за словесными.
    ...
    ...

    Не за счет дочерних элементов, а за счет соседних делается отступ.

    В этой ситуации.main-section__item и является последним возможным, кому можно задать отступ, чтоб разделить списки. Такого же эффекта можно добиться, если задать отступ диву, списку, лишке, ссылке, но это будет не правильно.

    Этот пример довольно простой. Но если представить на много большую вложенность, где кто-то намусорил отступами, когда какие-то маргины схлопываются. а какие-то суммируются с падингами.

    headline in a section of seven words


    Если взять пример с заголовком, и нужно сделать отступ для заголовка сверху. то последний элементом будет section и для него задается padding-top, margin(ы) которые стоят по дефолту всегда нужно обнулять.

    Самая простая причина, по которой стоит придерживаться данного принципа, это чтоб было проще найти отступ в будущем, либо вам, либо тому, кто будет в дальнейшем работать с вашей версткой. Это если говорить про удобство.

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

    Отступы нельзя задавать для независимых элементов (БЭМ блок)

    Никогда не делайте отступы элементам, которые могут использоваться больше чем один раз. Даже если вы не придерживаетесь методологий, учитывайте перспективу. Для этого есть обертки. Обертки это хорошо. Либо дополнительные классы.

    Если нужно сделать блоку отступ . Без ущерба это делается с помощью:

    • Наследование через элемент (если вытащить этот блок с элемента, отступа не будет, и его можно будет просто разместить в другом месте).
    • Добавление класса (можно сделать блок элементом).
    • Обертка (как блок, у которого роль, только в позиционировании).
    .block__item > .block { margin-right: 10px; } .block.block__item { margin-right: 10px; } .block-wrap > .block { margin-right: 10px; }

    У последнего элемента группы, отступ обнуляется (всегда)

    Возьмем для примера список и изображение.

    Это горизонтальное меню и логотип (который почему-то справа).

    Для последней li отступ обнуляется. И отступ делается между соседними элементами ul и img . О чем говорилось во втором принципе.

    Возьмем другой пример:


    Интересует нас отступ между новостями, которые задается.blog-preview__item { margin-bottom: 20px; } . Последний margin обнуляется, а нижний отступ делается за счет padding blog-preview . О чем говорилось во втором принципе.

    Чаще чем другие псевдоклассы, надо использовать:last-child.

    Item:not(:last-child) { margin-bottom: 20px; } // или // .item { // другие стили // margin-bottom: 20px; &:last-child { margin-bottom: 0; } } // или margin-top, основная идея здесь, не в направлении маргина, а в отсутствии лишнего // .item + .item { margin-top: 20px; } // или // .item { // другие стили // & + & { margin-top: 20px; } }

    Исключения


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

    P. S. Советую ознакомиться с публикацией

    Описание

    Устанавливает величину отступа от каждого края элемента. Отступом является пространство от границы текущего элемента до внутренней границы его родительского элемента (рис. 1).

    Рис. 1. Отступ от левого края элемента

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

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

    Синтаксис

    margin: [значение | проценты | auto] {1,4} | inherit

    Значения

    Разрешается использовать одно, два, три или четыре значения, разделяя их между собой пробелом. Эффект зависит от количества значений и приведен в табл. 1.

    Величину отступов можно указывать в пикселах (px), процентах (%) или других допустимых для CSS единицах. Значение может быть как положительным, так и отрицательным числом.

    Auto Указывает, что размер отступов будет автоматически рассчитан браузером. inherit Наследует значение родителя.

    HTML5 CSS2.1 IE Cr Op Sa Fx

    margin

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

    Результат данного примера показан на рис. 2.

    Рис. 2. Применение свойства margin

    Объектная модель

    document.getElementById("elementID ").style.margin

    Браузеры

    Internet Explorer 6 в режиме совместимости (quirk mode) не поддерживает выравнивание блока по центру с помощью правила margin: 0 auto . Также в этом браузере наблюдается ошибка с удвоением значения левого или правого отступа для плавающих элементов, вложенных в родительские элементы. Удваивается тот отступ, который прилегает к стороне родителя. Проблема обычно решается добавлением display: inline для плавающего элемента.

    Internet Explorer до версии 7.0 включительно не поддерживает значение inherit .

    Примечание

    У блочных элементов расположенных рядом друг с другом по вертикали наблюдается эффект схлопывания, когда отступы не суммируются, а объединяются между собой. Само схлопывание действует на два и более блока (один может быть вложен внутрь другого) с отступами сверху или снизу, при этом примыкающие отступы комбинируются в один. Для отступов слева и справа схлопывание никогда не применяется.

    Схлопывание не срабатывает:

    • для элементов, у которых на стороне схлопывания задано свойство padding .
    • для элементов, у которых на стороне схлопывания задана граница;
    • на элементах с абсолютным позиционированием, т.е. таких, у которых position установлено как absolute ;
    • на плавающих элементах (для них свойство float задано как left или right );
    • для строчных элементов;
    • для .
    • Tutorial

    Цель этой статьи не усложнить простые вещи, а акцентировать внимание на известных стандартах, о которых почему-то забывают. Важно соблюдать осмысленную структуру во всех аспектах верстки, и не менее важно придерживаться ее в отступах. И одним из основных принципов верстки является гибкость. А именно, возможность легко вносить какие-либо изменения и ничего при этом не сломать. Правильное обращение с margin и padding играет очень большую роль в этом деле.

    Ниже перечисленные принципы выполняются в среде позиционирования элементов на странице. В элементах декора тоже выполняются. Но не так категорично.

    Основные принципы:

    1. Отступ задается последнему возможному элементу в доме.
    2. Отступы нельзя задавать для независимых элементов (БЭМ блок).
    3. У последнего элемента группы, отступ обнуляется (всегда).

    Отступы идут от предыдущего элемента к следующему.

    margin(ы) задаются от предыдущего элемента к следующему, от первого ко второму, сверху вниз, слева направо.

    Это значит.что такие свойства как margin-left и margin-top не используются (не без исключений). С padding все немного наоборот (кроме того, что он используется для, декоративных целей, увеличения области ссылки и т.д.). Когда блоку нужен отступ сверху или слева, он его получает за счет padding-top и padding-left родителя.

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

    Отступ задается последнему возможному элементу в доме

    margin(ы) задаюся только между соседними элементами дом дерева.

    В примере 3 списка, в следующей структуре:

    • Далеко-далеко, за словесными.
    ...
    ...

    Не за счет дочерних элементов, а за счет соседних делается отступ.

    В этой ситуации.main-section__item и является последним возможным, кому можно задать отступ, чтоб разделить списки. Такого же эффекта можно добиться, если задать отступ диву, списку, лишке, ссылке, но это будет не правильно.

    Этот пример довольно простой. Но если представить на много большую вложенность, где кто-то намусорил отступами, когда какие-то маргины схлопываются. а какие-то суммируются с падингами.

    headline in a section of seven words


    Если взять пример с заголовком, и нужно сделать отступ для заголовка сверху. то последний элементом будет section и для него задается padding-top, margin(ы) которые стоят по дефолту всегда нужно обнулять.

    Самая простая причина, по которой стоит придерживаться данного принципа, это чтоб было проще найти отступ в будущем, либо вам, либо тому, кто будет в дальнейшем работать с вашей версткой. Это если говорить про удобство.

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

    Отступы нельзя задавать для независимых элементов (БЭМ блок)

    Никогда не делайте отступы элементам, которые могут использоваться больше чем один раз. Даже если вы не придерживаетесь методологий, учитывайте перспективу. Для этого есть обертки. Обертки это хорошо. Либо дополнительные классы.

    Если нужно сделать блоку отступ . Без ущерба это делается с помощью:

    • Наследование через элемент (если вытащить этот блок с элемента, отступа не будет, и его можно будет просто разместить в другом месте).
    • Добавление класса (можно сделать блок элементом).
    • Обертка (как блок, у которого роль, только в позиционировании).
    .block__item > .block { margin-right: 10px; } .block.block__item { margin-right: 10px; } .block-wrap > .block { margin-right: 10px; }

    У последнего элемента группы, отступ обнуляется (всегда)

    Возьмем для примера список и изображение.

    Это горизонтальное меню и логотип (который почему-то справа).

    Для последней li отступ обнуляется. И отступ делается между соседними элементами ul и img . О чем говорилось во втором принципе.

    Возьмем другой пример:


    Интересует нас отступ между новостями, которые задается.blog-preview__item { margin-bottom: 20px; } . Последний margin обнуляется, а нижний отступ делается за счет padding blog-preview . О чем говорилось во втором принципе.

    Чаще чем другие псевдоклассы, надо использовать:last-child.

    Item:not(:last-child) { margin-bottom: 20px; } // или // .item { // другие стили // margin-bottom: 20px; &:last-child { margin-bottom: 0; } } // или margin-top, основная идея здесь, не в направлении маргина, а в отсутствии лишнего // .item + .item { margin-top: 20px; } // или // .item { // другие стили // & + & { margin-top: 20px; } }

    Исключения


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

    P. S. Советую ознакомиться с публикацией