当前位置: 首页 > Web前端 > CSS

CSS进阶CSS变量

时间:2023-03-30 13:47:48 CSS

前言基本使用自定义属性的第一步自定义属性的继承自定义属性的回调值有效性及无效值变量怎么办通过js获取的css变量值var()和rgba()配合实现变量复用Vue实战:通过颜色选择器切换热图主题颜色前言自定义属性(有时称为CSS变量或级联变量)是CSS作者定义的实体。这些实体在文档中可以重复使用。一般按照自定义属性的符号设置(例如--main-color:black;),然后使用var()函数。(例如color:var(--main-color))复杂的网站有很多CSS,通常有很多重复的值。例如,同一种颜色可能在数百个地方使用,从全局搜索一次性更换。自定义属性允许将此值存储在一个地方,然后在多个地方引用。另一个好处是语义可识别的符号。(语义标识符)例如,--main-text-color比#00ff00更容易理解,特别是如果这个值也存在于其他上下文中。自定义属性遵循级联,从它们的父级继承它们的值。基本用法定义自定义属性需要从--开始,然后属性的值需要是一个有效的CSS值。与任何其他属性一样,在规则集中定义它:element{--main-bg-color:brown;}请注意,规则集中的选择器定义了自定义属性可以使用的范围。一个常见的最佳实践是在:root伪类上定义它,以便它可以在HTML文档中全局访问::root{--main-bg-color:brown;}但是你也可以在中使用css变量本地范围。注意:css变量的属性名是区分大小写的,--my-color将被视为--my-color属性。上面提到,使用自定义属性需要在var()函数中使用。element{background-color:var(--main-bg-color);}使用自定义属性的第一步,在不同的类中应用相同的颜色。.one{颜色:白色;背景颜色:棕色;边距:10px;宽度:50px;高度:50px;显示:内联块;}.two{颜色:白色;背景色:黑色;边距:10px;宽度:150px;高度:70px;显示:内联块;}。三{颜色:白色;背景颜色:棕色;边距:10px;宽度:75px;}.four{颜色:白色;背景颜色:棕色;边距:10px;width:100px;}.five{background-color:brown;

1:
2:文本5-moretext
4:LoremIpsum
注意css中的复活部分,背景色多次使用到,可以声明一个css变量。但是,它通常用于:root::root{--main-bg-color:brown;}.one{color:white;背景色:var(--main-bg-color);边距:10px;宽度:50px;高度:50px;显示:内联块;}.two{颜色:白色;背景色:黑色;边距:10px;宽度:150px;高度:70px;:白色的;背景色:var(--main-bg-color);边距:10px;宽度:75px;}.four{颜色:白色;背景色:var(--main-bg-color);:10px;width:100px;}.five{background-color:var(--main-bg-color);}自定义属性的继承自定义属性被继承。这意味着如果给定元素没有属性值,它将继承父元素的值:.two{--test:10px;}.three{--test:2em;}
不要试图把它当作其他语言中的变量。css自定义属性的最终形式是一个计算值,所以不要试图在子样式中寻找这个变量。自定义属性只对匹配的选择器及其子元素有效,就像普通的css一样。当自定义属性的回调值使用var()时,可以使用回调函数。var()函数不仅可以用于默认标签,还可以用于自定义标签和ShadowDOM。注意:回退可用于提高兼容性。规则可以在下面的例子中看到:.two{color:var(--my-var,red);/*如果--my-var未定义则为红色*/}.three{background-color:var(--my-var,var(--my-background,pink));/*粉红色,如果--my-var和--my-background未定义*/}.three{background-color:var(--my-var,--my-background,pink);/*Invalid:"--my-background,pink"*/}注意:第二种方法可能会有性能问题,因为你要一层层往下看。第一个例子中的var(--my-var,red)也可以写成var(--my-var,red,blue)。与每个属性关联的经典CSS有效性概念在自定义属性时不是很有用。在解析自定义属性的值时,浏览器并不知道它们会被用在什么地方,所以几乎所有的值都必须被认为是有效的。不幸的是,这些有效值可以在可能没有意义的上下文中通过var()函数表示法获得。属性和自定义变量可能导致无效的CSS语句,从而产生在计算时有效的新概念。无效变量会发生什么检查是否有父元素可以继承默认初始值例如这个例子:

Thisparagraphisinitialblack.

:root{--text-color:16px;}p{颜色:蓝色;}p{颜色:var(--文本颜色);本例中p的颜色属性应用了var函数,但16px是无效的颜色属性值。所以找到了父元素,但是没有父元素,所以把这个颜色的值替换成默认的初始值。替换后,该属性恢复为默认属性。注意:虽然CSS属性/值对中的语法错误会导致该行被忽略。但是对于级联值,无效的替换(具有无效的自定义属性值)不会被忽略,从而导致值被继承。通过js获取的css变量值//从内联样式中获取变量element.style.getPropertyValue("--my-var");//从任意位置获取变量getComputedStyle(element).getPropertyValue("--my-var");//在内联样式中设置变量element.style.setProperty("--my-var",jsVar+4);var()和rgba()配合实现变量复用:root{--my-var:24,144,255;}.custom-bg-1{background-color:rgba(var(--my-var),0.5);}.custom-bg-2{background-color:rgba(var(--my-var),0.7);}vue实战:基于ColorPick通过颜色选择器切换热图的主题颜色iView组件,用户可以根据自己的喜好切换主题颜色。heat.scss:root{--heat-cell-bgc:24,144,255;}.custom-alpha-8-1{background-color:rgba(var(--heat-cell-bgc),0.125)!important;}.custom-alpha-8-2{background-color:rgba(var(--heat-cell-bgc),0.25)!important;}....custom-alpha-8-8{background-color:rgba(var(--heat-cell-bgc),1)!important;}colorFilter.vue参考链接:使用CSS自定义属性(变量)https://www.iviewui.com/compo...https://stackoverflow.com/que...https://stackoverflow.com/que...