gpt4 book ai didi

css - 边框框不适用于行内 block 元素?

转载 作者:行者123 更新时间:2023-11-28 09:58:39 25 4
gpt4 key购买 nike

我有一个 inline-block 元素列表,我想为悬停在其上的元素添加边框。但是,请注意边框如何偏移元素,即使当我使用 box-sizing: border-box 并显式定义元素的宽度和高度时也是如此。我说明了以下行为:

* { box-sizing: border-box }

ul { font-size: 0 }

li {
display: inline-block;
width: 100px; height: 40px; margin: 10px;
font-size: 20px; text-align: center;
background-color: #FFF176;
}

li:hover { border: 5px dashed grey }
<ul>
<li>hover</li>
<li>over</li>
<li>me!</li>
</ul>

我找到的最佳解决方案是使用 outlineoutline-offset 而不是 border,但我真的很想知道为什么我原来的方法不起作用:/

更新:虽然 BoltClock 给出了非常好的解释和建议(这是我所要求的),但我只想说我完全忘记了 flexbox ,它几乎解决了我在使用内联元素时遇到的所有问题。我为我的 final JSFiddle solution 结合了 BoltClock 的透明边框技巧

最佳答案

我现在看到问题了。发生的事情是,一旦您添加了边框,box-sizing: border-box 会导致每个元素的内容框水平和垂直收缩。因为您的元素是行内 block ,所以垂直收缩会影响悬停元素的基线,因此会影响它所在行的基线,从而导致同一行上的其他元素发生偏移。如果仔细观察,您会注意到文本实际上保持对齐,这是偏移元素的目标。

将边框更改为轮廓是有效的,因为轮廓设计为对布局没有影响(还因为您随后将边框完全从图片中移除)。

但是,正是出于这个原因,以这种方式使用轮廓会产生与带边框的原始效果截然不同的效果。设置初始透明边框而不是轮廓将确保您的内容保持正确的偏移量,无论边框是否在背景中可见(这在之前的答案中显示,但可能因为被否决而被删除):

* { box-sizing: border-box }

ul { font-size: 0 }

li {
display: inline-block;
width: 100px; height: 40px; margin: 10px;
font-size: 20px; text-align: center;
background-color: #FFF176;
border: 5px dashed transparent;
}

li:hover { border-color: grey }
<ul>
<li>hover</li>
<li>over</li>
<li>me!</li>
</ul>

关于css - 边框框不适用于行内 block 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35627365/

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