JS+CSS案例:JS+CSS 实现漂亮时尚的样式表切换(换肤)功能

news2024/9/19 10:40:27

切换样式表可能有人不理解,但说到网站换肤,大概率就很多人都明白了。因为它是很多网站都已经有的功能了,最常见的就是很多网站的关灯模式。本文,就给大家分享一个我自己网站上使用的样式表切换的方案。

案例效果

目录结构

文件准备

JQ文件

准备jquery文件,因为我们要修改cookie,所以...

jquery-3.5.1.js

jquery.cookie.js

样式表

我们新建了一个文件夹叫做“CSS换肤小demo”,准备了7个CSS文件在里面。

其中,默认样式我们存放在default.css 中。其他6个样式表文件,都简单的写了两行样式表,为了演示换肤功能,只对页面背景色和h1标题的前景色进行了改变。

/* 准备换的样式表 */
body{ background: #xxx; } 
h1{ color: #xxxxxx; }

默认样式表default.css 的代码如下:

*{
    margin:0;
    padding: 0;
}
ul li{
    list-style-type: none;
}

.container{
  /* 居中 */
  position: fixed;  
  left: 50%;
  top: 40%;
  transform: translate(-50%, -50%); 
  width:50%;
}

h1{
    margin: 20px 0px;
    text-align: left;    
}
#skin li{   
    padding-left: 30px;
    position: relative;
    width: 20px;
    height: 20px;
    display: inline-block;
}
li::after{
    cursor: pointer;
    content: '';
    position: absolute;
    width: 20px;
    height: 20px;
    display: block;
    padding:3px; 
    top:0px;
    left: 0px;
    background: #999;
    border:2px solid #fff;
    border-radius: 10px;
    transition: all .5s; /* 按钮响应动画效果的持续时间 */
}

.skin_0::after{ background: #ddd; }
.skin_1::after{ background: #cc80ff; }
.skin_2::after{ background: #ff8080; }
.skin_3::after{ background: #66d9ff; }
.skin_4::after{ background: #ff884d; }
.skin_5::after{ background: #99ff66; }

li:hover::after{
    border-radius: 5px;
    transition: all .5s; /* 按钮响应动画效果的持续时间 */
}
.selected::after{     
    color:#fff;
    content: '✔';
}

HTML结构

在head标签内引用样式表文件和JQ文件:

/* 样式表文件 */
<link href="css/default.css" rel="stylesheet" type="text/css" />
<link href="css/skin_0.css" rel="stylesheet" type="text/css" id="cssfile" />

<!--   引入jQuery -->
<script src="jquery-3.5.1.js" type="text/javascript"></script>
<!--   引入jQuery.cookie库 -->
<script src="jquery.cookie.js" type="text/javascript"></script>

这里要注意引用顺序。

在body标签内构造列表

<div class="container">
        <h1>选择颜色</h1>
        <ul id="skin">
            <li id="skin_0" class="skin_0 selected" title="灰色" ></li>
            <li id="skin_1" class="skin_1" title="紫色"></li>
            <li id="skin_2" class="skin_2" title="红色"></li>
            <li id="skin_3" class="skin_3" title="蓝色"></li>
            <li id="skin_4" class="skin_4" title="橙色"></li>
            <li id="skin_5" class="skin_5" title="绿色"></li>
        </ul>     
    </div>

使用了有序列表来呈现用户选择的标签,用它模拟option效果。

切换样式表的JS

 //<![CDATA[
    $(function(){
        var $li =$("#skin li");
        $li.click(function(){
            switchSkin( this.id );
        });
        var cookie_skin = $.cookie( "MyCssSkin");
        if (cookie_skin) {
            switchSkin( cookie_skin );
        }
    });
    function switchSkin(skinName){
        //当前<li>元素选中
        $("#"+skinName).addClass("selected").siblings().removeClass("selected");  //去掉其它同辈<li>元素的选中
            $("#cssfile").attr("href","css/"+ skinName +".css"); //设置不同皮肤
            $.cookie( "MyCssSkin" ,  skinName , { path: '/', expires: 10 }); // 记录css样式表名,并设置过期时间。
    }
    //]]>

我们看一下调试:

当我们点击一个其他颜色的li以后:

本文提供的方案是经过本地服务器环境测试可用的。注意,测试需要在localhost环境测试,直接双击打开是只能测试切换功能,无法测试cookie存储的。

大功告成

其实很简单吧?路过的,喜欢的,帮我点个赞呗?!

本功能完整代码已上传,稍候通过后我来补链接。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu22.04 解决fabric 安装gradle构建的Java合约超时

问题 fabric安装gradle构建的Java合约时遇到合约代码编译超时问题&#xff0c;如下&#xff1a; $ peer lifecycle chaincode install cp.tar.gz Error: chaincode install failed with status: 500 - failed to invoke backing implementation of InstallChaincode: could …

宝塔面板上,安装rabbitmq

废话不多说&#xff0c;直接上干货&#xff01; 第一步&#xff1a;登录宝塔账号&#xff0c;在软件商店里搜索 第二步&#xff1a;点击设置 第三步&#xff1a;已经完成了&#xff0c;还看啥&#xff01;

3D魔方lua核心脚本制作

制作不易,请好好欣赏 U→R→F→D→L→B 废话不多说,上脚本 --魔方基本运行程序 --星空露珠优化脚本lua --主核心来自分享 --666 --[=[ #G4=I 1 # 2-----------2------------1 # | U1(0) U2(1) U3(2) | # …

Java:Thread类

Thread的常见构造方法 Thread的常见属性 ID 是线程的唯一标识,不同线程不会重复名称是在使用各种调试工具时会用到的状态表示线程当前所处的情况优先级高的线程理论上来说更容易被调度到关于后台线程,需要记住:JVM会在一个进程的所有非后台线程结束后,才会结束运行是否存活,即r…

基于python做镜像文件

用python制作网页镜像文件 第一步&#xff1a;初始化操作&#xff0c;用可用镜像源&#xff1a; mkdir -p /etc/docker tee /etc/docker/daemon.json <<-EOF { "registry-mirrors": ["https://hub.docker-alhk.dkdun.com/"] } EOF systemctl daemon…

攻击者劫持 Facebook 页面用于推广恶意 AI 照片编辑器

近日&#xff0c;有攻击者劫持了 Facebook 上的网页&#xff0c;诱骗用户下载一个合法的人工智能&#xff08;AI&#xff09;照片编辑器&#xff0c;但实际上他们真正下载的却是一个专门用以盗取用户的凭据信息窃取程序。 趋势科技的研究人员发现的这一恶意广告活动利用了人工…

ModuleNotFoundError: No module named ‘tqdm‘

报错信息&#xff1a; tqdm是一个快速、可扩展的Python进度条库&#xff0c;用于展示迭代器的长循环执行进度。 解决&#xff1a;通过以下命令安装 使用conda命令安装 conda install tqdm使用pip安装&#xff1a; pip install tqdm

临床数据科学中有关试验设计的四个关键要素

临床数据科学是现代医学研究中不可或缺的组成部分&#xff0c;通过科学的方法和统计分析工具来揭示医疗数据背后的规律和真相。试验设计是临床数据科学的核心环节&#xff0c;直接关系到研究结果的可靠性和科学性。 在过去几十年中&#xff0c;随机临床试验&#xff08;Randomi…

CNN卷积网络实现MNIST数据集手写数字识别

步骤一&#xff1a;加载MNIST数据集 train_data MNIST(root./data,trainTrue,downloadFalse,transformtransforms.ToTensor()) train_loader DataLoader(train_data,shuffleTrue,batch_size64) # 测试数据集 test_data MNIST(root./data,trainFalse,downloadFalse,transfor…

Project #0 - C++ Primer

知识点 1.pragma once C和C中的一个非标准但广泛支持的预处理指令&#xff0c;用于使当前源文件在单次编译中只被包含一次。 #pragma once class F {}; // 不管被导入多少次&#xff0c;只处理他一次2.explicit C中的一个关键字&#xff0c;它用来修饰只有一个参数的类构造函…

遇到突发事故,您是否能够应对自如?

近期发生的全球性大规模系统技术故障为我们敲响了警钟——仅仅依赖一朵公共云服务存在其固有的脆弱性。全球多地视窗系统因一款安全软件更新而宕机&#xff0c;出现“蓝屏”&#xff0c; 航空、医疗、传媒、金融、零售、物流等多个行业均受影响。这一事件凸显了对强大、多元化云…

forwardRef和useImperativeHandle到底能做啥

线上个官网例子 App.js import { useRef } from react; import MyInput from ./MyInput.js;export default function Form() {const ref useRef(null);function handleClick() {ref.current.focus();// This wont work because the DOM node isnt exposed:// ref.current.sty…

2024年必备技能:智联招聘岗位信息采集技巧全解析

随着大数据时代的发展&#xff0c;精准定位职业机会成为程序员求职的关键。本文将深入解析如何利用Python高效采集智联招聘上的岗位信息&#xff0c;助你在2024年的职场竞争中脱颖而出。通过实战代码示例&#xff0c;揭示网络爬虫背后的秘密&#xff0c;让你轻松掌握这一必备技…

【算法】双指针-OJ题详解1

双指针-OJ题 移动零&#xff08;点击跳转&#xff09;原理讲解代码实现 复写零&#xff08;点击跳转&#xff09;原理讲解代码实现 快乐数&#xff08;点击跳转&#xff09;原理讲解代码实现 盛最多水的容器&#xff08;点击跳转&#xff09;原理讲解代码实现 有效三角形的个数…

模式植物构建orgDb数据库 | 以org.Slycompersicum.eg.db为例

原文链接:模式植物构建orgDb数据库 | 以org.Slycompersicum.eg.db为例 本期教程 一步构建模式植物OrgDb数据库 source("../Set_OrgDb_Database.R")# 使用函数 Set_OrgDb_Database(emapper_file "out.emapper_tomato.csv", ## 输入的eggnog结果文件json_…

使用 MinIO、Langchain 和 Ray Data 构建分布式嵌入式子系统

嵌入子系统是实现检索增强生成所需的四个子系统之一。它将您的自定义语料库转换为可以搜索语义含义的向量数据库。其他子系统是用于创建自定义语料库的数据管道&#xff0c;用于查询向量数据库以向用户查询添加更多上下文的检索器&#xff0c;最后是托管大型语言模型 &#xff…

Stream 33

package Array.collection;import java.util.*; import java.util.stream.Stream;public class stream1 {public static void main(String[] args) {//、如何茯取List集合的Stream流?List<String> names new ArrayList<>();Collections. addAll(names,"方法…

超声波眼镜清洗机哪个品牌好?四款高性能超声波清洗机测评剖析

对于追求高生活质量的用户来说&#xff0c;眼镜的清洁绝对不能马虎。如果不定期清洁眼镜&#xff0c;时间久了&#xff0c;镜片的缝隙中会积累大量的灰尘和细菌&#xff0c;眼镜靠近眼部&#xff0c;对眼部健康有很大影响。在这种情况下&#xff0c;超声波清洗机显得尤为重要。…

现象:程序没问题,compile成功,在load时,提示prg.dll没找到

现象:程序没问题&#xff0c;compile成功&#xff0c;在load时&#xff0c;提示prg.dll没找到 解决方法&#xff1a;使用新的ATE电脑主机&#xff0c;导致的问题&#xff0c;又换回原来的电脑主机&#xff0c;问题解决。

数据结构与算法--【链表1】力扣练习 || 链表 / 移除链表元素

声明&#xff1a;本文参考代码随想录。 一、链表定义 1、概念 将线性表L(a0,a1,……,an-1)中各元素分布在存储器的不同存储块&#xff0c;称为结点&#xff0c;通过地址或指针建立元素之间的联系。 每一个结点由两部分组成&#xff1a;数据域和指针域。结点的data域存放数据…