方法一,基本方法
为每一份主题写一份 CSS 文件,批量替换颜色,例如 style.css、style.dark.css。如果需要切换模式的花,只需要 改变 link 指向的 CSS 文件路径。
方法二,使用 SCSS 等工具引入颜色变量
在方法一的基础上,生成多个 CSS 文件路径。
方法三,使用CSS自定义属性(变量)
CSS 原生变量支持,同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换(很麻烦哎~)。自定义属性在某个地方存储一个值,然后在其他许多地方引用它。
属性名需要以两个减号(--)开始,大小写敏感,属性值可以是任何有效的CSS值。和其他属性一样,自定义属性也是写在规则集之内的,一般定义在根伪类 :root 下:
element { --main-bg-color: brown; } :root { --main-bg-color: brown; } # 使用局部变量时用 var() 函数包裹 element { background-color: var(--main-bg-color); }
自定义属性备用值:
.one { color: var(--my-var, red); /* Red if --my-var is not defined */ background-color: var(--my-var, var(--my-background, pink)); /* pink if --my-var and --my-background are not defined */ background-color: var(--my-var, --my-background, pink); /* Invalid: "--my-background, pink" */ }
在 JavaScript 中获取或者修改 CSS 变量和操作普通 CSS 属性是一样的:
// 获取一个 Dom 节点上的 CSS 变量 element.style.getPropertyValue("--my-var"); // 获取任意 Dom 节点上的 CSS 变量 getComputedStyle(element).getPropertyValue("--my-var"); // 修改一个 Dom 节点上的 CSS 变量 element.style.setProperty("--my-var", jsVar + 4);
方法四,只使用JavaScript
这种方法太敷衍了
/* -------------------------------------------------------------------------- * * 夜间模式 */ function setDark() { var dark = [ 'img', 'video', 'iframe', 'embed', 'object', '[style*="background:url"]', '[style*="background-image:url"]', '[style*="background: url"]', '[style*="background-image: url"]', '[style*="background-image"][style*="image-set"]' ]; dark = 'body,' + dark.join(',') + '{filter:invert(100%);}' + dark.map(function (p) { return dark.map(function (p2) { return p + ' ' + p2 }).join(',') }).join(',') + '{filter:invert(0%);}' + 'body{background-color:rgba(0,0,0,0.9382)!important;}:root,html{background-color:rgba(0,0,0,0)!important;}'; var css = document.createElement('style'); css.classList.add('dark-style'); css.innerHTML = dark; document.body.appendChild(css); setCookie("isDark", "yes"); } // 判断是否已经设置过暗黑模式 var isDark = getCookie("isDark"); if (isDark == "yes") { setDark(); document.querySelector('.dark-switch-button').classList.add("dark"); } document.querySelector('.dark-switch-button').addEventListener("click", function () { if (this.classList.contains("dark")) { document.querySelector(".dark-style") && document.querySelector(".dark-style").remove(); setCookie("isDark", "no"); } else { setDark(); } this.classList.toggle("dark"); });
备注:图片可以使用CSS 滤镜 CSS3 filter brightness()降低暗度,https://javascript.net.cn/article?id=682
参考:
https://developer.mozilla.org/zh-CN/docs/Web/API/CSSRule
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_proerties
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。