gpt4 book ai didi

javascript - 如果 `element.style.height` 为 `element.style.box-sizing`,则设置 `border-box` 无法按预期工作

转载 作者:行者123 更新时间:2023-11-30 13:48:20 24 4
gpt4 key购买 nike

我对以下代码有理解上的问题:

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 时,它基本上缩小了文本“World”的高度,但填充保持原样。由于 padding 超出了原始文本的高度,因此文本在 padding 中仍然可见。只有现在位于 div 之外的填充部分(由于高度降低)变得不可见(由于 overflow: hidden;)。

不过,我理解第一个(黄色)div 的行为。它有 box-sizing: border-box;,因此它的高度确实包括填充和边框。因此,当它的高度设置为 0 时,它应该收缩到“真正的”零高度,这意味着文本、填充和边框应该在 div 之外,因此应该是不可见的(由于到 overflow: hidden;).

谁能解释为什么不是这种情况以及为什么第一个 div 的行为与第二个 div 一样?

附言在撰写本文时已在 Firefox 和 Chrome 中测试,两者都是最新的(生产 channel )。

最佳答案

border-box tells the browser to account for any border and padding in the values you specify for an element's width and height. If you set an element's width to 100 pixels, that 100 pixels will include any border or padding you added, and the content box will shrink to absorb that extra width. This typically makes it much easier to size elements. ref

下面是一个示例,可以更好地说明您的问题:

.box {
display: inline-block;
padding-top: 2em;
padding-bottom: 2em;
border: 2px solid blue;
background: linear-gradient(red, red) content-box, orange;
height: 100px;
animation:move 5s linear infinite alternate;
}

@keyframes move{
to {
height:0;
}
}
<div class="box">
World
</div>
<div class="box" style=" box-sizing: border-box;">
World
</div>

第一个例子是我们将高度(红色区域)减小到 0 并且动画永不停止的简单例子。

在第二种情况下,高度包括填充和边框,因此在达到 0 之前内容区域已经为 0,这就是动画似乎停止的原因,因为我们不能减少超过 0 并且边框/填充已经占用了所有空间。

当高度等于 0 时两者是相同的,这是合乎逻辑的,因为在第一种情况下我们告诉浏览器内容区域应该为 0(我们不关心填充/边框),而在第二种情况下我们告诉浏览器浏览器将填充/边框考虑到我们指定的高度,因此我们为内容区域留出更少的空间,因为我们不能小于 0 然后它的 0。

换句话说,您并没有设置将在内容区域、填充和边框之间分割的总高度,而是您设置了一个高度并且浏览器尽可能地缩小了它包括边框和填充。

有关更多示例和详细信息:box-sizing: border-box with no declared height/width

关于javascript - 如果 `element.style.height` 为 `element.style.box-sizing`,则设置 `border-box` 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com