自定义属性--和calc

>>>点击获取更多文章<<<

最近在弄练习写demo11,写到有关于 –XXX的自定义属性,calc,平时很少用,比较生面口,于是将它mark下来。

自定义属性 (–*)

带有前缀–的属性名,比如–example–name,表示的是带有值的自定义属性,其可以通过 var 函数在全文档范围内复用的。

CSS 自定义属性是可以级联的:每一个自定义属性可以多次出现,并且变量的值将会借助级联算法和自定义属性值运算出来。

语法

1
2
3
--somekeyword: left;
--somecolor: #0000ff;
--somecomplexvalue: 3px 6px rgb(20, 32, 54);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<style type="text/css">
:root {
--first-color: #488cff;
--second-color: #ffff8c;
}

#firstParagraph {
background-color: var(--first-color);
color: var(--second-color);
}

#secondParagraph {
background-color: var(--second-color);
color: var(--first-color);
}

#container {
--first-color: #48ff32;
}

#thirdParagraph {
background-color: var(--first-color);
color: var(--second-color);
}
</style>


<p id="firstParagraph">This paragraph should have a blue background and yellow text.</p>
<p id="secondParagraph">This paragraph should have a yellow background and blue text.</p>
<div id="container">
<p id="thirdParagraph">This paragraph should have a green background and yellow text.</p>
</div>

结果

1.jpg

calc

概述

CSS函数calc()可以用在任何一个需要,

语法

1
2
3
4
5
6
7
8
9
calc( <calc-sum> )
where
<calc-sum> = <calc-product> [ [ '+' | '-' ] <calc-product> ]*

where
<calc-product> = <calc-value> [ '*' <calc-value> | '/' <number> ]*

where
<calc-value> = <number> | <dimension> | <percentage> | ( <calc-sum> )
1
2
/* property: calc(expression) */
width: calc(100% - 80px);

其中的表达式,可以用+(加法) -(减法) *(乘法,乘数中至少要有一个是 类型的) /(除法,被除数(/右面的数)必须是 类型的)。表达式中的操作数可以使用任意语法种类的长度。如果你愿意,你可以在一个表达式中混用多种不同的长度单位。在需要时,你还可以使用小括号来调整计算顺序。

注意,+ 和 - 运算符的两边必须始终要有空白符。

例子(使用指定的外边距定位一个对象)

使用 calc() 可以很容易的为一个对象设置一个左右两边相等的外边距.在这个例子中,使用 CSS 创建了一个横跨整个窗口的 banner,该 banner 左右两边各有一个距离窗口边缘 40 像素的间距:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.banner {
position: absolute;
/* fallback for browsers which still doesn't support for `calc()` */
left: 5%;
width: 90%;
/* overwrite, if the browsers support for `calc()`*/
left: calc(40px);
width: calc(100% - 80px);
border: 1px solid black;
box-shadow: 1px 2px;
background-color: yellow;
padding: 6px;
text-align: center;
}
1
<div class="banner">This is a banner!</div>

2.jpg

使用CSS变量来嵌套calc()

我们来看一下下面的代码:

1
2
3
4
5
6
.foo {
--widthA: 100px;
--widthB: calc(var(--widthA) / 2);
--widthC: calc(var(--widthB) / 2);
width: var(--widthC);
}

在所有的变量都被展开后, widthC 的值就会变成 calc( calc( 100px / 2) / 2),然后当它被赋值给 .foo 的 width属性 时,所有内部的这些calc()(无论嵌套的有多深)都将会直接被“拍”成一个括号(原文:be flattened to just parentheses),所以这个 width属性 的值就直接相当于 calc( ( 100px / 2) / 2)了,或者说就变成25px了。 简而言之:一个 calc() 里面的 calc() 就仅仅相当于是一个括号。

参考来源

https://developer.mozilla.org/zh-CN/docs/Web/CSS/--*

https://developer.mozilla.org/zh-CN/docs/Web/CSS/calc