在悬停时添加CSS边框而不移动元素

Dav*_*542 150 css

可能重复:
CSS悬停边框使内联元素稍微调整

我有一行,我正在悬停时应用背景突出显示.

.jobs .item:hover {
    background: #e1e1e1;
    border-top: 1px solid #d0d0d0;
}
Run Code Online (Sandbox Code Playgroud)

然而,随着边境增加了1px的额外的元素,它使得"移动".我如何在这里补偿上述动作(不使用背景图像)?

met*_*ion 305

您可以使边框透明.它以这种方式存在,但是不可见,所以它不会推动任何东西:

.jobs .item {
    background: #eee;
    border-top: 1px solid transparent;
}

.jobs .item:hover {
    background: #e1e1e1;
    border-top: 1px solid #d0d0d0;
}
Run Code Online (Sandbox Code Playgroud)

如果您的元素具有指定height和/或width,您也可以使用box-sizing:border-box;,因为此框模型包括填充和边框宽度到计算大小,例如:

.jobs .item {
    background: #eee;
    height: 40px;
    box-sizing: border-box;
}

.jobs .item:hover {
    background: #e1e1e1;
    border-top: 1px solid #d0d0d0;
}
Run Code Online (Sandbox Code Playgroud)

  • 有人通过使用CSS属性`box-sizing:border-box;`看到了解决这个问题的方法. (8认同)
  • @是的,它适用于`box-sizing:border-box;`. (5认同)
  • 如果你使用透明颜色会更好: (2认同)
  • @SungWonCho用于'box-sizing:border-box`工作,你需要指定元素的宽度和高度,我认为这不是你想要的.使用答案https://jsfiddle.net/g9qc2kg3/中描述的技术 (2认同)

Dip*_*ips 71

添加margin:-1px;减少1px到每一侧.或者,如果你只需要一方,你可以做margin-left:-1px等.

  • 这对我来说是最好的解决方案,因为在我的情况下,我为orignal元素设置了1px边框,并希望在悬停时获得更粗的边框(3px).使用`margin:-2px;`确实有效. (7认同)
  • 为了澄清和形式化此解决方案:仅在应用较粗边框时添加负边距,并使用等于粗边框减去细边框的边距大小。因此,要在悬停时从 2px 边框过渡到 5px 边框,您可以使用 `.some-class{ box-sizing: content-box; border: 2pxsolid #333 }` 那么你就会有 `.some-class:hover{ margin: -3px; 边框:5px 实心#333}`(或任何你喜欢的颜色)。相关元素还需要“box-sizing: content-box”,以防止应用粗边框时发生移动。[codepen](https://codepen.io/aleph_one/pen/OJVEoGQ) (5认同)

w3u*_*uru 16

试试这可能会解决你的问题.

CSS:

.item{padding-top:1px;}

.jobs .item:hover {
    background: #e1e1e1;
    border-top: 1px solid #d0d0d0;
    padding-top:0;
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<div class="jobs">
    <div class="item">
        content goes here
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

请参阅小提琴输出:http://jsfiddle.net/dLDNA/


小智 11

a添加border到正规的项目,相同colorbackground,所以它不能被看到.这样一来,该物品border: 1px是否有徘徊.