【html】如何利用id选择器实现主题切换

今天给大家介绍一种方法来实现主题切换的效果

效果图:

源码:

html 复制代码
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            font-size: 25px;
            border: 2px solid #000;
            line-height: 200px;
            text-align: center;
        }
        #item1 .box {
            color: red;
            border-color: blue;
        }
        #item2 .box {
            color: orangered;
            background-color: aquamarine;
            border-color: green;
            border-radius: 30px;
        }
        #item3 .box {
            color: purple;
            background-color: yellow;
            border-color: pink;
            border-radius: 50%;
        }
    </style>
</head>
<body>

    <!-- 当前显示的box -->
    <div id="item2">
        <div class="box">
            内容
        </div>
    </div>

    <!-- 其他主题的box,隐藏起来 -->
    <div id="item1" style="display: none;">
        <div class="box">
            内容
        </div>
    </div>
    <div id="item3" style="display: none;">
        <div class="box">
            内容
        </div>
    </div>

    <!-- 切换主题的按钮(示例) -->
    <button onclick="switchTheme('item1')">主题1</button>
    <button onclick="switchTheme('item2')">主题2</button>
    <button onclick="switchTheme('item3')">主题3</button>

    <script>
        function switchTheme(themeId) {
            // 隐藏所有主题的box
            var themes = document.querySelectorAll('[id^="item"]');
            themes.forEach(function(theme) {
                theme.style.display = 'none';
            });

            // 显示选中的主题的box
            var selectedTheme = document.getElementById(themeId);
            selectedTheme.style.display = 'block';
        }
    </script>

</body>
</html>

源码解析:

可以通过修改最外层的ID选择器来模拟修改主题。在你的例子中,.box 类有两个不同的样式定义,一个应用于 #item1 .box,另一个应用于 #item2 .box。这些样式根据它们所在的父元素的ID(item1item2)来应用。

要模拟修改主题,你可以创建多个具有不同ID的父元素,并为每个父元素定义不同的.box样式。然后,你可以通过切换不同ID的父元素来模拟主题更改。

例如,你可以添加一个新的父元素,如 #item3,并为其.box类定义不同的样式:

在这个例子中,我添加了另外两个带有ID item1item3 的父元素,并为它们各自的.box类定义了不同的样式。初始时,只有item2是可见的,其他两个是隐藏的。

我还添加了三个按钮,用于切换主题。当点击按钮时,switchTheme 函数会被调用,它隐藏所有主题的.box,并只显示所选主题的.box

这样,你就可以通过点击按钮来模拟修改主题了。当然,在实际应用中,你可能会有更复杂的主题和样式,以及更优雅的方式来管理这些主题的切换,比如使用JavaScript类、CSS变量或者CSS预处理器。

相关推荐
Mr.Jessy20 分钟前
JavaScript高级:构造函数与原型
开发语言·前端·javascript·学习·ecmascript
白兰地空瓶2 小时前
🚀你以为你在写 React?其实你在“搭一套前端操作系统”
前端·react.js
爱上妖精的尾巴3 小时前
6-4 WPS JS宏 不重复随机取值应用
开发语言·前端·javascript
似水流年QC3 小时前
深入探索 WebHID:Web 标准下的硬件交互实现
前端·交互·webhid
陪我去看海3 小时前
测试 mcp
前端
speedoooo4 小时前
在现有App里嵌入一个AI协作者
前端·ui·小程序·前端框架·web app
全栈胖叔叔-瓜州4 小时前
关于llamasharp 大模型多轮对话,模型对话无法终止,或者输出角色标识User:,或者System等角色标识问题。
前端·人工智能
三七吃山漆4 小时前
攻防世界——wife_wife
前端·javascript·web安全·网络安全·ctf
用户47949283569154 小时前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
GISer_Jing5 小时前
前端营销技术实战:数据+AI实战指南
前端·javascript·人工智能