进阶大厂之路-面试题-CSS

143 阅读7分钟

CSS面试类型思维导图

css面试题类型进行梳理汇总

基本概念

1. 传统布局

1.1. 说说你对盒模型的理解?

答:当布局的时候,浏览器会把所有元素标识为一个个矩形的盒子。这个盒子由content + padding + border + margin 等4个部分组成。

1.2. 盒模型的宽度和高度如何计算?

答:盒模型的宽度为content的宽度 + padding的宽度 + border ;

如果想设置width、height就是盒模型的宽度和高度,可以使用box-sizing:border-box这个属性

1.3. margin的设置的负数的影响?

答:

margin-top,margin-left设置成负值,自身向上移动和自身向左移动。

margin-right设置负值,其右侧元素向左移动,自身不受影响。

margin-bottom设置成负值,其下方元素向上移动,自身不受影响。

1.4. 什么是BFC?以及怎么形成BFC?

答:BFC实际就是页面的一个独立的渲染区域,里面的子元素不会影响外面的元素。

形成BFC的条件:

(1)float不是none

(2)postion是absolute或fixed

(3)overflow不是visible

(4)display是flex,inline-block

1.5. 怎么实现圣杯布局和双飞翼布局?(不是重点)

答:

圣杯布局就是中间的内容宽度为100%,左右两侧的宽度会根据中间内容的宽度变化而自适应的布局。是利用了float布局和padding为左右两侧预留空间进行排版的。

圣杯布局:

(1)圣杯布局里有左侧盒子,内容盒子和右侧盒子,给三个盒子设置float:left,使之浮动起来。

(2)给它们的父盒子设置padingg-left和padding-right一定的大小,为左右两侧预留空虚。

(3)给左侧盒子设置position:relative;margin-left:-100%;right的值为父盒子的padding-left的值。

(4)给右侧盒子设置margih-right,值为父盒子的padding-right的负数。

双飞翼布局就是中间的内容宽度为100%,左右两侧的宽度会根据中间内容的宽度变化而自适应的布局。是利用了float布局和margin为左右两侧预留空间进行排版的。

双飞翼布局:

(1)给左侧盒子、内容盒子、右侧盒子设置foat:left

(2)对三者的父盒子的margin-left,margin-right设置大小,为左右盒子预留空间

(3)对左侧盒子设置margin-left:-100%;

(4)对右侧盒子设置margin-left,其值为父盒子margin-right的负数

1.6. CSS如何画一个三角形?

答:可以利用border的属性,给width和height设置成0px,给border设置大小,并且只给其中一条边框设置颜色,其它边框的颜色设置成transparent,就可以展示成三角形了。

2. flex布局

flex布局说明链接

2.1. 说一下flex布局都有哪些属性?

答:有

(1)flex-direction:定义了主轴的方向

(2)flex-wrap:定义了超出主轴时是否会自动换行

(3)flex-flow:是flex-direction和flex-wrap二者的简写

(4)justify-content:定义的主轴上的对齐方式

(5)aligin-items:定义了纵轴的对齐方式

(6)aligin-self:定义了单个元素在纵轴的对齐方式

(7)aligin-content:定义了多轴的时候的对齐方式

2.2. 怎么用flex画一个三个点的色子?

答:首先是有一个父盒子,里面有三个div的子盒子

(1)对父盒子设置display:flex;justify-content:space-between

(2)利用子选择器nth-child(2),对第二个子盒子设置align-self:center

(3)同理利用子选择器nth-child(3),对第三个子盒子设置align-self:flex-end

就可以画出一个三点的色子

2.3. flex这个属性是哪些属性的简写?这些属性代表什么意思?

答:flex这个属性是flex-grow、flex-shrink、flex-basis这三个属性的简写,默认的值是flex:0 1 auto;

flex-grow:代表了根据什么比例放大元素,默认是0

flex-shrink:代表了根据什么比例缩小元素,默认是1

flex-basis:代表了元素在放大和缩小之前的初始化的尺寸,默认是auto

2.4. flex等于1代表什么意思?

flex为1代表的是 1 1 0%;即放大比例占为1,缩小比例占为1,初始化尺寸为尽量最小。

3. Grid布局

3.1. 介绍一下grid网格布局

Grid布局讲解视频

答:Grid布局就是网格布局,是一种二维的布局方式。

使用display:grid可以开启网格布局

它有下面一些属性:

grid-template-columns属性和grid-template-rows属性设置列宽和行宽,宽度的单位有fr这个特定的单位,表示占比的意思。

grid-row-gap,grid-column-gap、grid-gap属性代表行间距和列间距

grid-template-areas属性来定义区域,然后对各个元素指定grid-area属性来规划所占的区域。

其余的就是align-items,align-content,justfiy-items,justify-conteng属性,和flex布局里的属性相似。

4. 定位

4.1. position都有哪些属性?

答:有static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)、sticky(粘性定位)

4.2. 水平垂直居中有哪些方式?

答:

行内元素:

(1)设置text-align:center来水平居中;line-height为父盒子height实现垂直居中。

块级元素(知道宽高)

(1)设置position:absolute

(2)设置left:50%;margin-left:-(自身宽度的一半);来水平居中

(3)设置top:50%;margin-top:-(自身高度的一半);来实现垂直居中

块级元素(不知道宽高)

通过absolute的方法

(1)设置position:absolute

(2)设置left:50%;top:50%

(3)设置transform:translate(-50%,-50%);来实现水平垂直居中

通过flex的方法

(1)设置display:flex

(2)设置juestfy-content:center;来实现水平居中

(3)设置align-items:center;来实现垂直居中

5. css选择器

5.1. css都有哪些选择器?

答:有id选择器、类选择器、元素选择器、子元素选择器(>)、相邻兄弟选择器(+)、伪类选择器(:hover)、伪元素选择器(::before、::after)、指定元素位置选择器(nth-child(n))

6. 图文样式

6.1. line-height如何继承?

答:如果line-height是具体数值、或者是一个比例,则会直接继承给子元素。

如果line-height是百分比,则利用百分比和父元素的font-size计算出一个值,然后继承下来为line-height的值。

6.2. UI的字体文件怎么用?
6.3. UI给的字体文件很大,只需要使用其中的一部分文字,怎么处理?

高级概念

1. 响应式

1.1. 说一下em/px/rem/vh/vw的区别?

答:

px是一个绝对长度单位,表示像素

em是相对长度单位,表示根据父元素的font-size计算出的长度单位

rem是相对长度单位,表示根据html根节点font-size计算出的长度单位

vh是当前视窗的高度,1vh代表当前视窗高度的1/100

vw是当前视窗的宽度,1vw代表当前视窗宽度的1/100

扩展:vmin是取vw、vh的最小值;vmax是取vw、vh的最大值

1.2. 说一下设备像素、css像素、设备独立像素、dpr、ppi之间的区别?

2. 回流和重绘

2.1. 什么是回流和重绘?

答: 元素的位置信息或者大小等信息发生变化叫回流,如果元素只是背景颜色等一些属性方式变化叫重绘。回来必然会触发重绘,但是重绘不一定会触发回流。

CSS3

1. 新特性

1.1. CSS3新增了哪些新特性?

答:

(1)新增了rem、vh、vw、vm等新的计量方式

(2)新增了一些选择器 nth-child

(3)新增了三个边框属性border-radius、box-shadow、border-image

(4)增加了自定义属性,var()

(5)增加了计算属性,calc

1.2. 什么是var()?

答:css3新增了 自定义属性,通过一个--变量名的方式定义一个变量名。然后其它元素就可以通过val()这个形式使用这个变量名的值。