0

0

CSS实现带自定义图标的深浅模式切换滑块教程

聖光之護

聖光之護

发布时间:2025-11-11 11:10:12

|

247人浏览过

|

来源于php中文网

原创

CSS实现带自定义图标的深浅模式切换滑块教程

本教程详细讲解如何利用css伪元素::before和background-image属性,为深浅模式切换滑块的“滑块手柄”部分集成自定义图标(如太阳和月亮)。通过修改css样式,我们能在保持原有平滑过渡动画的同时,实现根据模式状态自动切换图标,从而显著提升用户界面的视觉吸引力和交互体验。

核心概念:利用CSS伪元素定制滑块图标

前端开发中,常见的深浅模式切换滑块通常由一个隐藏的复选框(input[type="checkbox"])和可见的span元素(作为滑块轨道)以及其::before伪元素(作为可拖动的“滑块手柄”)组成。为了在滑块手柄上显示自定义图标(如浅色模式下的太阳和深色模式下的月亮),我们可以利用CSS的background-image属性直接作用于这些伪元素。当复选框的状态(checked)改变时,对应的CSS规则会被激活,从而切换::before伪元素的背景图片,实现图标的动态变化。

HTML 结构概览

首先,我们需要一个基础的HTML结构来承载深浅模式切换功能。这个结构包含一个主容器、一个标签(label)来包裹滑块,以及一个隐藏的复选框和可视化的滑块轨道。

这是一个示例文本,用于展示深浅模式切换效果。

  • main#main: 页面主要内容区域,其背景色和文字颜色会根据模式切换。
  • label.switch: 这是整个切换开关的容器,它将复选框和滑块轨道关联起来。
  • input[type="checkbox"]: 实际控制模式切换的元素,通过CSS将其隐藏。它的checked状态是控制模式和图标显示的关键。
  • span.slider: 可见的滑块轨道,其::before伪元素将作为我们定制图标的“滑块手柄”。

CSS 样式实现

CSS是实现滑块视觉效果和图标切换的核心。我们将从基础样式开始,然后重点讲解如何通过background-image集成自定义图标。

立即学习前端免费学习笔记(深入)”;

基础滑块样式

以下是实现一个基本圆形滑块的基础CSS样式。这些样式定义了滑块的尺寸、形状、过渡效果以及手柄的初始位置。

body {
  margin: 0;
  padding: 0;
}
main {
  height: 100vh;
  width: 100vw;
  transition: background 0.3s ease;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center; /* 居中滑块和文本 */
}
main p {
  font-family: sans-serif;
  transition: color 0.3s ease;
  margin-bottom: 20px; /* 调整文本与滑块的间距 */
}
/*TOGGLE COLORS*/
.dark {
  background: #545454;
  color: #efefef;
}
p {
  background: none !important; /* 确保p标签背景不被覆盖 */
}

/*SWITCH*/
.switch {
  position: relative;
  display: inline-block;
  width: 60px;
  height: 34px;
}

.switch input {
  opacity: 0; /* 隐藏原始复选框 */
  width: 0;
  height: 0;
}

.slider {
  position: absolute;
  cursor: pointer;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: #ccc; /* 浅色模式下的轨道背景色 */
  transition: 0.4s;
  border-radius: 30px; /* 圆角轨道 */
}

.slider:before {
  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  background-color: white; /* 默认手柄背景色,将被图片替换 */
  transition: 0.4s;
  border-radius: 50%; /* 圆形手柄 */
}

input:checked + .slider {
  background-color: #2196f3; /* 深色模式下的轨道背景色 */
}

input:checked + .slider:before {
  transform: translateX(26px); /* 手柄向右移动 */
}

集成自定义图标

现在,我们来修改.slider:before和input:checked + .slider:before的样式,用背景图片替换默认的颜色。

Devin
Devin

世界上第一位AI软件工程师,可以独立完成各种开发任务。

下载
/* ... (保留上述所有基础CSS样式) ... */

/* 修改 .slider:before 以显示浅色模式图标 */
.slider:before {
  /* 移除或注释掉 background-color: white; */
  /* background-color: white; */ 
  background-image: url("https://i.imgur.com/6NVOxEL.png"); /* 替换为您的太阳图标URL */
  background-size: contain; /* 确保图片完整显示在手柄内 */
  background-repeat: no-repeat; /* 防止图片重复 */
  background-position: center; /* 图片居中 */

  position: absolute;
  content: "";
  height: 26px;
  width: 26px;
  left: 4px;
  bottom: 4px;
  transition: 0.4s;
  border-radius: 50%;
}

/* 修改 input:checked + .slider:before 以显示深色模式图标 */
input:checked + .slider:before {
   background-image: url("https://i.imgur.com/L8cR8EK.png"); /* 替换为您的月亮图标URL */
   background-size: contain;
   background-repeat: no-repeat;
   background-position: center;

  transform: translateX(26px); /* 手柄向右移动 */
}

关键修改点解释:

  1. background-image: url(...): 这是设置图标的核心属性。您需要将示例URL替换为实际的太阳和月亮图标的路径。
  2. background-size: contain;: 确保背景图片完整地缩放到手柄内部,而不会被裁剪。
  3. background-repeat: no-repeat;: 防止图片在手柄内部重复平铺。
  4. background-position: center;: 将背景图片在手柄内居中显示。
  5. 移除background-color: 在.slider:before中,如果设置了background-color: white;,它会覆盖背景图片。因此,当使用图片时,应将其移除或注释掉。

JavaScript 交互逻辑

JavaScript负责处理复选框的点击事件,切换页面的深浅模式类,并将当前模式状态保存到localStorage中,以便在页面刷新后保持模式。

// 确保在DOM加载完成后执行
$(document).ready(function() {
  // 根据 localStorage 恢复模式状态
  if (localStorage.toggled === 'dark') {
    $('#main, p').toggleClass('dark', true);
    $('#checkBox').prop("checked", true);
  } else {
    $('#main, p').toggleClass('dark', false);
    $('#checkBox').prop("checked", false);
  }
});

function darkLight() {
  /* DARK CLASS */
  if (localStorage.toggled !== 'dark') {
    $('#main, p').toggleClass('dark', true);
    localStorage.toggled = "dark";
  } else {
    $('#main, p').toggleClass('dark', false);
    localStorage.toggled = "";
  }
}

说明:

  • 这段JavaScript代码主要通过jQuery的toggleClass()方法来为#main和p元素添加或移除dark类,从而改变页面的整体样式。
  • localStorage.toggled用于持久化用户的模式选择。
  • $(document).ready()中的代码确保页面加载时能根据localStorage中的状态正确设置模式和复选框的checked属性。
  • 请注意,此JavaScript代码无需为图标切换做任何修改,因为图标的切换完全由CSS基于input:checked状态来控制。

完整示例代码

将上述HTML、CSS和JavaScript整合,即可实现一个带有自定义图标的深浅模式切换滑块。




    
    
    带图标的深浅模式切换滑块
    
    


    

这是一个示例文本,用于展示深浅模式切换效果。

注意事项

  1. 图片资源管理: 示例中使用了Imgur的图片链接,但在实际生产环境中,强烈建议使用您自己托管的图片资源(例如,将图片存放在项目文件夹中,并使用相对路径),以避免因外部链接失效导致图标无法显示的问题。
  2. 图标尺寸与样式: 确保您选择的图标尺寸与滑块手柄(height: 26px; width: 26px;)相匹配,或者能够通过background-size和background-position进行良好调整。如果图标有边距或需要特殊对齐,可能需要微调background-position属性。
  3. 用户体验: 选择清晰、易于识别且符合深浅模式语义的图标,以提升用户体验。太阳和月亮图标是常见的选择,但您也可以根据品牌或应用风格进行定制。
  4. 可访问性: 对于更完善的解决方案,可以考虑为开关添加ARIA属性(如aria-label或aria-labelledby),以提高屏幕阅读器用户的可访问性。

总结

通过巧妙地利用CSS伪元素::before的background-image属性,我们能够轻松地为深浅模式切换滑块添加自定义图标。这种方法不仅保持了原有的平滑过渡动画,还极大地增强了用户界面的视觉吸引力和交互反馈。这种技术不仅限于深浅模式切换,也适用于任何需要根据状态变化显示不同图标的UI组件,为前端开发提供了强大的自定义能力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

150

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

395

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

504

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

182

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

120

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

176

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

38

2026.01.13

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 24.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号