【发布时间】:2021-08-28 14:27:56
【问题描述】:
所以想象一下,你有 3 个彼此相邻的按钮。
在 CSS 中,你给它一个 3px 的边框样式,并且在悬停时边框会改变颜色。在渲染中,您会看到第一个孩子的顶部和底部、左侧和最后一个孩子的右侧,边框都是设置的 3px。但是在它的 6px 之间,因为两个按钮都有自己的边框。
让我们称之为Situation-a
所以要修复它,你可以让每个按钮(不是第一个按钮)都向左移动相同的 -3px,从而使其在视觉上共享相同的边框。
但是在悬停时,边框右侧的第一个按钮不会改变颜色,因为他旁边的按钮正在覆盖它。
让我们称之为Situation-b
但这两种解决方案都是错误的。应该发生的是,它们之间的边框仍然是 3px,并且在悬停时,无论女巫按钮如何,该 1 按钮周围的所有边框都会改变颜色。
但是你是怎么做到的?
将z-index 添加到带有:hover 的按钮并不能解决问题,因为一旦您取消悬停,被重叠的边框会立即变回颜色,而其余边框会慢慢变回颜色。
基本上,彼此相邻的按钮需要共享相同的边框,并且在悬停时会更改相同边框的颜色,但不会产生 6px 的间隙。
这是两种情况的sn-p
* {
padding: 0;
margin: 0;
}
.parent {
font-size: 0;
margin: 10px;
}
.child {
font-size: 24px;
padding: 5px 15px;
border-radius: unset;
border: 3px solid black;
background-color: lightgray;
transition: border 0.25s ease-in-out;
}
.child:hover {
border: 3px solid cyan;
}
.situation-b .child:not(:first-child) {
margin-left: -3px;
}
Situation A (border between is 6px)
<div class="parent situation-a">
<button class="child">action a</button>
<button class="child">action b</button>
<button class="child">action c</button>
</div>
Situation B (on button A hover, right border is not seen)
<div class="parent situation-b">
<button class="child">action a</button>
<button class="child">action b</button>
<button class="child">action c</button>
</div>
这是该问题的在线创建示例:https://codesandbox.io/s/optimistic-dubinsky-1ji85?file=/index.html
【问题讨论】:
-
我在这里找到了类似的解决方案:https://stackoverflow.com/a/66356280/12425881
-
@MetropolisCZ 不考虑过渡和 zindex 问题