帮助:使用CSS变量
在灰机,你可以为自己的站点编写CSS变量,使其能在之后的样式表(或style属性)中被重复使用,从而解决同一配色在样式表中出现多次产生的维护不便问题。
目前大多数主流浏览器均对CSS变量有良好支持。
灰机的主题编辑器会将部分配色写入CSS变量,因而可以直接使用。
用法
使用--*
语法声明一个变量。CSS变量遵从一般CSS属性的书写规范,因而必须位于一个选择器之下。
为了方便阅读,下文中使用gtr(即狗头人的缩写)作为变量前缀。
:root { --gtr-white:#C0C0C0; --gtr-border:2px solid #000000; }
上述例子中在根元素下生成了两组变量,所有:root
下的元素均可以使用这两个变量编写样式。
.avatarbox { background-color:var(--gtr-white); border:var(--gtr-border); }
变量可以是CSS属性值的全部或一部分,但无法连同属性名称一同定义(即不支持mixin)。
.avatarbox2 { border-left:4px solid var(--gtr-white); }
变量的继承
前文中提到了CSS变量需要位于一个选择器之下,此时该变量可被此选择器的所有子元素继承。因此,我们建议尽可能在:root
选择器下定义变量。
变量的级联性
如果同一个变量在不同的选择器内被定义,则实际使用时将根据级联关系的远近选择所应用的变量值。
:root { --gtr-font:Arial; } .mono { --gtr-font:Consolas; }
在以上的例子中,对于一般元素引用var(--gtr-font)
将输出Arial,而对于class="mono"
的元素及其子元素引用则会输出Consolas。
代码检查和代码高亮
CSS编辑器会对变量的定义和使用报错。这是由于CodeEditor插件较旧导致的。此时正常提交即可,不影响变量功能的使用。
使用主题编辑器配色
主题编辑器配色会将所选颜色输出到CSS变量中。下表中列出了大部分变量的名称和在当前站点的颜色。
下表中初始值为false的变量一开始不会被定义。用户在主题编辑器里修改了相应颜色后,该变量即变为可用。
此外,并非所有的预设变量都由主题编辑器定义,也并非所有主题编辑器定义的变量都会成为CSS变量。
下表中最后一列“实时颜色”直接在style属性中引用了相应的CSS变量(style="color:var(--main-base)"
)。将该表格复制到其他站点即可看到该站点中的配色。
变量名 | 主题编辑器位置 | 说明 | 实时颜色 |
---|---|---|---|
--main-base | 快捷配色-主配色 | --main-base | |
--bg | 快捷配色-辅配色-外部背景 | --bg | |
--bg-inner | 快捷配色-辅配色-内部背景 | --bg-inner | |
--a | 快捷配色-链接颜色 | --a | |
--sub-bg | 快捷配色-导航主色 | --sub-bg | |
--sub-a | 快捷配色-导航辅色 | --sub-a | |
--modal | 快捷配色-模板色调 | --modal | |
--brand-default | 语义配色-无语义 | --brand-default | |
--brand-primary | 语义配色-主要 | --brand-primary | |
--brand-success | 语义配色-成功 | --brand-success | |
--brand-info | 语义配色-信息 | --brand-info | |
--brand-warning | 语义配色-警示 | --brand-warning | |
--brand-danger | 语义配色-危险 | --brand-danger | |
--detail-bg | 区域细节-外部背景 | --detail-bg | |
--detail-inner-bg | 区域细节-内部背景 | --detail-inner-bg | |
--detail-color | 文字细节-文字 | --detail-color | |
--detail-h1 | 标题-H1 | 初始值false | --detail-h1 |
--detail-h2 | 标题-H2 | 初始值false | --detail-h2 |
--detail-h3 | 标题-H3 | 初始值false | --detail-h3 |
--detail-h4 | 标题-H4 | 初始值false | --detail-h4 |
--detail-h5 | 标题-H5 | 初始值false | --detail-h5 |
--detail-a | 文字细节-蓝链 | 初始值false | --detail-a |
--detail-new | 文字细节-红链 | 初始值false | --detail-new |
--detail-border | 文字细节-边框和分割线 | 初始值false | --detail-border |
--detail-secondary | 文字细节-辅助文字 | 初始值false | --detail-secondary |
--detail-toc-a | 文字细节-目录-未选中状态 | 初始值false | --detail-toc-a |
--detail-toc-a-hover | 文字细节-目录-选中状态 | 初始值false | --detail-toc-a-hover |
--detail-sub-bg | 导航-背景 | 初始值false | --detail-sub-bg |
--detail-sub-a | 导航-文字 | 初始值false | --detail-sub-a |
--detail-sub-a-hover-bg | 导航-文字选中 | 初始值false | --detail-sub-a-hover-bg |
--detail-sub-site-count | 导航-统计文字颜色 | 初始值false | --detail-sub-site-count |
--detail-contentsub | 文字细节-副标题 | 初始值false | --detail-contentsub |
--detail-bottom-bg | 页面底部-背景 | 初始值false | --detail-bottom-bg |
--detail-bottom-color | 页面底部-文字 | 初始值false | --detail-bottom-color |
--detail-quote-bg | 模板细节-quote-背景 | 初始值false | --detail-quote-bg |
--detail-quote-color | 模板细节-quote-文字 | 初始值false | --detail-quote-color |
--detail-quote-a | 模板细节-quote-链接 | 初始值false | --detail-quote-a |
--detail-quote-border | 不在主题编辑器中 | --detail-quote-border | |
--detail-wikitable-bg | 表格-背景 | 初始值false | --detail-wikitable-bg |
--detail-wikitable-color | 表格-文字 | 初始值false | --detail-wikitable-color |
--detail-wikitable-a | 表格-链接 | 初始值false | --detail-wikitable-a |
--detail-wikitable-border | 表格-边框 | 初始值false | --detail-wikitable-border |
--detail-infobox-bg | 模板细节-infobox-背景 | 初始值false | --detail-infobox-bg |
--detail-infobox-color | 模板细节-infobox-文字 | 初始值false | --detail-infobox-color |
--detail-infobox-a | 模板细节-infobox-链接 | 初始值false | --detail-infobox-a |
--detail-infobox-border | 模板细节-infobox-边框 | 初始值false | --detail-infobox-border |
--detail-infobox-title-bg | 模板细节-infobox-title-背景 | 初始值false | --detail-infobox-title-bg |
--detail-infobox-title-color | 模板细节-infobox-title-文字 | 初始值false | --detail-infobox-title-color |
--detail-infobox-item-title-bg | 模板细节-infobox-header-背景 | 初始值false | --detail-infobox-item-title-bg |
--detail-infobox-item-title-color | 模板细节-infobox-header-文字 | 初始值false | --detail-infobox-item-title-color |
--detail-infobox-item-label-bg | 模板细节-infobox-label-背景 | 初始值false | --detail-infobox-item-label-bg |
--detail-infobox-item-label-color | 模板细节-infobox-label-文字 | 初始值false | --detail-infobox-item-label-color |
--detail-infobox-item-label-a | 模板细节-infobox-label-链接 | 初始值false | --detail-infobox-item-label-a |
--detail-infobox-item-label-border | 模板细节-infobox-label-边框 | 初始值false | --detail-infobox-item-label-border |
--detail-infobox-item-detail-bg | 不在主题编辑器中 | --detail-infobox-item-detail-bg | |
--detail-infobox-item-detail-color | 不在主题编辑器中 | --detail-infobox-item-detail-color | |
--detail-infobox-item-detail-a | 不在主题编辑器中 | --detail-infobox-item-detail-a | |
--detail-infobox-item-detail-border | 不在主题编辑器中 | --detail-infobox-item-detail-border | |
--detail-navbox-bg | 模板细节-navbox-背景 | 初始值false | --detail-navbox-bg |
--detail-navbox-color | 模板细节-navbox-文字 | 初始值false | --detail-navbox-color |
--detail-navbox-a | 模板细节-navbox-链接 | 初始值false | --detail-navbox-a |
--detail-navbox-title-bg | 模板细节-navbox-title-背景 | 初始值false | --detail-navbox-title-bg |
--detail-navbox-title-color | 模板细节-navbox-title-文字 | 初始值false | --detail-navbox-title-color |
--detail-navbox-title-a | 模板细节-navbox-title-链接 | 初始值false | --detail-navbox-title-a |
--detail-navbox-group-bg | 模板细节-navbox-group-背景 | 初始值false | --detail-navbox-group-bg |
--detail-navbox-group-color | 模板细节-navbox-group-文字 | 初始值false | --detail-navbox-group-color |
--detail-navbox-group-a | 模板细节-navbox-group-链接 | 初始值false | --detail-navbox-group-a |
--detail-navbox-list-bg | 模板细节-navbox-list-背景 | 初始值false | --detail-navbox-list-bg |
--detail-navbox-list-color | 模板细节-navbox-list-文字 | 初始值false | --detail-navbox-list-color |
--detail-navbox-list-a | 模板细节-navbox-list-链接(活链) | 初始值false | --detail-navbox-list-a |
--detail-navbox-list-new | 模板细节-navbox-list-链接(死链) | 初始值false | --detail-navbox-list-new |
--detail-navbox-list-odd-bg | 模板细节-navbox-list-奇数背景 | 初始值false | --detail-navbox-list-odd-bg |
--detail-navbox-list-even-bg | 模板细节-navbox-list-偶数背景 | 初始值false | --detail-navbox-list-even-bg |
--detail-navbox-abovebelow-bg | 模板细节-navbox-abovebelow-背景 | 初始值false | --detail-navbox-abovebelow-bg |
--detail-navbox-abovebelow-color | 模板细节-navbox-abovebelow-文字 | 初始值false | --detail-navbox-abovebelow-color |
--detail-navbox-abovebelow-a | 模板细节-navbox-abovebelow-链接 | 初始值false | --detail-navbox-abovebelow-a |
相关技巧
- 变量可以反过来在style属性中声明,在样式表中引用,从而让页面来控制样式表中的特定属性。实际效果是一样的,但是有时候能玩儿出花来。
- 变量值可以不受CSS属性的取值限制。例如可以声明一个整数值,引用时通过CSS
calc()
函数更改为所需单位。- 例如声明
--intvar
为50,实际使用时写width:calc(1px * var(--intvar))
来获取50px的宽度样式。 - 访问这里获取关于calc()函数的文档。
- 例如声明
相关资料
- MDN:使用CSS变量
- 灰机workshop上有一个现成的CSS变量调色板可供使用。