# CSS变量 **Repository Path**: zockbell/cssVar ## Basic Information - **Project Name**: CSS变量 - **Description**: CSS变量的正确使用方式 - **Primary Language**: CSS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-05-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CSS变量 > 当微软宣布 Edge 浏览器将支持 CSS 变量。这个重要的 CSS 新功能,所有主要浏览器已经都支持了。本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大。 ## 1. 变量的声明 声明变量的时候,变量名前面要加两根连词线(--)。 ``` body { --foo: #7F583F; --bar: #F7EFD2; } ``` 上面代码中,body选择器里面声明了两个变量:--foo和--bar。 它们与color、font-size等正式属性没有什么不同,只是没有默认含义。所以 CSS 变量(CSS variable)又叫做"CSS 自定义属性"(CSS custom properties)。因为变量与自定义的 CSS 属性其实是一回事。 你可能会问,为什么选择两根连词线(--)表示变量?因为$foo被 Sass 用掉了,@foo被 Less 用掉了。为了不产生冲突,官方的 CSS 变量就改用两根连词线了。 各种值都可以放入 CSS 变量。 ``` :root{ --main-color: #4d4e53; --main-bg: rgb(255, 255, 255); --logo-border-color: rebeccapurple; --header-height: 68px; --content-padding: 10px 20px; --base-line-height: 1.428571429; --transition-duration: .35s; --external-link: "external link"; --margin-top: calc(2vh + 20px); } ``` 变量名大小写敏感,--header-color和--Header-Color是两个不同变量。 ## 2. Var() 函数 var()函数用于读取变量。 ``` a { color: var(--foo); text-decoration-color: var(--bar); } ``` var()函数还可以使用第二个参数,表示变量的默认值。如果该变量不存在,就会使用这个默认值。 ``` color: var(--foo, #7F583F); ``` 第二个参数不处理内部的逗号或空格,都视作参数的一部分。 ``` var(--font-stack, "Roboto", "Helvetica"); var(--pad, 10px 15px 20px); ``` var()函数还可以用在变量的声明。 ``` :root { --primary-color: red; --logo-text: var(--primary-color); } ``` 注意,变量值只能用作属性值,不能用作属性名。 ``` .foo { --side: margin-top; /* 无效 */ var(--side): 20px;} ``` 上面代码中,变量--side用作属性名,这是无效的。 ## 3. 变量值的类型 如果变量值是一个字符串,可以与其他字符串拼接。 ``` --bar: 'hello'; --foo: var(--bar)' world'; ``` 利用这一点,可以 debug(例子)。 ``` body:after { content: '--screen-category : 'var(--screen-category); } ``` 如果变量值是数值,不能与数值单位直接连用。 ``` .foo { --gap: 20; /* 无效 */ margin-top: var(--gap)px; } ``` 上面代码中,数值与单位直接写在一起,这是无效的。必须使用calc()函数,将它们连接。 ``` .foo { --gap: 20; margin-top: calc(var(--gap) * 1px); } ``` 如果变量值带有单位,就不能写成字符串。 ``` /* 无效 */.foo { --foo: '20px'; font-size: var(--foo);} /* 有效 */.foo { --foo: 20px; font-size: var(--foo);} ``` ## 4. 作用域 同一个 CSS 变量,可以在多个选择器内声明。读取的时候,优先级最高的声明生效。这与 CSS 的"层叠"(cascade)规则是一致的。 下面是一个例子。 ```
蓝色