原文链接 | https://www.sitepoint.com/css-theming-custom-properties-javascript/
在本教程中,我们将使用 CSS自定义属性(也称为CSS变量)来为简单的HTML页面实现主题切换。 我们将创建暗黑和明亮的示例主题,然后编写JavaScript 以在用户单击按钮时在两者之间切换。
如果你以前没接触过,请先阅读CSS变量(自定义属性)实用指南及注意事项这篇文章
就像在典型的编程语言中一样,变量用于保存或存储值。 在CSS中,它们通常用于存储颜色,字体名称,字体大小,长度单位等。然后可以在样式表中的多个位置引用和重用它们。 大多数开发人员都会引用 “CSS变量” ,但官方名称是 自定义属性。
CSS自定义属性可以修改可在整个样式表中引用的变量。 以前,只有使用Sass等CSS预处理器才能实现这一点。
在创建动态主题示例之前,让我们了解自定义属性的基本基础知识。
自定义属性 是一个名称以两个连字符( - )开头的属性,如 --foo。 定义后可以使用 var() 引用的变量。 让我们考虑这个例子:
CSS 代码:
:root {
--bg-color: #000;
--text-color: #fff;
}
在:root选择器中定义自定义属性意味着它们可以作用于全局文档中所有元素。:root是一个CSS伪类,它匹配文档的根元素 – 元素。它类似于 html 选择器,但具有更高的优先级。
您可以在文档中的任何位置访问 :root 中的自定义属性的值:
CSS 代码:
div {
color: var(--text-color);
background-color: var(--bg-color);
}
您还可以在CSS变量中包含回退值。例如:
CSS 代码:
div {
color: var(--text-color, #000);
background-color: var(--bg-color, #fff);
}
如果未定义自定义属性,则使用其回退值代替。
除了 :root
或 html
选择器之外的CSS选择器内定义的自定义属性使变量可用于匹配元素及其子元素。
诸如 Sass 之类的CSS预处理器通常用于辅助前端Web开发。预处理器的其中一个有用功能就包括变量。但是Sass变量和CSS自定义属性之间有什么区别?
CSS自定义属性在现代浏览器中进行本机解析。 预处理器变量需要编译到标准CSS文件中,并且所有变量都转换为值。
JavaScript可以访问和修改自定义属性。 预处理程序变量编译一次,只有它们的最终值在客户端上可用。
让我们从为项目创建一个文件夹开始:
BASH 代码:
$ mkdir css-variables-theming
接下来,在项目的文件夹中添加一个 index.html
文件:
BASH 代码:
$ cd css-variables-theming
$ touch index.html
并添加以下内容:
HTML 代码:
type="button" value="Light/Dark" id="toggle-theme" /> class="content">Lorem Ipsum is simply dummy text of the printing and typesetting industry... class="title">What is Lorem Ipsum?
Copyright 2018
我们使用 现在让我们为页面添加样式。在 HTML 代码: * { margin: 0; } html{ height: 100%; } body{ height: 100%; font-family: -apple-system, BlinkMacSystemFont“Segoe UI”, “Roboto”, “Oxygen”, “Ubuntu”, “Cantarell”, “Fira Sans”, “Droid Sans”, “Helvetica Neue”,sans-serif; display: flex; flex-direction: column; } nav{ background: hsl(350, 50%, 50%); padding: 1.3rem; color: hsl(350, 50%, 10%); } .container{ flex: 1; background:hsl(350, 50%, 95%); padding: 1rem; } p.content{ padding: 0.7rem; font-size: 0.7rem; color: hsl(350, 50%, 50%); } .container h2.title{ padding: 1rem; color: hsl(350, 50%, 20%); } footer{ background: hsl(350, 93%, 88%); padding: 1rem; } input[type=button] { color:hsl(350, 50%, 20%); padding: 0.3rem; font-size: 1rem; } CSS3 HSL(色调,饱和度,亮度)表示法用于定义颜色。 色调是色环上的角度,示例使用350表示红色。 通过更改饱和度(颜色百分比)和亮度(百分比),所有页面颜色都使用不同的变化。 使用HSL,我们只需更改色调值,即可轻松尝试主题的不同主色。 我们还可以使用CSS变量作为色调值,并通过更改样式表中的单个值或使用JavaScript动态更改颜色主题来切换颜色主题。 这是页面的屏幕截图: 我们将这个例子放到在线的 CodePen 中演示: 让我们使用CSS变量来保存页面中所有颜色的色调值。在 标签添加一个导航栏,页脚和容器
为我们的HTML页面编写基本CSS
中使用内联
标记的同一文件中添加以下CSS样式: