动态替换 css 文件(并将新样式应用到页面)

2024-06-28

我有一个页面有<link>在加载名为 CSS 的标头中light.css。我还有一个名为dark.css。我想要一个按钮来交换页面的样式(css 文件中有 40 个选择器,有些在两个文件中不匹配)。

我怎样才能删除对light.css用JS删除所有应用的样式然后加载dark.css并应用其中的所有样式?我不能简单地重置所有元素,因为有些样式是通过不同的 css 文件应用的,有些是由 JS 动态生成的。有没有一种简单而有效的方法可以在不重新加载页面的情况下做到这一点? Vanilla JS 更好,但无论如何我都会使用 jQuery 进行后续处理,所以 jQ 也可以。


您可以将所有样式表包含在文档中,然后根据需要激活/停用它们。

在我阅读规范时,您应该能够通过更改其来激活备用样式表disabled属性从 true 到 false https://stackoverflow.com/revisions/19844757/5,但似乎只有 Firefox 可以正确执行此操作。

所以我认为你有几个选择:

Toggle rel=alternate

<link rel="stylesheet"           href="main.css">
<link rel="stylesheet alternate" href="light.css" id="light" title="Light">
<link rel="stylesheet alternate" href="dark.css"  id="dark"  title="Dark">

<script>
function enableStylesheet (node) {
  node.rel = 'stylesheet';
}

function disableStylesheet (node) {
  node.rel = 'alternate stylesheet';
}
</script>

设置和切换disabled

<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="light.css" id="light" class="alternate">
<link rel="stylesheet" href="dark.css"  id="dark"  class="alternate">

<script>
function enableStylesheet (node) {
  node.disabled = false;
}

function disableStylesheet (node) {
  node.disabled = true;
}

document
  .querySelectorAll('link[rel=stylesheet].alternate')
  .forEach(disableStylesheet);
</script>

Toggle media=none

<link rel="stylesheet" href="main.css">
<link rel="stylesheet" href="light.css" media="none" id="light">
<link rel="stylesheet" href="dark.css"  media="none" id="dark">

<script>
function enableStylesheet (node) {
  node.media = '';
}

function disableStylesheet (node) {
  node.media = 'none';
}
</script>

您可以选择样式表节点按 ID 获取元素 https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById, 查询选择器 https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector, etc.

(避免非标准<link disabled>。环境HTMLLinkElement#disabled https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement#Properties不过还好。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态替换 css 文件(并将新样式应用到页面) 的相关文章

  • 我以为我了解范围

    有人可以告诉我为什么 x 的最后一次记录等于0而不是1 我想因为它是在函数之外声明的 所以它具有全局范围 然后在函数中它的值设置为1并且该值将保持原样一个全球性的 我知道函数内的第一个 x 值是全局的 因为没有 var 关键字声明的任何变量
  • 为什么我的 css 在 IE9 中无法正确显示?

    几个小时前 我对我的 WordPress 主页做了一个小改动 现在 IE9 中出现了一些以前不存在的随机奇怪 CSS 问题 我曾使用 IE 的开发工具来尝试找出问题所在 但该工具与 firebug 相比实在是太糟糕了 而且问题只出现在 IE
  • Backbone.View:delegateEvents 未将事件重新绑定到子视图

    我已将这个问题分解为尽可能小的示例 即 它只是为了演示问题 不一定代表现实世界的场景 假设我有一个父视图 此处为 MainView 其中包含一个子视图 此处为 SubView 如果在任何时候我需要重新渲染父视图 从而重新渲染子视图 我就会丢
  • Firebase 停止监听 onAuthStateChanged

    从版本 3 0 0 开始 我很难删除身份验证状态更改侦听器 要根据文档启动侦听器 firebase auth onAuthStateChanged function user handle it 但是 我在文档中找不到任何涉及删除身份验证状
  • 将变量从一个 jsp 发送到另一个 jsp

    我有一个 JSP 文件jsp 1 jsp和另一个 JSP 文件jsp 2 jsp 我已经包括了jsp 2 jsp in jsp 1 jsp using 现在我需要某个元素上的单击事件 在该事件中 我想将字符串变量传输到包含的 jsp 中 假
  • 使用 CSS flexbox 重叠两个居中元素

    我试图将两个元素绝对居中于页面中间 一个元素在另一个元素后面 目的是让页面完全响应 中间有一个圆圈 后面有一个脉冲效果 这是一个小提琴 http jsfiddle net Fy8vD 2003 以下的 html body height 10
  • jquery 自动完成额外参数

    我使用 jquery 自动完成 我可以将 extraParams 传递给 asp net 中的 webservice 吗 我的 WebMethod 将如何获得它 您传递一个额外的参数函数 如下所示 controlId setOptions
  • jQuery - 页面上最宽的项目

    如何使用 jQuery 在网页上找到最宽的项目 在 css 中设置的宽度或作为属性 不会很快 但应该可以解决问题 var widest null each function if widest null widest this else i
  • jQuery 分钟和秒倒计时器

    我想创建一个 jquery 倒计时器 我尝试了以下代码 但它不起作用 我该怎么办 DEMO https jsfiddle net tbosn210 https jsfiddle net tbosn210 var interval setIn
  • 右侧对齐不浮动

    我有一个聊天小部件 我正在向其中添加一些样式 但是 我很难使 用户 聊天气泡与屏幕右侧对齐 当我使用向右浮动和向左浮动 另一侧 时 div 不再正确定位 因为它们似乎只是转到相对 div 的右侧 我希望它也能够附加 div 这将导致溢出 y
  • 检测滚动到 DIV 底部

    我想检测我是否到达了 div 的底部 我的 div 高度为 400px 溢出隐藏 我不知道正常高度但超过400px 我正在使用这段代码 但它不起作用 任何想法 if article txt scrollTop article txt hei
  • Javascript 或 Coffeescript 中的“Bucket Fill”算法

    我正在编写一个小coffeescript js应用程序 允许用户设计图标 16x16像素或32X32像素 该图标实际上是一个带有颜色单元的二维数组 单元格可以有颜色或为空 我希望用户能够使用 桶油漆 工具填充空白单元格 代表着 如果用户单击
  • 与基线和文本区域垂直对齐

    我试图让标签与文本区域中第一行文本的基线对齐 天真的尝试 div style display inline block div
  • 将 html

    我有一些服务器端代码当前支持 http 字节范围请求 没有任何问题 但是 我希望能够在将转码后的块发送到客户端之前使用 ffmpeg 即时转码视频文件 位于磁盘上 但 ffmpeg 要求我在获取字节时给它一个寻道时间范围来自客户 给定客户端
  • 如何捕获 google 地图的无效 API 密钥

    我有这个代码 如果密钥无效 则会弹出警报 但我想在这种情况下执行一些操作 但我不知道如何连接它 有任何想法吗 Google 不提供检查 Google 地图 API 密钥的外部方法 因此 您无法使用例如查询某些服务 此代码有效吗abcde12
  • CSS 悬停+背景图片

    我正在使用 HTML CSS 创建一个特殊的 UI 控件来模仿 Windows 7 控制面板按钮 到目前为止 我已经完成了正确的布局 现在我想为其添加一些修饰 如图所示 当您将鼠标悬停在按钮上时 会出现渐变 http m cncfps co
  • 使用 Python 和 lxml 从 HTML 中删除类属性

    Question 如何使用 python 和 lxml 从 html 中删除类属性 Example I have p class DumbClass Lorem ipsum dolor sit amet consectetur adipis
  • React Native:当您的应用程序关闭时是否有回调函数?

    我有一个 setInterval 即使您关闭 而不是退出 应用程序也会继续运行 我想在我的应用程序关闭或设备进入睡眠状态时调用一个函数 以便清除 setInterval AppState 是你的朋友 看看AppState 的文档 https
  • 如何水平和垂直对齐内联块

    什么是最好 最干净的使用CSS对齐 dates div位于标题的右侧 垂直于中间 I tried float right 但这不允许vertical align 我想避免使用浮动 所以我使用inline block 并使用相对定位 有没有更
  • 将画布下载为 PNG 图像[重复]

    这个问题在这里已经有答案了 当我尝试将画布下载为 PNG 图像时 浏览器会在新页面中打开该图像 但不下载它 我的下载代码 btnScaricaEtichetta click function console log Download loc

随机推荐

  • 布尔表达式编译错误

    这是一段 Java 代码 static boolean a gets false static boolean b static boolean c public void printA boolean bool a true b true
  • 在 MVC 中提交后保留密码文本框值

    我正在 MVC 应用程序中工作 在我们的应用程序中 我们有一个获取用户详细信息 客户详细信息 的表单 例如 温和 名字 姓氏 密码等 提交后 在控制器本身中 我们验证输入的 MailID 是否已被注册 如果已经注册意味着 返回带有错误消息的
  • 主键和代理键有什么区别?

    我用谷歌搜索了很多 但没有找到带有示例的确切直接答案 任何例子都会更有帮助 主键是表中的唯一键 您选择它可以最好地唯一标识表中的记录 所有表都应该有一个主键 因为如果您需要更新或删除一条记录 您需要知道如何唯一标识它 代理键是人工生成的键
  • 使用具有 ThreadStatic 属性的并行扩展。会不会泄漏内存?

    我相当频繁地使用并行扩展 而且我刚刚遇到了一种情况 使用线程本地存储可能是明智的 允许工作线程重用对象 因此 我正在查看 ThreadStatic 属性 该属性将静态字段 变量标记为每个线程具有唯一值 在我看来 在没有任何 PE 线程重用保
  • 如何重新合并已经合并的分支?

    我有一个类似于下面的提交图 提交标记为 代表大量提交 A B C D lt old feature branch E F G lt master 合并提交 E 未正确完成 C 中的一些更改 不是全部 已丢失 如何重做合并以将更改重新引入当前
  • 在 springfox-swagger-ui 中渲染 html

    我最近更新了运行 springfox swagger2 和 springfox swagger ui 2 5 0 的应用程序以使用版本 2 6 0 应用程序的API文档使用 li b and br 标签 在 2 5 0 中可以正确呈现 但在
  • Safari 无法从缓存中检索 mp4 视频,并且有时在下载相同资源时超时

    我正在运行一个显示全屏视频故事的 VueJS 应用程序 我不会在故事中创建与媒体数量一样多的标签 我只是在每次播放新视频时更改组件视频源 但看起来 Safari 桌面版和移动版 在加载后仍然不会缓存 HTML 视频 当我再次播放以前的媒体时
  • 仅复制输入 CSV 中的某些列?

    我在数据库中创建了一个名为 con 的表 其中有两列名为 date 和 kgs 我正在尝试从复制到此位置 H Sir data reporting hi rpt 的 hi rpt 文件中提取数据 并希望将值存储在数据库的 con 表中 我在
  • Web API 帮助页面显示每个方法的两个版本

    如何避免帮助页面显示我的方法的两个版本 正如你所看到的 我已经设置了一条自定义路线 api property search finnId 但我不希望使用查询参数的那个出现在 帮助 页面中 有办法解决这个问题吗 我正在使用 ASP NET F
  • 在访问中禁用 msgbox

    我正在尝试在 MS Access 2003 SP3 中制作一个小表单 我使用了其他人制作的一些函数 这些函数中包含 msgbox 我想在运行表单时禁用 msgbox Access 中是否可以禁用 msgbox 我创建了名为 msgbox 的
  • VBA Excel - 如何在 Excel 数组中显示不相等的值

    所以目前我在Excel中有两个数据输入 数据1和数据2 我需要一个公式或某种形式来显示结果 目前这是一个手动过程 使用方法Filter 功能 Function test ByVal a ByVal b Optional Delim As S
  • OSError: [Errno 13] 权限被拒绝: '/dev/ttyACM0' - 使用 pyserial 从 Python 到 Arduino

    环境 Linux 薄荷 17 1 Python 2 7 pyserial 2 7 Arduino UNO rv3 期望的行为 我正在尝试将三个值从 Python 应用程序发送到 Arduino 从终端执行以下操作时它会起作用 python
  • EACCES:尝试在节点项目中使用 docker 卷时,mkdir 权限被拒绝...

    我试图使用 docker Volume 运行节点项目容器 docker run p 3000 3000 v myapp node modules v pwd myapp batzu frontend 并得到一个错误 EACCES permi
  • 无法获取 Skype for Business 的应用程序 URL

    我尝试按照此处的说明在 Skype for Business Online 中使用 REST API https msdn microsoft com EN US library office mt590891 v office 16 as
  • 格式化的百分比值不是预期的

    percentOne double faceOne 100 0 double amount NumberFormat fmt NumberFormat getPercentInstance fmt format percentOne If
  • 删除全屏高图表的固定高度

    我有一个带有两个 y 轴的高图 一个轴位于另一轴下方 两者都有固定的高度 我的问题是 当我将其全屏显示时 图表仍然只采用这个原始高度 通常它会占据整个高度 无论如何 我可以在全屏中获得全高元素吗 Highcharts chart conta
  • GCC 中的枚举器属性

    GCC s 在线文档 https gcc gnu org onlinedocs gcc Enumerator Attributes html声称它支持枚举器属性 GCC 允许在枚举器上设置属性 然后它给出了使用此类属性的代码示例 enum
  • 是否可以将依赖注入与 Umbraco 7 ContentService 事件处理程序一起使用?

    我将 Umbraco 7 1 1 与 MVC 项目一起使用 并将其配置为使用依赖项注入 在我的例子中为 Castle Windsor 我还使用 NServiceBus 来发送消息等 并且运行得很好 我现在尝试挂钩 ContentServic
  • 使用 Symfony 和 VichUploader 将 base64 图像转换为图像文件

    在 symfony 中 我有一个实体Program 其具有属性image 上传图像 命名它们并将它们放入正确的目录中是通过VichUploaderBundle 该实体看起来像这样 NOTE This is not a mapped fiel
  • 动态替换 css 文件(并将新样式应用到页面)

    我有一个页面有在加载名为 CSS 的标头中light css 我还有一个名为dark css 我想要一个按钮来交换页面的样式 css 文件中有 40 个选择器 有些在两个文件中不匹配 我怎样才能删除对light css用JS删除所有应用的样