前端面试CSS
Contents
1 BFC是什么
-
是什么:块级格式化上下文,通俗地讲就是“被隔离的区间”,BFC元素的子元素不会对外面的其他元素产生影响
-
怎么做:
- 触发条件:
- 浮动元素(元素的float非none)
- 绝对定位元素(元素的position为absolute或fixed)
- 行内块(inline-block)元素
- overflow值不为visible的块元素
- 弹性元素(display为flex或inline-flex元素的直接子元素)
- 触发条件:
-
解决了什么问题:
- 清除浮动(Why not .clearfix)
- 外边距重叠(兄弟,间距)
- 定义两个div,分别指定两个盒子的margin-bottom和margin-top属性为10,理论上两者的间距应为20,但实际上间距为10,即出现了margin重合现象,如果两个元素的外边距不同,则取最大值,如果相同则仅为其中一个
- 可以分别在两个div外包裹一个父元素container,指定container的css属性为以上任意属性值即可触发BFC,使得两个container中的div被分别“隔离”,解决margin重合的问题。
- margin塌陷(父子,高度)
- 定义父元素box,子元素box1,当子元素box1指定了margin-top属性为20px后,理论上子元素向下20px,父元素保持不动,但实际上父元素与子元素都向下移动了20px
- 可以让父元素box变成BFC来解决
- 出现这个问题的原因是子元素的margin没有参照,可以给父元素添加border-top属性,也可以解决这个问题
- 高度坍塌,清除浮动(父子,浮动)
- 定义父元素的宽度与子元素的宽高,当子元素是浮动布局时,理论上虽然父元素没有定义高度,但子元素可以自动将父元素“撑开”。但实际上子元素的浮动属性使其脱离了文档流,导致父元素出现高度坍塌的情况
- 将父元素变成BFC,使得子元素无法影响到父元素,实现了清除浮动的作用
- 阻止元素被浮动元素覆盖(兄弟,浮动)
- 定义两个div,一个是正常元素,另外一个是浮动元素,那么浮动元素就会覆盖到正常元素上面
- 将正常元素变为BFC元素,这样两个元素就不会互相干扰
2 如何实现(水平)垂直居中
- 如果
.parent
的height
不确定,只需padding:10px 0
就能将.child
垂直水平居中 - 如果
.parent
的height
是确定的,就很难把.chlid
居中-
table自带的功能
1 2 3 4 5
<table> <tr> <td>content</td> </tr> </table>
-
div装成table
- 外部div的
display:table
,内部div的display:table-cell; vertical-align:middle
- 外部div的
-
(子元素高度也确定)
相对定位 + margin-top: -50%*height
1 2 3 4 5 6 7 8 9 10 11 12 13
.parent{ height: 600px; position: relative; } .child{ position: absolute; top: 50%; /* left: 50%; */ /* width: 300px; */ height: 100px; /* margin-left: -150px; */ margin-top: -50px; }
-
(子元素高度不确定)
translate(-50%,-50%)
1 2 3 4 5 6 7 8 9 10
.parent{ height: 600px; position: relative; } .child{ position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); }
-
(子元素高度确定)
定位0 + margin:auto
1 2 3 4 5 6 7 8 9 10 11 12 13 14
.parent{ height: 600px; position: relative; } .child{ position: absolute; width: 300px; height: 200px; top: 0; bottom: 0; left: 0; right: 0; margin: auto; }
-
flex
1 2 3 4 5 6 7 8 9
.parent{ height: 600px; display: flex; justify-content: center; align-items: center; } .child{ width: 300px; }
-
3 CSS选择器优先级如何确定
- 选择器越具体,其优先级越高
- 相同优先级,出现在后面的,覆盖前面的
- 属性后面加!important的优先级最高,但是要少用
4 如何清除浮动
- 方法一,给父元素添加.clearfix
|
|
- 方法二,利用BFC(overflow: hidden…)
5 两种盒模型(box-sizing)的区别
-
先说第一种:content-box,width指定的是content区域宽度,而不是实际宽度,公式为
-
- 实际宽度 = width + padding + border
-
-
再说第二种:border-box,width指定的是左右边框外侧的距离(IE默认盒模型),公式为
-
- 实际宽度 = width
-
-
相同点:用来指定元素高度/宽度的计算标准
-
不同点:计算高度或宽度的方式不同,border-box更好用,符合我们的第一直觉
6 Sass与Less的区别
CSS预处理器,都内置函数
都支持
变量符号不同:sass$ less@
Webpack配置:(按需引入)
|
|
Vite配置:
|
|
7 尽可能多的实现三栏布局
|
|
- 浮动(适用于main在最后绘制)
|
|
- Flex: 要使用order决定顺序
|
|
- grid:grid-template-areas
|
|
- 按顺序的话用table和table-cell也行
8 CSS3新特性
过渡
动画
选择器 :root :last-child :nth-child(n)
阴影
渐变
滤镜
flex-grid
3d-2d
Author gsemir
LastMod 2021-07-19