Css: margin-top вызывает прокрутку

Элемент h1 вызывает появление полосы прокрутки. Может ли кто-нибудь объяснить мне, почему?

html, body {
  margin: 0;
  padding: 0;
  height: 100%;
}
header {
  height:10%;
}
section {
  height:90%;
}
<header>
  <h1>
    Hello
  </h1>
</header>
<section>
  test
</section>

Ответы

Ответ 1

Это потому, что

  • h1 по умолчанию имеет значение по умолчанию, обычно 0.67em.
  • Верхняя граница h1 сворачивается
  • height никогда не включает высоту области поля.

Так как верхний край h1 сжимается, он ведет себя как маржа, принадлежащая header, а не h1. Поскольку высота содержимого h1 равна 10%, его общая высота будет calc(10% + 0.67em).

Вот почему происходит переполнение.

Если вы удаляете верхний край, но оставляете нижний, проблем нет, потому что нижний не сбрасывается из-за не auto height. Из Свертывание полей,

Два поля смежны, если [...] оба относятся к вертикально смежным края коробки, [... например.]

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

Итак, вы можете сделать любое из следующих

Ответ 2

Поскольку h1 поставляется с пометкой, применяемой таблицей стилей по умолчанию.

Когда вы добавляете этот запас (часто margin-top: .67em и margin-bottom: .67em) в height: 100% в свой код, это превышает высоту видового экрана, запуская вертикальную полосу прокрутки.

Дайте h1 a margin: 0.

Если вы используете box-sizing: content-box или border-box, пространство маркеров всегда будет добавлено в ваше объявление height.

Если вы хотите добавить пространство вокруг своего h1 без добавления высоты, используйте дополнение вместо поля, а также box-sizing: border-box. Вот некоторые варианты реализации: https://css-tricks.com/box-sizing/

Ответ 3

h1 по умолчанию применяется маржа.

введите описание изображения здесь

Ответ 4

*
{
  margin:0px auto;
}
html, body {
  margin: 0 ;
  padding: 0;
  height: 100%;
}
header {
  height:10%;
}
section {
  height:90%;
}
<header>
  <h1>
    Hello
  </h1>
</header>
<section>

  test
</section>

Ответ 5

Тег

h1 в элементе уровня блока имеет некоторый запас.

Чтобы удалить такой тип дополнительного поля и отступов, рекомендуется reset маркер всех элементов и отступы до 0.

Это можно сделать:

 * {
     margin: 0;
     padding: 0;
 }

* {
  margin: 0;
  padding: 0;
}
html, body {
  height: 100%;
}
header {
  height:10%;
}
section {
<header>
  <h1>
    Hello
  </h1>
</header>
<section>
  test
</section>