记录--用css画扇形菜单
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
1、效果图
用手机录屏再用小程序转换的gif,可能精度上有点欠缺。

2、实现过程
1、观察及思考
开始编码前我们首先观察展开后的结构:两个四分之一的圆加三个圆形菜单项。 文章名为用css画扇形,如上图所示没有任何Javascript辅助却实现收缩展开的效果,如何实现的呢?
2、巧用标签
图文内容很简单,两个四分之一圆我们可以用<div>标签实现。但是正如标题所示没有JavaScript却能实现实现交互,如何巧妙的使用标签呢?我想到了label+input及借助它们的伪类来实现。
<input checked="checked" type="checkbox">
<label for="menubtn">
<i>开</i>
<i>收</i>
</label>
需要注意的是:
- label标签内的for属性应当与相关元素的id属性相同, 意思就是
label标签配合input标签使用时,label标签中的for属性和input标签内的id属性值要一样,否则就不会将选中这个input选项。,比如:label标签中的for属性是menubtn,那么input中的id属性就必须是menubtn,否则label和input就不会关联。 input的type属性设置为checkbox。这里我们必须将type属性设置为checkbox复选框类型,这是很重要的一个步骤。
3、实现深紫色小圆
通过观察不难发现不管菜单展开还是收缩,紫色校园的状态一直没有改变,所以它的样式就简单多了。直接上样式。
//把label转换成块级元素并定位
label{display: block;transition: transform 0.5s, top 0.5s;position: absolute;bottom: 0;right: 0;margin: auto;z-index:99;cursor:pointer;}
//使用伪类实现深紫色背景
label::after{content:"";width:240px;height:240px;background-color:#8a2be1;position: absolute;bottom:-120px;right:-120px;border-radius: 50%;z-index: 9;}
4、实现淡紫色大圆
菜单展开的时候淡紫色背景和菜单一起显示,收缩的时候和菜单一起隐藏。因此我们先来加菜单。
//菜单
<ul class="menu-list">
<li><a>你</a></li>
<li><a>好</a></li>
<li><a>啊</a></li>
</ul>
菜单结构简洁明了无需多说,现在我们来实现淡紫色大圆。 可以直接给menu-list加背景色,更可以使用伪类。为了后续交互的实现我们这里需要使用伪类。
//使用伪类实现淡紫色背景
.menu-list::after{content:"";width:560px;height:560px;background-color: #ebddf8;position: absolute;bottom:-280px;right:-280px;border-radius: 50%;z-index: 9;opacity: 1;transition: opacity .5s;}
5、完成交互
页面基本上画完,我们来实现交互效果。聪明的我们布局的时候借助了label+input组合,input复选框标签具有checked属性,通过此属性可以设置复选框的选中状态。于是便有了input{} input:checked{}
还有一个知识点,元素的兄弟元素:
element1~element2 {// CSS 属性}element1 和 element2 是要选择的两个元素,~ 符号表示选择 element1 后面的所有 element2 元素。element1 + element2 {// CSS 属性}+ 符号表示选择 element1 后面的第一个 element2 元素。
CSS 元素的兄弟元素很重要,可以方便地选择相邻的元素并进行样式设置。
重要的知识点就这么多,剩下的修修补补,画画圆定定位,这里不做过多赘述。
6、收工
上代码~
html:
<div class="menu mvcenter">
<input checked="checked" class="menu-btn mvcenter" id="menubtn" type="checkbox">
<label for="menubtn">
<i class="iconfont icon-caidan">开</i>
<i class="iconfont icon-quxiaoguanbi1">收</i>
</label>
<ul class="menu-list">
<li class="mvcenter menu-item"><a class="iconfont icon-lianxi">你</a></li>
<li class="mvcenter menu-item"><a class="iconfont icon-dizhi">好</a></li>
<li class="mvcenter menu-item"><a class="iconfont icon-fankui">啊</a></li>
<li class="mvcenter menu-item"><a class="iconfont icon-fankui">啊</a></li>
</ul>
</div>
body,ul,li,input,div{padding:0;margin:0;}
body{overflow: hidden;}
i{font-style: normal;}
.mvcenter{position: absolute;bottom:20px;right:20px;}
.menu-btn.mvcenter{margin-top: -20px;margin-left:-20px;}
.menu-btn{width:40px;height:40px;cursor: pointer;background-color: red;border-radius: 20px;display: block;z-index: 99;opacity: 0;}
.menu-btn + label{display: block;transition: transform 0.5s, top 0.5s;position: absolute;bottom: 0;right: 0;margin: auto;z-index:99;cursor:pointer;}
.menu-btn + label i{color:#fff; font-size:40px;position: absolute;bottom:5px;right:0;z-index: 12;}
.menu-btn + label i.icon-caidan,.menu-btn:checked + label i.icon-quxiaoguanbi1{opacity: 1;}
.menu-btn + label i.icon-quxiaoguanbi1,.menu-btn:checked + label i.icon-caidan{opacity: 0;}
.menu-btn:checked + label + .menu-list::after{opacity: 1;}
.menu-btn + label::after{content:"";width:240px;height:240px;background-color:#8a2be1;position: absolute;bottom:-120px;right:-120px;border-radius: 50%;z-index: 9;}
.menu-list::after{content:"";width:560px;height:560px;background-color: #ebddf8;position: absolute;bottom:-280px;right:-280px;border-radius: 50%;z-index: 9;opacity: 0;transition: opacity .5s;}
.menu-list > li.mvcenter{margin-top: -40px;margin-left:-40px;}
.menu-list > li{width:70px;height:70px;border-radius:80px;border:3px solid #b880eb;color:#8a2be1;display: flex;align-items: center;justify-content: center; opacity: 0;transition: all .5s;transform-origin: center center;z-index: 12;}
.menu-list > li:nth-child(1){transform:rotate(0)}
.menu-list > li:nth-child(2){transform:rotate(-45deg)}
.menu-list > li:nth-child(3){transform:rotate(-90deg)}
.menu-list > li a{font-size:30px;font-weight: bold;}
.menu-list > li:nth-child(1) a{transform:rotate(10deg)}
.menu-list > li:nth-child(2) a{transform:rotate(-45deg)}
.menu-list > li:nth-child(3) a{transform:rotate(-90deg)}
.menu-btn:checked ~ ul .menu-item {opacity: 1;}
.menu-btn:checked ~ ul .menu-item:nth-child(1) {transform: rotate(0) translateX(-120px);}
.menu-btn:checked ~ ul .menu-item:nth-child(2) {transform: rotate(45deg) translateX(-120px);}
.menu-btn:checked ~ ul .menu-item:nth-child(3) {transform: rotate(90deg) translateX(-120px);}
本文转载于:
https://juejin.cn/post/7265624177775624252
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

记录--用css画扇形菜单的更多相关文章
- css画扇形按钮
最近项目中需要制作一个扇形按钮,效果是这样的: 周围四个扇形,和中间的小圆,全是能点击的.这就需要画扇形.百度了一下,有很多文章讲了如何生成扇形,最后我借鉴了一个最简单的实现方式,使用css的clip ...
- 用css画图标
css3的属性 transform(转换) 用途很广泛,功能也很强大,为了熟悉它的各种转换方式(平移 translate,旋转 rotate,扭曲 skew,放缩 scale),我做了一些平常常用的一 ...
- CSS学习笔记二:css 画立体图形
继上一次学了如何去运用css画平面图形,这一次学如何去画正方体,从2D向着3D学习,虽然有点满,但总是一个过程,一点一点积累,然后记录起来. Transfrom3D 在这一次中运用到了一下几种属性: ...
- css3制作扇形菜单
工作中网页中有一个扇形的导航菜单,以前没有接触过,参考了http://www.w3cplus.com/css3/building-a-circular-navigation-with-css-tran ...
- 【前端切图】用css画一个卡通形象-小猪佩奇
最近在腾讯云技术社区遇到了一位奇才,用css画出了一个社会人小猪佩奇,不得不服.研究了一下他的文章https://segmentfault.com/a/1190000014909658,感觉甚是有趣, ...
- 一步一步教你用CSS画爱心
今天小颖给大家分享一个用CSS画的爱心,底下有代码和制作过程,希望对大家有所帮助. 第一步: 先画一个正方形.如图: <!DOCTYPE html> <html> <he ...
- 参考bootstrap中的popover.js的css画消息弹框
前段时间小颖的大学同学给小颖发了一张截图,图片类似下面这张图: 小颖当时大概的给她说了下,其实小颖也不知道上面那个三角形怎么画嘻嘻,给她说了DOM结构,具体的css让她自己百度,今天小颖自己参考boo ...
- Effective前端3:用CSS画一个三角形
p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...
- 用css画出三角形
看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...
- 超简洁的CSS下拉菜单
效果体验:http://hovertree.com/texiao/css/3.htm HTML文件代码: <!DOCTYPE html> <html xmlns="http ...
随机推荐
- NC23051 华华和月月种树
题目链接 题目 题目描述 华华看书了解到,一起玩养成类的游戏有助于两人培养感情.所以他决定和月月一起种一棵树.因为华华现在也是信息学高手了,所以他们种的树是信息学意义下的. 华华和月月一起维护了一棵动 ...
- NC24734 [USACO 2010 Mar G]Great Cow Gathering
题目链接 题目 题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, ...
- CentOS在无网络环境下,用离线源yum安装软件
先说大致步骤: 1.前提假设:当前无网络的目标服务器是A,我们需要先准备一台服务器B: 2.在B上面用yum先把软件安装完成. 3.然后用createrepo将B中的包拷贝出来,并传到A上(用U盘或者 ...
- nginx新增conf文件
说明 最近租了一台美国vps,通过nginx反向代理设置搞谷歌镜像.因为BxxDx搜索太垃圾.中间涉及到添加反向代理配置. 操作步骤 1.在conf.d文件下新增配置 cd /etc/nginx/co ...
- Git实战系列教程
介绍 本文详细记录了Git一系列核心概念和工作中常用的操作命令,通篇以实际出发拒绝过度理论,值得典藏:). 概念 版本管理系统 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的 ...
- win10下开启IIS部署网站
今天测试一个有关IIS的安全漏洞用了下win10下的IIS,记录一下,供网友参考. 1.启用IIS 依次点开: 控制面板-----程序----启用或关闭Windows功能 以下图片中打钩的地方全勾上. ...
- 栈溢出-ret2libc地址泄露笔记
作为一名初学者,在碰到很多攻击思路的时候会感觉很妙,比如gadget的构造,这题的sh参数截断. 1.首先分析程序架构和保护措施. 2.使用IDA开始判断程序是否具备最简单的栈溢出执行条件: ret2 ...
- [Android 逆向]旅行青蛙破解
1. 旅行青蛙V1.0,4 apk 安装到手机,可以运行 2. jadx 打开apk 存在这两个dll ,说明是 unity开发的 3. 导出Assembly-CSharp.dll, 使用DnSpy ...
- virtualapp启动流程源码分析
virtualapp启动流程分析 1. 首先是启动本身,执行Vpp 的attachBaseContext @Override protected void attachBaseContext(Cont ...
- 【Android 逆向】【攻防世界】app2
1. 手机安装apk,随便点击,进入到第二个页面就停了 2. jadx打开apk,发现一共有三个activity,其中第三个activity: FileDataActivity 里面有东西 publi ...
