CSS篇
1. px
和em
的区别?
px
是绝对单位,但是是相对于设备的屏幕分辨率而言的,在同一个设备上是绝对单位,在不同的设备上又是相对单位
em
是相对单位,具体大小相对于父元素计算
2.vw
与vh
代表什么?
- 两者是
CSS3
新增的度量单位,vw
表示视口的宽度,vh
表示视口的高度
3.什么是BFC
,应用在哪些地方?
BFC
是一个独立的布局区域,其中的布局不会受到外界的影响;通过设置float
,overflow
及position
属性可以触发
- 解决浮动元素令父元素高度塌陷问题;
- 解决非浮动元素被浮动元素遮挡问题;
- 解决垂直排列的两个元素外边距重合的问题
4.介绍BFC
,IFC
,GFC
与FFC
分别是什么?
BFC
指的是块级格式化上下文,会形成一块独立的布局区域,其内部布局与外部布局不会互相应影响
IFC
指行内格式化上下文,将一块区域以行内元素形式格式化
GFC
指网格布局格式化上下文,将一块区域以网格布局形式格式化
FFC
指弹性盒布局格式化上下文,将一块区域以弹性盒形式格式化
5.flex
布局如何实现?
- 通过设置容器元素的
display:flex
来实现,容器会成为弹性盒布局容器,其中的元素会成为容器内的元素
- 对于容器
flex-warp
设置容器内元素在主轴上的换行效果
flex-direction
设置容器的主轴方向
justify-content
设置容器内元素在主轴上的排列方式
align-items
设置容器内元素在交叉轴上的排列方式
align-content
在有多行元素的情况下,设置多行元素在交叉轴的排列方式
- 对于容器内元素
order
设置元素的排列顺序,值越小越靠前
flex-grow
设置元素的放大比例
flex-shrink
设置元素的缩小比例
flex-basis
设置在分配多余空间之前元素占据主轴的大小
flex
是上述三个属性的缩写
align-self
设置元素在交叉轴上的排列方式,会覆盖容器的排列方式
6.display:none
,visibility:hidden
,opacity:0
三者的区别?
- 三者在肉眼上均不可见
- 结构上
display:none
会将元素从渲染树中移除,目标元素无法被点击
visibility:hidden
仍然占据页面空间,目标元素无法被点击
opacity:0
仍然占据页面空间,目标元素可以被点击
- 继承性
display:none
与opacity:0
不具有继承性,更改子元素的对应属性设置无效
visibility:hidden
具有继承性,可以更改子元素的属性使子元素显示
- 性能消耗
display:none
会造成回流,影响了页面的整体布局,对性能消耗较大
visibility:hidden
与opacity:0
只会造成重绘,性能消耗较小
7.如何使用CSS
或者JS
实现多行文本溢出的省略效果?
// 单行文本
selector{
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
// 多行文本
selector{
overflow:hidden;
display:-webkit-box;
-webkit-box-orient:vertical;
-webkit-line-clamp:3;
}
let ele=document.querySelector("tagName")
let words=str.spllit("")
let content=[]
for(let i=0:i<words.length;i++){
content.push(words[i])
ele.innerText=content.join("")
if(ele.clientHeight<ele.scrollHeight){
content.pop()
ele.innerText=content.join("")+"..."
break
}
}
8.什么是粘性布局?
- 粘性布局是
CSS3
新增的内容,在视口内,它不会受到定位属性top
,left
等的影响,但是当将要到达目标距离时,它又会受到定位属性的影响,在固定位置定位
- 设置粘性布局的元素仍然在文档流中
- 当到达设定好的临界位置时,会在固定位置定位
- 固定的偏移量是相对于离他最近的具有滚动框的祖先元素,如果没有,偏移量相对于视口设定
9.space-between
与space-around
的区别?
space-between
指的是两端对齐,最左侧与最右侧的元素紧贴容器
space-around
指的是元素之间的左右间隔被平均分配
10.CSS3
中的transition
与animation
有什么区别?
transition
transition-property
设置要执行过渡的属性
transition-delay
设置开始执行过渡的延迟
transition-duration
设置执行过渡的持续时间
transition-timing-function
设置执行过渡的函数
animation
animation-name
设置执行动画的名称
animation-delay
设置执行动画的延迟
animation-duration
设置执行动画的持续时间
animation-timing-function
设置执行动画的函数
animation-direction
设置动画执行的方向
animation-iteration-count
设置动画执行的次数
animation-play-state
设置动画是否暂停
animation-fill-mode
设置当未开始播放动画时元素的样式
11.说明png8
,png24
与png32
的区别?简单说明png
的压缩原理?
png8
中的8代表8bit,即利用8bit来表示颜色的种类,可以表示2*8=256
种颜色,一般适用于颜色简单的图像
png24
使用3个8bit代表颜色的种类,每个8bit分别表示RGB,可以表示256*256*256
种颜色类型
png32
在png24
的基础上,还有一个8bit用来表示透明度的颜色类型
png
的压缩分为预解析与压缩两个阶段,预解析阶段做准备工作方便后期的压缩,使用Deflate
进行压缩,该算法结合LZ77
算法与Huffman
算法
12.如何使用CSS
绘制一个三角形?
- 设置元素的高度与宽度为0
- 设置元素的所有边框为透明色,并指定边框的样式与粗细
- 设置元素某个方向的边框为可见颜色
13.如何实现一个自适应的正方形?
- 使用
vw
或者vh
来设置元素的宽度与高度,这样在不同的设备可视范围内会呈现出不同大小的正方形
- 利用百分比
%
设置,使用width
设置元素的宽度,使用padding
来撑开高度,将元素的height
设置为0
,为元素添加背景颜色即可
14.如何清除浮动元素的影响?
- 使用
clear
属性清除(被覆盖元素)
- 与浮动元素的父元素同级的元素也设置为浮动(被覆盖元素)
- 为浮动元素的父元素添加高度
- 为浮动元素的父元素添加
overflow
属性
- 为浮动元素的父元素使用伪元素
::after
,并设置clear:both
属性
15.简述两种盒模型的区别?
- 任何元素都遵循盒模型,它用来规定元素各个部分的占用空间
W3C盒模型
- 定义元素的
width
与height
时,不会包含元素的边框与内边距
IE盒模型
- 定义元素的
width
与height
时,会包含元素的边框与内边距
16.如何触发重排和重绘?
- 添加或者删除
Dom
(两者)
- 设置元素的
display:none
属性(两者)
- 设置元素的
visibility:hidden
属性(重绘)
- 移动或者为
Dom
节点添加动画(两者)
- 用户行为(两者)
17.重排与重绘有何区别?
- 重排
- 渲染树需要重新分析,节点需要重新计算尺寸,表现为重新计算布局,重新排列元素
- 重排消耗的性能较大
- 重绘
- 节点的几何属性或者样式发生更改,屏幕中的部分内容发生改变
- 重绘消耗的性能较小
- 重排一定会触发重绘,重绘不一定会重发重排
18.如何优化图片?
- 对于修饰图片,比如项目符号,可以使用
CSS
替代
- 小图使用
base64
格式
- 将多个图标文件整合到一张图片中
- 非必要时不必请求原图
- 选择合适的图片格式
- 照片使用
jpeg/jpg
- 小图使用
png
- 矢量图使用
svg
- 尽量使用
webp
格式图片
19.渐进增强与优雅降级有什么区别?
- 渐进增强指的是先针对低版本浏览器实现基本的功能,然后对于高版本浏览器逐渐增加各种功能
- 渐进增强是从基础到完善的过程
- 优雅降级指的是先针对高版本浏览器实现完善的功能,然后针对低版本浏览器特殊处理
- 优雅降级是从完善到基础的过程
20.CSS3
新增了哪些内容?
- 选择器(
:not()
)
- 盒子模型属性(
border-radius
,border-image
,box-shadow<