css

作者: shaokang 时间: February 23, 2022字数:2751

选择器类型

id 选择器、class 选择器、属性选择器、*、伪类选择器、伪元素、后代选择器、子类选择器、兄弟选择器

权重计算规则

第一优先级:!important 会覆盖页面内任何位置的元素样式
1.内联样式,如 style=”color: green”,权值为 1000
2.ID 选择器,如#app,权值为 0100
3.类、伪类、属性选择器,如.foo, :first-child, div[class=”foo”],权值为 0010
4.标签、伪元素选择器,如 div::first-line,权值为 0001
5.通配符、子类选择器、兄弟选择器,如*, >, +,权值为 0000
6.继承的样式没有权值

!important > 行内样式 > ID 选择器 > (类选择器 属性选择器 伪类选择器) > 元素选择器

注意权重的计算不能越级,比如:无论多少个 class 组成的选择器,都没有一个 ID 选择器权重高。 很早前的浏览器积累到一定数量是行的

定位

属性 说明
absolute 生成绝对定位的元素,相对于 static 定位以外的一个父元素进行定位。元素的位置通过 left、top、right、bottom 属性进行规定。
relative 生成相对定位的元素,相对于其原来的位置进行定位。元素的位置通过 left、top、right、bottom 属性进行规定。
fixed 生成绝对定位的元素,指定元素相对于屏幕视⼝(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变,⽐如回到顶部的按钮⼀般都是⽤此定位⽅式。
static 默认值,没有定位,元素出现在正常的文档流中,会忽略 top, bottom, left, right 或者 z-index 声明,块级元素从上往下纵向排布,⾏级元素从左向右排列。
inherit 规定从父元素继承 position 属性的值
sticky 定位类似于相对定位,(当它表现为 fixed 定位的特性时)会根据最近的滚动容器(nearest scrollport)自动计算偏移量。

sticky

它的行为就像 position:relative; 而当页面滚动超出目标区域时,它的表现就像 position:fixed;,它会固定在目标位置。

元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。这个特定阈值指的是 top, right, bottom 或 left 之一,换言之,指定 top, right, bottom 或 left 四个阈值其中之一,才可使粘性定位生效。否则其行为与相对定位相同。

设定为 position: sticky 的元素的任意父节点的 overflow 属性必须是 visible,否则 position:sticky 不会生效;

在满足上述情况下,设定了 position: sticky 的元素的父容器的高度必须大于当前元素,否则也会失效。(当然,此时,sticky 吸附的基准元素就会变成父元素)

BFC

通俗来讲:BFC 是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。如果一个元素符合触发 BFC 的条件,则 BFC 中的元素布局不受外部影响。

创建 BFC 的条件:
● 根元素:body;
● 元素设置浮动:float 除 none 以外的值;
● 元素设置绝对定位:position (absolute、fixed);
● display 值为:inline-block、table-cell、table-caption、flex 等;
● overflow 值为:hidden、auto、scroll;

BFC 的特点:
● 垂直方向上,自上而下排列,和文档流的排列方式一致。
● 在 BFC 中上下相邻的两个容器的 margin 会重叠
● 计算 BFC 的高度时,需要计算浮动元素的高度
● BFC 区域不会与浮动的容器发生重叠
● BFC 是独立的容器,容器内部元素不会影响外部元素
● 每个元素的左 margin 值和容器的左 border 相接触

BFC 的作用:
● 解决 margin 的重叠问题:由于 BFC 是一个独立的区域,内部的元素和外部的元素互不影响,将两个元素变为两个 BFC,就解决了 margin 重叠的问题。
● 解决高度塌陷的问题:在对子元素设置浮动后,父元素会发生高度塌陷,也就是父元素的高度变为 0。解决这个问题,只需要把父元素变成一个 BFC。常用的办法是给父元素设置 overflow:hidden。
● 创建自适应两栏布局

隐藏元素的方式

隐藏方式 是否占据空间 是否响应鼠标事件 是否响应键盘事件 对读屏器的影响
display: none; 不可见
visibility: hidden; 不可见
opacity: 0; 可见
position: absolute; + left: -9999px; 可见
clip: rect(0, 0, 0, 0); 可见
clip-path: inset(100%); 可见
height: 0; + overflow: hidden; 可见
transform: scale(0, 0); 可见
aria-hidden="true" 不可见