面经篇-CSS篇
xdf 面经
介绍
记录、复习、巩固、拓展、总结
都是随机面经,会持续更新添加......
# 水平垂直居中有几种方式(常用)?
- flex布局 将父元素设置为flex容器,并通过align-items: center;justify-content: center;属性即可实现子元素的水平垂直居中。
.container {
display: flex;
align-items: center; # 垂直居中
justify-content: center; # 水平居中
height: 100vh; # 指定高度
}
1
2
3
4
5
6
2
3
4
5
6
- CSS 绝对定位 + 负边距
.container {
position: relative;
height: 100vh; # 指定高度
}
.child {
position: absolute;
top: 50%;
left: 50%; # 果需要水平居中
transform: translate(-50%, -50%); # 更优的选择,无需计算负边距
width: 200px; # 已知宽度
height: 100px; # 已知高度
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- CSS 绝对定位 + margin: auto
.container {
position: relative;
height: 100vh; # 或指定高度
}
.child {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto; # 四个方向都是auto,将子元素居中
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- CSS 绝对定位 + 减去各自宽高个一半
.container {
position: relative;
height: 100vh; # 或指定高度
}
.child {
position: absolute;
width: 100px;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -50px;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- Grid布局 通过设置place-items: center;属性,可以同时实现水平和垂直居中。
.container {
display: grid;
place-items: center; # 水平垂直居中
height: 100vh; # 指定高度
}
1
2
3
4
5
2
3
4
5
- CSS 表格布局
.container {
display: table;
height: 100vh; # 指定高度
width: 100%;
}
.child {
display: table-cell;
vertical-align: middle;
text-align: center;
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# flex: 2 有用过吗?
flex: 2 是在Flexbox布局中经常使用的一个简写属性,它实际上是flex-grow, flex-shrink, 和 flex-basis 的简写。当你设置 flex: 2 时,你实际上是在说
flex-grow: 2; —— 表示这个flex项目(子元素)有能力放大,并且它的放大比例是2。如果有额外的空间,这个元素将会比其他flex-grow值较小的元素占据更多的空间。
flex-shrink: 1; —— 默认情况下,如果flex-shrink没有被明确指定,那么它的值是1。这意味着如果容器空间不足,这个元素将会缩小,但是因为你只指定了flex: 2,所以flex-shrink的1是隐式的。其值表示当空间不足时,该元素的缩小比例。
flex-basis: auto; —— 默认情况下,flex-basis是auto,意味着项目占据的主轴空间(在默认情况下是水平方向)是其原来的大小。但是,如果你明确设置了flex-basis的值(比如百分比、长度值等),那么这个值将决定元素在分配多余空间之前的默认大小。然而,在flex: 2这样的简写中,flex-basis并没有明确指定,所以它默认为auto。