
MaterialUI的ButtonGroup组件,中间边框不被覆盖的实现秘诀
在MaterialUI的ButtonGroup中,Button之间的分界线通常会被覆盖。然而,官方示例中却展示了一个特殊的情况:按钮悬停时,中间的边框依然可见。本文将揭开这个效果背后的实现原理,并分析在实际应用中可能遇到的问题。
实现原理
官方示例的做法非常巧妙:
- 将除第一个按钮以外的所有按钮的左边界向内移动一个边框的宽度。
- 对除最后一个按钮以外的所有按钮的右边界进行透明处理。
- 在按钮悬停时,恢复按钮的边框并将其设为不透明。
这样,当按钮悬停时,只有当前按钮的边框是可见的,而前后按钮的边框则被隐藏或变为透明。
常见问题
在实际应用中,我们可能会遇到以下问题:
- 边框被背景色覆盖:在这种情况下,需要将背景色从边框区域移除,或使用background-clip属性。
- 右边框颜色未设为透明:如官方示例中所述,除最后一个按钮以外的按钮的右边界颜色应设为透明。
- 悬停时边框颜色不改变:需要添加.box:not(:last-child):hover { border-right-color: currentColor; }样式,以覆盖透明边框。
通用写法
上述的实现原理可以概括为以下通用写法:
- 设置按钮之间边框的宽度为margin-left: -1px。
- 对除最后一个按钮以外的所有按钮的右边界设为透明。
- 在按钮悬停时,为按钮设置不透明边框。
- 在悬停后一个按钮时,将后一个按钮的左边界设为透明。










