学习笔记——CSS面试问题

一些常见的CSS面试问题。


 1.对BFC/IFC的理解?

BFC是块级格式化上下文,规定内部块级元素格式如何摆放的一个独立环境。环境中的子元素不会影响到外面的布局,也不会受到外部布局的影响。

规则:

1.内部块级元素会在垂直方向一个接一个的排列,

2.内部元素不会影响到外部标签,

3.垂直方向的距离由margin决定, 属于同一个BFC的两个相邻的标签外边距会发生重叠

4.计算BFC高度时,浮动元素也会参与计算

触发条件:

1.display: inline-block,flow-root,table-cell,flex、

2.overflow不为visible、

3.浮动、

4.绝对定位和固定定位

作用:清除浮动、阻止父子元素外边距折叠,两栏布局

IFC是内联格式化上下文,规定内联元素摆放规则

触发条件:块级元素中仅包含内联级别元素

规则:

1.子元素是水平方向横向排列的,并且垂直方向起点为元素顶部,

2.子元素只会计算横向样式空间,【padding、border、margin】,垂直方向样式空间不会被计算,【padding、border、margin】

3.在垂直方向上,子元素会以不同形式来对齐(vertical-align)

4.能把在一行上的框都完全包含进去的一个矩形区域,被称为该行的行框(line box)。行框的宽度是由包含块(containing box)和与其中的浮动来决定

5.IFC中的line box一般左右边贴紧其包含块,但float元素会优先排列。

6.IFC中的line box高度由 CSS 行高计算规则来确定,同个IFC下的多个line box高度可能会不同。

7.当 inline boxes的总宽度少于包含它们的line box时,其水平渲染规则由 text-align 属性值来决定。

8.当一个inline box超过父元素的宽度时,它会被分割成多个boxes,这些boxes分布在多个line box中。如果子元素未设置强制换行的情况下,inline box将不可被分割,将会溢出父元素。

解决问题:

1.元素水平居中

2.多行文本水平垂直居中

2..使用link和@import有什么区别?

1.link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@import就只能加载CSS了。

2.一个页面被加载的时候(就是被浏览者浏览的时候),link引用的CSS会同时被加载,而@import引用的CSS会等到页面全部被下载完再被加载。

3.@import有兼容性。

4.当使用javascript控制dom去改变样式的时候,只能使用link标签,因为@import不是dom可以控制的。

3.padding和margin区别?

padding: 作用对象是自身;

margin: 是对外部元素;

4.transform不会造成卡顿?

因为transform脱离文档流。

5.重绘和重排?

重绘(重构):

改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性,将只会引起浏览器 repaint(重绘),repaint (重绘)的速度快于重排。

什么时候重绘:

1.改变元素的背景色和背景图片

2.改变文字颜色

3.改变边框颜色

重排(回流):

子元素样式发生改变,影响其父元素以及往上追溯的许多元素,浏览器会重新渲染与子元素相关联元素的过程。

什么时候重排:

1.改变窗口大小

2.改变文字大小

3.内容的改变,如用户在输入框中敲字

4.激活伪类,如:hover

5.操作class属性

6.脚本操作DOM

7.计算offsetWidth和offsetHeight

8.style属性

总之,只要引起了页面上某些元素的占位面积、定位方式、边距等属性的变化,都会引起它内部、周围甚至整个页面的重新渲染。

重绘与重排的关系:

重排一定会引起重绘,重绘不一定会重排。重绘和重排会影响web性能。

如何减少重绘和重排:

1.不要一条一条的修改DOM的样式,可以先定义好css的class,然后修改DOM的className。

2.不要把DOM结点的属性值放在一个循环里当成循环里的变量。

3.为动画的HTML元件适用fixed或absolute的position,那么修改他们的css时不会reflow

4.不要在布局信息改变的时候做查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一一GG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值