Menu

Padding в CSS: сокращенная запись, стороны и проценты

Padding это внутренний отступ элемента, между его содержимым и рамкой. Разберем сокращенную запись padding с 1 до 4 значений, свойства отдельных сторон, логический padding, проценты и то, как padding меняет размер элемента.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Что такое padding

Padding это пространство внутри элемента, между его содержимым и рамкой. На нем виден фон элемента, поэтому именно это свойство дает кнопке, карточке или бейджу «дышать».

Синяя область это содержимое. Зеленая полоса вокруг это 24px padding с каждой стороны, а рамка находится снаружи.

Сокращенная запись padding: 1, 2, 3 или 4 значения

padding задает все четыре стороны одним объявлением. Количество значений определяет, какая сторона что получит, по часовой стрелке от верха:

ОбъявлениеВерхПравоНизЛево
padding: 10px;10101010
padding: 10px 20px;10201020
padding: 10px 20px 30px;10203020
padding: 10px 20px 30px 40px;10203040

Два значения означают «по вертикали, по горизонтали». Три значения: «верх, по горизонтали, низ». Четыре идут по часовой стрелке: верх, право, низ, лево (по-английски это запоминают как TRouBLe: top, right, bottom, left).

Введите любую сокращенную запись ниже. Блок перерисуется, а браузер покажет, что получила каждая сторона:

Попробуйте 8px, 8px 24px, 0 0 40px и 1em 5%. Невалидное значение, например -10px, игнорируется, и блок сохраняет последний валидный padding.

По одной стороне

У каждой стороны есть свое свойство, и оно понятнее записи из четырех значений, когда нужно изменить только одну:

.card {
  padding-top: 16px;
  padding-right: 24px;
  padding-bottom: 16px;
  padding-left: 24px;
}

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

.card {
  padding: 16px;
  padding-bottom: 32px; /* only the bottom changes */
}

Порядок здесь важен: сокращенная запись padding после padding-bottom вернула бы низ к 16px.

Логический padding: padding-inline и padding-block

padding-left и padding-right физические: они остаются на той же стороне на любом языке. Логические свойства следуют направлению письма, а это то, что нужно сайту, который показывается и справа налево:

Логическое свойствоВ русском (слева направо)В арабском (справа налево)
padding-inline-startслевасправа
padding-inline-endсправаслева
padding-inlineслева и справасправа и слева
padding-blockсверху и снизусверху и снизу

Padding увеличивает блок (кроме border-box)

По умолчанию width это ширина только содержимого, и padding добавляется сверху. Блок с width: 200px и padding: 20px будет шириной 240px:

box-sizing: border-box оставляет блок шириной 200px и берет padding изнутри. Полный расчет описан на странице про блочную модель.

Padding в процентах

Padding в процентах отсчитывается от ширины родителя, для всех четырех сторон, включая верх и низ:

Отсюда и старый трюк «padding-top: 56.25%» для видеоблоков 16:9. Сегодня ту же задачу напрямую решает aspect-ratio: 16 / 9.

Padding у кнопок и ссылок

Padding это правильный способ сделать ссылку или кнопку больше, потому что он часть элемента, а значит, и часть области, по которой можно кликнуть или нажать пальцем. Margin добавил бы пространство, но не увеличил бы цель.

.btn {
  display: inline-block; /* lets vertical padding take space in the line */
  padding: 10px 18px;    /* a comfortable touch target */
}

Какие значения принимает padding

ЗначениеПримерПримечание
Длина12px, 1rem, 0.5emem масштабируется с размером шрифта элемента
Проценты5%От ширины содержащего блока
0padding: 0Единица не нужна
Отрицательное-10pxНевалидно, игнорируется
autoautoДля padding невалидно (для margin работает)

Частые ошибки

  • Неправильный порядок в записи из четырех значений. Верх, право, низ, лево, по часовой стрелке.
  • Блок растет, когда добавляете padding. Задайте box-sizing: border-box.
  • Padding для разделения двух элементов. Пространство между элементами это margin; padding это пространство внутри одного. Смотрите margin и padding: разница.
  • Вертикальный padding у строчной ссылки, который наезжает на другие строки. Сделайте ее inline-block.
  • Отрицательный padding или padding: auto. Оба невалидны и молча игнорируются.

Часто задаваемые вопросы

Что такое padding в CSS?

Padding это пространство между содержимым элемента и его рамкой. Оно принадлежит элементу, поэтому на нем виден цвет фона элемента, и оно увеличивает кликабельную область ссылки или кнопки.

В каком порядке идут значения в сокращенной записи padding?

По часовой стрелке от верха: padding: top right bottom left;. С тремя значениями это верх, лево и право, низ; с двумя верх и низ, затем лево и право; с одним все четыре стороны.

Увеличивает ли padding размер элемента?

С box-sizing: content-box по умолчанию да: padding прибавляется к width и height. С box-sizing: border-box padding берется изнутри ширины, и элемент сохраняет заданный размер.

От чего считается padding в процентах?

От ширины содержащего блока, для всех четырех сторон. padding-top: 50% это половина ширины родителя, а не его высоты; поэтому старые трюки с соотношением сторон использовали вертикальный padding.

Может ли padding быть отрицательным?

Нет. Отрицательное значение padding невалидно, и объявление игнорируется. Чтобы вытянуть содержимое наружу, используйте отрицательный margin.

Как задать padding в HTML?

Через CSS, в таблице стилей или атрибуте style: <div style="padding: 16px;">. У обычных элементов HTML нет атрибута padding; старый атрибут cellpadding у таблиц устарел, вместо него используют padding на td и th.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ