CSS实现单选折叠菜单功能


Posted in HTML / CSS onNovember 01, 2021

不到万不得已的时候千万别引入前端UI框架,因为HTML5和CSS3已经能实现绝大多数的功能,比如上期的《CSS实现最简洁的开关》

CSS实现单选折叠菜单功能

而很多人的思维还停留在web2.0时代,用各种库来做UI,导致网页臃肿。今天教大家用纯css实现一个单选的折叠菜单,不需要JavaScript就能用。折叠菜单和标签页差不多,逻辑上都是一种单选面板,只不过折叠菜单一般是垂直堆叠的,标签页是横着排列。

CSS实现单选折叠菜单功能

标签页:

CSS实现单选折叠菜单功能

既然是单选的,就可以用<input type="radio">单选按钮来实现。首先这些单选按钮组的父元素用<form>,因为<form>可以监听按钮组的变化,同时还能通过name属性直接得到RadioNodeList列表和变化值,非常方便,不用设置其他的css选择器了。所以这个折叠菜单的html如下:

<form id="form">
    <input type="radio" name="collapse">
    <div></div>
 
    <input type="radio" name="collapse">
    <div></div>

    <input type="radio" name="collapse">
    <div></div>
</form>

给<form>设置id,这样可以直接通过window[id]找到它,每个<radio>的name属性要一致,然后通过form[name]得到单选组,form[name].value就是当前选中的按钮的value,也就是折叠按钮的标题,每个<radio>后面跟着一个<div>就是菜单展开的内容。但是<radio>默认是这样的:

CSS实现单选折叠菜单功能

还是先用appearance: none禁用如上图的默认样式,然后利用::before作为按钮左侧的名称(读取value属性),::after作为右侧的小箭头(字符>和v),通过:checked属性表示折叠状态。

input[type="radio"] {       
      cursor: pointer;
      appearance: none;
      display: block;
}
 
 
input[type="radio"]::before {
      content: attr(value);
}
 
 
input[type="radio"]::after {       
      float: right;
      content: ">";
}
 
 
input[type="radio"]:checked::after {
      content: "v";
}

对于<div>,默认是隐藏的,只有被选中的<radio>后面的<div>才显示。至于折叠动画的话,就看需求了,对我来说,没有动画会更清爽一点。

input[type="radio"] + div {
      display: none;
}
 
 
input[type="radio"]:checked + div {
      display: block;
}

以上就是基本布局,再加上一点其他样式,就成了:

CSS实现单选折叠菜单功能

但是由于<radio>的特性,无法反选,菜单展开后想要折叠只能点别的菜单项,当然这也没什么,如果非要实现反选菜单的功能,需要记录上次展开的菜单项,每次发生点击事件时,判断是否重复点击:

// for every <radio>
radio.onclick = () => {
  if (window.radio === radio) {
    input.checked = false;
    window.radio = null;
  } else window.radio = radio;
};

这样就实现了单选折叠菜单的反选能力:

CSS实现单选折叠菜单功能

对了,图中混乱的文字是原来文字被打乱的结果(隐私需要),可以通过下面的代码将一个字符串打乱:

string.split('').sort(() => Math.random() - 0.5).join('')

到此这篇关于CSS实现单选折叠菜单功能的文章就介绍到这了,更多相关CSS单选折叠菜单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
使用css3实现的tab选项卡代码分享
Dec 09 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
May 24 HTML / CSS
CSS3实现点击放大的动画实例代码
Feb 27 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
Apr 16 HTML / CSS
CSS3 实现弹跳的小球动画
Oct 26 HTML / CSS
video结合canvas实现视频在线截图功能
Jun 25 HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
Aug 22 HTML / CSS
深入探究HTML5的History API
Jul 09 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
Jun 22 HTML / CSS
详解Html5页面实现下载文件(apk、txt等)的三种方式
Oct 22 HTML / CSS
CSS 实现多彩、智能的阴影效果
May 12 HTML / CSS
CSS实现渐变色边框(Gradient borders)的5种方法
Mar 25 HTML / CSS
CSS 一行代码实现头像与国旗的融合
如何利用 CSS Overview 面板重构优化你的网站
基于HTML十秒做出淘宝页面
css 边框添加四个角的实现代码
HTML基础详解(下)
Oct 16 #HTML / CSS
HTML基础详解(上)
Oct 16 #HTML / CSS
CSS基础详解
You might like
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
PHP SOCKET编程详解
2015/05/22 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
Angular实现响应式表单
2017/08/04 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
python实现局域网内实时通信代码
2019/12/22 Python
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
《母鸡》教学反思
2014/02/25 职场文书
房产继承公证书
2014/04/09 职场文书
关于保护环境的建议书
2014/05/13 职场文书
小学社团活动总结
2014/06/27 职场文书
五年级作文之成长
2019/09/16 职场文书