css
相关概念
选择器的优先级和解析方式
!important
> 行内样式 >#id
>.class
>tag
>*
> 继承 > 默认- 选择器从右往左解析,选择器越少越好
link
和 import
的区别
link
功能较多,可以定义RSS
,定义Rel
等作用,而@import
只能用于加载css
- 当解析到
link
时,页面会同步加载所引的css
,而@import
所引用的css
会等到页面加载完才被加载 link
可以使用js
动态引入,@import
不行
为什么要用预处理器
- 嵌套,
css
代码更清晰 - 变量,统一样式
mixin
,复用css
样式
line-height
1.5 与 150%的区别
- 父元素设置 1.5,子元素行高为子元素
fontsize*1.5
- 父元素设置 150%,子元素行高为父元素
fontsize*150%
opacity: 0
、visibility: hidden
、display: none
这三者的区别:
结构上:
display: none
会让元素完全从渲染树中消失, 渲染的时候不占据任何空间, 不能点击.visibility: hidden
不会让元素从渲染树消失, 渲染元素继续占据空间, 只是内容不可见, 不能点击.opacity: 0
不会让元素从渲染树消失, 渲染元素继续占据空间, 只是内容不可见, 可以点击.
继承性:
display: none
和opacity: 0
是非继承属性, 子孙节点消失由于元素从渲染树消失造成, 通过修改子孙节点属性无法显示.visibility: hidden
是继承属性, 子孙节点消失是由于继承了visibility: hidden
, 通过设置visibility: visible
可以让子孙节点显式.
性能:
display: none
修改元素会造成文档回流, 读屏器不会读取元素内容, 性能消耗较大.visibility: hidden
修改元素只会造成本元素的重绘, 读屏器会读取元素内容, 性能消耗较少.opacity: 0
修改元素会造成重绘, 性能消耗较少.
counter
计数器方法
计数器方法有 3 个,通常组合在一起使用
counter-reset
counter-increment
counter()
/counters()
counter-reset
:计数器重置
创建一个计数器,或者将已经创建的计数器重置为指定值:
css
ol {
/* 将 count 这个计数器重置为0,也可以不携带0这个参数,默认为0 */
counter-reset: count 0;
}
counter-increment
:计数器累加
将已经创建的计数器重置为指定值,浏览器渲染时,遇到此属性会依次累加:
css
li {
/* 将 count 这个计数器加上 1,这个属性可以写在伪元素样式中 */
counter-increment: count 1;
}
counter()
:用于显示计算结果,该方法需要搭配伪元素的content
属性一起使用:
css
li::before {
/* 显示 count 计数器当前计算结果 */
content: counter(count);
}
li::before {
/* 搭配 list-style-type 可选值使用 */
content: counter(count, upper-roman);
}
点击查看 list-style-type 可选值
counters()
:自动查找计数器的嵌套关系,并用指定的连接符链接,将结果显示出来:
html
<ol>
<li>
<ol>
<li></li>
<li></li>
<li></li>
</ol>
</li>
<li></li>
<li></li>
</ol>
css
ol {
counter-reset: count;
list-style: none;
}
li {
counter-increment: count 1;
}
li::before {
content: counters(count, '-');
}
变量
- 声明:
--变量名称
- 读取:
var(--变量名称,默认值)
- 类型:
- 普通:只能用作属性值不能用作属性名
- 字符:与字符串拼接
"Hello, "var(--name)
- 数值:使用
calc()
与数值单位连用var(--width) * 10px
- 作用域
- 范围:在当前元素块作用域及其子元素块作用域下有效
- 优先级别:内联样式 > ID选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器
在js
中读取和使用css
变量
- 读取变量:
elem.style.getPropertyValue()
- 设置变量:
elem.style.setProperty()
- 删除变量:
elem.style.removeProperty()