
本教程将指导您如何使用纯 css 和 scss 创建一个带有动态 svg 图标的主题切换器。通过隐藏原生复选框并利用其 `:checked` 伪类,结合 css 兄弟选择器和后代选择器,我们将实现根据切换状态显示或隐藏不同 svg 图标的功能,从而打造一个交互式且视觉吸引力强的主题切换组件。
在现代网页设计中,主题切换器(如深色/浅色模式切换)已成为常见功能。实现这类组件通常涉及 J*aScript,但通过巧妙运用 CSS,我们也能打造一个纯 CSS 驱动、响应用户交互的切换器,尤其是在需要根据状态切换图标时。本教程将深入探讨如何利用隐藏的复选框、CSS 伪类和选择器,以及 SVG 图标,构建一个功能完善的主题切换组件。
首先,我们需要一个语义化的 HTML 结构来承载切换器。核心思想是使用一个 label 元素包裹一个隐藏的 input[type="checkbox"],并利用 label 来触发复选框的状态改变。图标(这里是太阳和月亮 SVG)则嵌套在另一个容器中。
察言观数AskTable
企业级AI数据表格智能体平台
78
查看详情
<label class="ThemeToggler" for="ThemeTogglerID">
<input id="ThemeTogglerID" class="ThemeTogglerInput" type="checkbox" data-toggle-theme="dark,light" data-act-class="ACTIVECLASS" checked />
<div class="ThemeTogglerFill" >
<div class="SunIcon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" >
<!-- 太阳图标路径 -->
<path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z" />
<path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z" />
<path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z" />
<path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z" />
<path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z" />
<path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z" />
<path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z" />
<path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z" />
<path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z" />
</svg>
</div>
<div class="MoonIcon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<!-- 月亮图标路径 -->
<path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z" />
</svg>
</div>
</div>
</label>为了提高代码的可维护性和可读性,我们使用 SCSS 预处理器,并定义一系列变量来管理尺寸、颜色等属性。
$width: 80px;
$height: 44px;
$border-radius: 50px;
$circle-size: $height - 4px; // 切换滑块的尺寸
$icon-size: $circle-size - 2px; // 图标的尺寸
$neutral: red;
$secondary: white;
$base-100: white;
$base-200: gray;
$base-300: black;
$base-content: white;
// 切换器容器样式
.ThemeToggler {
width: $width;
height: $height;
flex-shrink: 0;
border-radius: $border-radius;
background-color: $neutral;
bo
rder: 1px solid $base-100;
display: inline-block;
cursor: pointer;
&:hover {
border-color: $secondary;
}
}
// 切换滑块的容器及伪元素
.ThemeTogglerFill {
position: relative; // 为内部图标和伪元素提供定位上下文
&:before {
content: "";
position: absolute;
top: 1px;
left: 1px;
height: $circle-size;
width: $circle-size;
background: $base-300;
box-shadow: 1px 0px 4px rgba(0, 0, 0, 0.15);
border-radius: $border-radius;
transition: background-color 0.25s, transform 0.25s; // 添加过渡效果
}
}
// 图标基础样式混入
@mixin icon {
position: absolute; // 将图标绝对定位
display: block;
width:以上就是CSS 纯粹实现:基于复选框状态的 SVG 图标切换式主题切换器教程的详细内容,更多请关注其它相关文章!
# javascript
# java
# html
# svg
# 伪元素
# 处理器
# css
# 也能
# 如皋网站关键词优化
# 餐饮加盟seo优化获客
# 长春正规seo
# 师宗创新网站建设概况
# 关键词排名优化威辛hfqjwl做词
# 上海机场 网站建设
# 抖音推广的营销方法
# 义马网站优化推广
# 网站推广技能心得
# 麻城外贸网站推广多少钱
# 是在
# 显示效果
# 滑块
# 单选框
# 选择器
# 表单
# 复选框
# 切换器
# red
# 绝对定位
# 网页设计
相关文章:
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
Composer如何解决json扩展缺失的错误
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
CSS子选择器:如何区分并样式化嵌套列表的子层级
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
SteamMachine定价或为699美元 大家想入手吗?
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
反效果?《战地6》免费试玩开启后玩家数不升反降
Django通过AJAX异步上传图片并保存至模型的完整指南
电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】
深入理解J*aScript中的B样条曲线与节点向量生成
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略
怎么在浏览器上运行HTML文件_浏览器运行HTML文件技巧【技巧】
不同用户不同价格! 索尼开启账户个性化定价测试
J*a 递归快速排序中静态变量的状态管理与陷阱
4399免费游戏网址入口 4399小游戏免费入口点开即玩
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
如何在PHP中实现基于MySQL的动态分页查询
在J*a项目里如何构建对象之间的契约_接口约束的实际落地
HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
外媒分析《GTA6》定价:卖100美元可以但真没必要!
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
基于多条件高效更新SQL表:利用CASE表达式优化业务逻辑
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
顺丰快件物流信息 官方网站查询入口
mcjs网页版在线存档 mcjs云存档登录入口
2025-2030年全球乘用车销量预测:新能源成增长主力
J*aScript中安全有效地处理localStorage字符串数据
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
海棠账号登录入口_登录海棠账户同步阅读记录
响应式图片在网页设计中的正确实现方法
Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
极兔快递快件信息查询系统 极兔快递官网运单号追踪
Shopware订单中获取产品自定义字段的实用指南
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版
如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略
*请认真填写需求信息,我们会在24小时内与您取得联系。