新闻中心
如何用css :checked与::after实现切换图标效果
答案是使用CSS的:checked与::after可实现无JS的图标切换,通过隐藏输入框,利用label的伪元素绘制三线图标,选中时用transform和box-shadow变化为叉形。

使用 CSS 的 :checked 与 ::after 可以在用户点击复选框或单选按钮时实现图标的切换效果,常用于自定义开关、菜单图标(如汉堡变叉)等场景。核心思路是隐藏默认的输入框,用伪元素展示自定义图标,并根据选中状态改变样式。
1. 基本结构准备
先创建一个带 ID 关联的 checkbox 输入框和一个用于显示图标的标签:
<input type="checkbox" id="toggle-icon"> <label for="toggle-icon"></label>
这个 label 将作为图标的载体,通过 CSS 控制其 ::after 伪元素来显示不同图形。
2. 隐藏默认输入框并设置图标容器
隐藏 input 并为 label 设置基本样式,使其成为一个可点击的图标区域:
#toggle-icon {
display: none;
}
label {
display: block;
width: 24px;
height: 24px;
position: relative;
cursor: pointer;
}
3. 使用 ::after 定义默认图标(如“—”)
通过伪元素绘制一个简单的三线图标(类似汉堡菜单):
label::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 70%;
height: 2px;
background: #000;
box-shadow: 0 6px 0 #000, 0 -6px 0 #000;
transition: all 0.3s ease;
}
这里用 background 和 box-shadow 绘出三条横线。
秀脸FacePlay
一款集成AI换脸、照片跳舞等多种AI特效玩法的App
124
查看详情
4. 切换状态:利用 :checked 改变 ::after 样式
当 checkbox 被选中时,让图标变为“×”形状:
#toggle-icon:checked + label::after {
background: transparent;
box-shadow: none;
transform: translate(-50%, -50%) rotate(45deg);
width: 80%;
height: 2px;
}
#toggle-icon:checked + label::before {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) rotate(-45deg);
width: 80%;
height: 2px;
background: #000;
z-index: -1;
}
因为 ::after 已被占用,可以添加 ::before 来画第二条斜线,组成“×”。未选中时只显示三横,选中后三横消失,两条斜线出现。
5. 添加动画更流畅
加上过渡效果让切换更自然:
label::after,
label::before {
transition: all 0.3s ease;
}
基本上就这些。通过控制伪元素的 content、transform、background 等属性,配合 :checked 状态,就能实现无 J*aScript 的图标切换。
以上就是如何用css :checked与::after实现切换图标效果的详细内容,更多请关注其它相关文章!
# 已被
# 福建抖音seo团队
# 玉林强大seo营销
# 鱼虾网seo
# 信息科技网站建设
# 山西公司网站建设的释义
# 湖南网站建设小程序单价
# 搜索关键词排名优化分析
# 曲靖个人网站建设哪家好
# 南充网站托管推广服务
# 河间大型网站建设名称大全
# 中文网
# 相关文章
# css
# 就能
# 选择器
# 两种类型
# 中不
# 自定义
# 如何用
# 输入框
# 伪元素
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
React/Next.js中实现列表项的动态选择与移动
React Hooks最佳实践:动态组件状态管理的组件化方案
高德地图公交到站提醒失败如何解决 高德提醒权限设置
Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程
Composer如何在生产环境安全地执行composer update
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
Python实时数据流中的动态最值查找策略
使用Python高效删除Word宏并转换DOCM为DOCX格式
内存疯狂猛猛涨价:主板销量直接腰斩!
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
押井守高度称赞《辐射4》:玩了八年都停不下来!
AO3镜像入口大全 AO3网页版内容访问全集
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
抖音网页版怎么|直播|_抖音网页版开播操作指南
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
优化Log4j2控制台输出性能:解决异步日志瓶颈
Pandas DataFrame 多条件优先级排序与排名
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
铃兰之剑为这和平的世界希里技能组及加点推荐
在J*a中如何在J*a中使用异常机制记录错误日志_异常日志实践经验
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
Pyrogram与g4f集成:异步编程实践与常见错误解决
网站内容防复制粘贴的实现策略与局限性
在Runstone环境中高效处理TasteDive API的JSON数据
j*a toString()的覆盖
ArrayList与LinkedList操作复杂度详解:遍历与修改
Golang如何优化CPU绑定任务分配策略_Golang CPU任务分配优化实践
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
微信语音通话掉线如何解决 微信语音通话稳定优化方法
在Typer应用中优雅地处理和重组任意命令行参数
优化大型XML文件解析:基于Python流式处理的内存高效方案
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
极兔快递快件信息查询系统 极兔快递官网运单号追踪
excel如何生成目录 excel一键生成工作表目录超链接
mc.js免安装版 mc.js一键畅玩入口
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
PDF文件体积过大处理_PDF压缩技巧详解
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!
必由学网页版入口 必由学官方平台直接访问
夸克浏览器网页版最新地址 夸克浏览器官方入口合集


2025-10-13
浏览次数:次
返回列表