Почему нижнее поле внутри поля элемента для кнопки, а не элемента p?

Почему добавление нижнего поля для элемента p добавляет пространство за пределы поля элемента (на которое не влияет цвет фона, установленный в CSS), но верно обратное (поле остается цветным) при добавлении нижнего поля для элемента кнопка? (Я исправил это, используя только заполнение и установив для элемента p значение 0, поэтому я спрашиваю только из любопытства.)

Этот CSS:

.about p {
  padding: 0 4em 2em 4em;
  margin: 0 0 2em 0;
  text-align: left;
}

button {
  margin-top: 1em;
  margin-bottom: 2em;
}

Результат (обратите внимание на пробел над разделом «ПОРТФОЛИО», но не под кнопкой внизу):

Почему нижнее поле внутри поля элемента для кнопки, а не элемента p?

Чтобы просмотреть остальную часть моего кода, просмотрите CodePen.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вы стали жертвой коллапса маржи в случае p.
См. Этот пример. Внешний элемент имеет желтый фон, и вы ожидаете увидеть это позади p (вверху и внизу), но он «наследует» поле p, поэтому вы видите белый фон тела.

.outer {
  background: yellow;
}

.inner {
  background: lime;
  margin: 2em 0;
}
<div class = "outer">
  <p class = "inner">two block elements</p>
</div>

Однако кнопка в вашем примере не является блочным элементом. По умолчанию он имеет display:inline-block, поэтому сворачивание полей не происходит, и вокруг него виден внешний фон div.

.outer {
  background: yellow;
}

.inner {
  background: lime;
  margin: 2em 0;
}
<div class = "outer">
  <button class = "inner">inline-block in a block</button>
</div>

Для получения дополнительной информации см. Освоение схлопывания маржи в MDN.

Другие вопросы по теме