У меня возникла проблема с пониманием следующего кода:
let myDiv1 = document.getElementById("myDiv1");
alert("Click me to make 'Hello' vanish");
myDiv1.style.height = "0px";
let myDiv2 = document.getElementById("myDiv2");
alert("Click me to make 'World' vanish");
myDiv2.style.height = "0";
.myClass1 {
box-sizing: border-box;
overflow: hidden;
padding-top: 2em;
padding-bottom: 2em;
background-color: yellow;
}
.myClass2 {
box-sizing: content-box;
overflow: hidden;
padding-top: 2em;
padding-bottom: 2em;
background-color: orange;
}
<body>
<div id="myDiv1" class="myClass1">
Hello
</div>
<div id="myDiv2" class="myClass2">
World
</div>
</body>
Я понимаю поведение второго (оранжевого) div
: у него box-sizing: content-box;
, поэтому его высота не включает отступы или границы. Следовательно, когда его высота установлена на 0, он сжимается в основном на высоту текста «Мир», но отступы оставляются как есть. Поскольку отступ превышает высоту исходного текста, текст по-прежнему виден в отступе. Только та часть заполнения, которая теперь находится за пределами div
(из-за уменьшенной высоты), становится невидимой (из-за overflow: hidden;
).
Однако я не понимаю поведение первого (желтого) div
. Он имеет box-sizing: border-box;
, поэтому его высота действительно включает отступы и границы. Следовательно, когда его высота установлена на 0, он должен уменьшиться до «реальной» нулевой высоты, а это означает, что текст, отступы и границы должны быть за пределами div
и, следовательно, должны быть невидимыми (из-за overflow: hidden;
).
Кто-нибудь может объяснить, почему это не так и почему первый div
ведет себя так же, как второй div
?
P.S. Протестировано в Firefox и Chrome, оба актуальны (рабочий канал) на момент написания этой статьи.