首页 > 其他分享 >多个相邻元素切换效果出现边框重叠问题的解决方法

多个相邻元素切换效果出现边框重叠问题的解决方法

时间:2023-05-29 15:12:54浏览次数:32  
标签:... 重叠 边框 相邻 按钮 border left

多个相邻按钮切换效果出现边框重叠问题的解决方法
下图所示的是一种常见的切换效果,在实现这种切换效果时,经常会遇到相邻按钮边框重叠的问题(查看demo),有没有好的解决方法呢?

 

所出现的边框重叠问题:


目前,很多优秀的UI组件库都有这种切换效果的组件,通过对他们实现方式的学习,现对边框重叠问题的解决方法做如下总结:

1、border-left + box-shadow

使用vue或react的伙伴,肯定都非常熟悉element或ant-design组件库,对于这种边框重叠问题,他们的解决方法相同,都是通过border-left + box-shadow来解决;具体展开就是:对于正常状态下的按钮,让所有按钮的border-left设置为0,并为第一个按钮单独设置border-left;对于处于激活状态的按钮,改变其border-color,此时激活状态的按钮由于左边框为0,产生颜色缺失,通过设置box-shadow来解决激活状态按钮左边框颜色缺失,box-shadow在盒模型中不占据空间,因此该解决方法非常巧妙。

核心代码如下:

<div class="btn-group">
  <div class="btn-item active">北京</div>
  <div class="btn-item">上海</div>
  <div class="btn-item">广州</div>
  <div class="btn-item">深圳</div>
  <div class="btn-item">杭州</div>
</div>
.btn-item{
  ...
  border: 1px solid rgba(0, 0, 0, .4);
  border-left: 0;
  ...
}
.btn-item:first-child{
  border-left: 1px solid rgba(0, 0, 0, .4);
}
.btn-item.active{
  ...
  border-color: #4A81FF;
  box-shadow: -1px 0 0 0 #4A81FF;
  ...
}
.btn-item.active:first-child{
  box-shadow: none;
}

最终效果如下:

在这里插入图片描述


2、margin + z-index

使用margin + z-index来解决边框重叠问题,具体如下:按钮的每个边框都保留,对于正常状态的按钮,通过设置margin-left: -1px;将每个按钮向左移动一个像素,这样后一个按钮的左边框会遮盖前一个按钮的右边框;一次来解决正常状态下边框重叠问题;对于处于激活状态按钮,通过改变其z-index值来将被后一个按钮覆盖的右边框显示出来;

核心代码如下:

<div class="btn-group">
  <div class="btn-item active">北京</div>
  <div class="btn-item">上海</div>
  <div class="btn-item">广州</div>
  <div class="btn-item">深圳</div>
  <div class="btn-item">杭州</div>
</div>
.btn-item{
  ...
  margin-left: -1px;
  border: 1px solid rgba(0, 0, 0, .4);
}
.btn-item.active{
  ...
  z-index: 1;
  border-color: #4A81FF;
  ...
}

最终效果如下:

在这里插入图片描述

以上就是目前我觉的解决边框重叠问题比较好的解决方案,仅供参考。

标签:...,重叠,边框,相邻,按钮,border,left
From: https://www.cnblogs.com/jiajialove/p/17440506.html

相关文章

  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结......
  • 2023-05-27:给你一个只包含小写英文字母的字符串 s 。 每一次 操作 ,你可以选择 s 中两
    2023-05-27:给你一个只包含小写英文字母的字符串s。每一次操作,你可以选择s中两个相邻的字符,并将它们交换。请你返回将s变成回文串的最少操作次数。注意,输入数据会确保s一定能变成一个回文串。输入:s="letelt"。输出:2。答案2023-05-27:大体过程如下:1.定义结构体Index......
  • 如何给布局或者控件添加边框
    如何给布局或者控件添加边框我在学习和开发JavaFX程序时,对Pane会有一些疑问,比如:它们的大小是怎样的?它们的大小和父节点或者窗口的关系是怎样的?相同的问题在控件上也存在,比如一个Label到底占据了多大的空间(因为默认Label没有边框展示)?我想,如果可以给布局或者控件添加......
  • 代码随想录算法训练营第11天 | ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重
     第五章 栈与队列part02今日内容:  ●  20. 有效的括号●  1047. 删除字符串中的所有相邻重复项●  150. 逆波兰表达式求值  详细布置   20. 有效的括号  讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。  大家先自己思考一下 有......
  • 代码随想录算法训练营第十一天|20. 有效的括号、1047. 删除字符串中的所有相邻重复项
    【参考链接】20.有效的括号【注意】1.括号匹配是使用栈解决的经典问题。2.这个命令最后进入a目录,系统是如何知道进入了a目录呢,这就是栈的应用(其实可以出一道相应的面试题了)。3.有三种不匹配的情况,第一种情况,字符串里左方向的括号多余了;第二种情况,括号没有多余,但是括号的......
  • 435. 无重叠区间(贪心)
    labuladong题解思路难度中等963给定一个区间的集合 intervals ,其中 intervals[i]=[starti,endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例1:输入:intervals=[[1,2],[2,3],[3,4],[1,3]]输出:1解释:移除[1,3]后,剩下的区间没有重......
  • [文本处理] 将查询到相邻两行合并为一行
    oracleRedoLog文件名dbname_lgwr_25049.trc文件格式如下:***SESSIONID3289.1)2018-02-1817:31:03.615Maximumredogenerationrecordsize=154624bytesMaximumredogenerationchangevectorsize=150680bytes***2018-02-1821:30:02.349Warning:logwritet......
  • CSS伪类实现0.5px边框
    div-class为需要添加0.5px边框的元素的类名,下面是less写法,css写法把嵌套的&::after提出来,换成.div-class::after.div-class{position:relative;&::after{position:absolute;bottom:0;content:'';width:100%;height:1px;background-c......
  • element-ui的el-table自带横线的去除 和 table边框线去除
    去除table单元格的底线和去除table的边框线//去掉所有的横线.el-table__row>td{border:none;}.el-table::before{height:0px;}//只去除表格的最最底部的横线div/deep/.el-table--border::after,div/deep/.el-table--group::after,div/deep/.el-table::b......
  • LeetCode 1047. 删除字符串中的所有相邻重复项
    题目链接:LeetCode1047.删除字符串中的所有相邻重复项题意:给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。解题思路:开一个栈,然后扫描整个字符串。如果当前字符和栈顶元素不相等,则当前......