准备深入学习一下前端并计划每周至少写一篇关于前端的文章。本文是第七篇。
所谓圆角敞口效果,如下图:
当鼠标经过某一菜单时,其背景置白,右侧有”张嘴”的效果。注意右侧的圆角。
为了模拟方便,我们给一个简化后的 HTML 结构:
<!-- 一个简单的侧边栏 -->
<aside>
<a href="#">Hello world</a>
<a href="#">Hello world</a>
<a href="#">Hello world</a>
</aside>
首先,但非必需,给 aside 元素设置一些基础样式(蓝色的渐变背景、宽高、内边距等):
aside {
width: 16rem;
height: 100vh;
background: linear-gradient(30deg, #0048bd, #44a7fd);
padding: 2rem 0 0 2rem;
border-top-right-radius: 4rem;
}
在鼠标经过时菜单的背景是横向铺满的,所以我们设置其 display:block :
aside > a {
/*菜单横向铺满*/
display: block;
color: #fff;
padding: 1rem;
text-decoration: none;
}
aside > a:hover {
/*鼠标经过菜单时,改变菜单背景色*/
background: #fff;
color: #3f5efb;
}
此时,我们得到的效果如下:
因图1中菜单左侧背景是圆角的,我们也照做:
aside > a {
/*接着上面*/
border-top-left-radius: 2rem;
border-bottom-left-radius: 2rem;
}
效果如下:

最后,也是最复杂的部分,右侧的圆角敞口效果。读者可先想想自己怎么实现。

想到吗?
看到下面这张图你也许就有灵感了:

我们要做的,是在菜单右端的上下两侧各添加一个矩形(刚好可以用 :after 和 :before 实现),然后上方的矩形其右下角设置圆角,下方的矩形其右上角设置圆角。但圆角外的背景色仍然是蓝色的(见上图),所以还要做的,是把矩形圆角外的那部分蓝色区域变成白色。
怎么改变圆角外的颜色?
box-shadow 来帮忙,圆角外的部分,将其阴影设置为白色(和菜单背景色一致):
aside > a {
/*为了将 :after/:before 定位到菜单的最右端*/
position: relative;
}
aside > a:hover:after {
content: "";
display: block;
position: absolute;
/*菜单右上角的矩形*/
right: 0;
bottom: 100%;
/*矩形右下角设置圆角*/
border-bottom-right-radius: 50%;
width: 1.5rem;
height: 1.5rem;
border: 1px solid green;
/*矩形右角设置白色背景*/
box-shadow: 0 1rem #fff;
}
得到结果如下:

上面是右上角的矩形效果,只要再用 :before 补充完菜单右下角的矩形,整个结果就呼之欲出了:

最后,只要把矩形的边框去掉:

一个新鲜的圆角敞口效果就出来了。
总结一下吧
为了实现上述”张嘴”效果:我们用到了:
-
渐变背景色(非必须):background: linear-gradient(30deg, #0048bd, #44a7fd)。 -
只给矩形的某一个角设置圆角:border-top-right-radius: 4rem。 -
:before 和 :after 结合 position 的使用。 -
使用 box-shadow 移除盒子圆角外的背景色。
谢谢阅读。点击「阅读原文」可查看 CodePen 完整示例。
– END –
原文始发于微信公众号(背井):前端学习(7): 怎么实现菜单背景的圆角敞口效果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/246750.html