这种元素模块交界的地方的border-radius效果怎么做?

点击哪个临近的两个元素就会有圆角 这种效果要用js控制吗
image

阅读 3.8k
6 个回答

image
纯 CSS 方案
上 左 下的 阴影可以 再套一个DIV,overflow:hidden 去掉
还有一点点的瑕疵

<!DOCTYPE html>  
<html lang="en">  
<head>  
 <meta charset="UTF-8">  
 <title>Title</title>  
 <style type="text/css">  
 .nav {box-shadow:0 0 5px 0 #000;}  
    .nav .item {position:relative;height:3em;line-height:3em;text-align:center;border-radius:0.5em;}  
    .nav .item.active {margin-right:-5px;background-color:#FFF;}  
    .nav .item.active:before {content:'200B';position:absolute;width:100%;height:1em;top:-0.5em;left:-5px;border-bottom-right-radius:0.5em;background-color:transparent;box-shadow:5px 5px 5px -5px #000;}  
    .nav .item.active:after {content:'200B';position:absolute;width:100%;height:1em;bottom:-0.5em;left:-5px;border-top-right-radius:0.5em;background-color:transparent;box-shadow:5px -5px 5px -5px #000;}  
    </style>  
</head>  
<body>  
<div class="nav">  
 <div class="item">精选推荐</div>  
 <div class="item">保健品</div>  
 <div class="item active">男装</div>  
 <div class="item">女装</div>  
 <div class="item">童装</div>  
</div>  
</body>  
</html>

箭头位置没看到圆角

你是说的图片的圆角吗。
第一个
image.png

中间的

image.png

最终完善(有借鉴楼下一位老哥)

image.png

楼上已经给出了使用 JS 的方案,这个问题用 CSS 实际上也可以解决,但是实现比较繁琐,而且如果列表是使用表格实现的话,这套思路是行不通的,所以不保证实际效果,大致思路如下:

  1. 给列表的每一项都加上圆角、阴影、背景色,给定位为 relative
  2. 给每一项加上负值 margin-top,使其恰好遮盖上一项的底部圆角和阴影;
  3. 给每一项加一个绝对定位的 ::before 伪元素,设其宽高和位置,遮盖本项的顶部圆角和阴影;
  4. 使用伪类选择器 :active 给每一项添加点击响应,被鼠标“按下” 的时候该项的 z-index 设为负值,这样就会显示出前一项的圆角和阴影,使用兄弟选择器 + 选择后面一项,并隐藏其 ::before 伪元素,以显示其圆角和阴影。

当然,实际应用中,通常不希望鼠标松开就恢复原状,所以还要配合一个隐藏的 input[type=radio] 来实现选中效果,所以实现相当繁琐,不如使用 JS 来得直接和快速。

jsbin
不是很完美优雅,期待有人给出一个完美方案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏