CSS面试知识点汇总
文章目录
CSS 优化
- 内联首屏关键 css
- 异步加载非首屏 css
- 使用 javascript 将 link 标签查到 head 标签最后;
- 设置
link
标签media
属性为noexist
,浏览器会认为当前样式表不适用当前类型,会在不阻塞页面渲染的情况下再下载。加载完成后再将media
值设置为screen
或all
,从而让浏览器开始加载 css:<link rel="stylesheet" href="mystyles.css" media="noexist" onload="this.media='all'" />
; - 通过
rel
属性将link
标记为alternate
可选样式表,也可以实现浏览器异步加载。加载完成后,将rel
设置回stylesheet
:<link rel="alternate stylesheet" href="mystyles.css" onload="this.rel='stylesheet'" />
;
- 资源压缩;
- 合理使用选择器:
- 不要嵌套使用过多复杂选择器;不要三层以上(查找样式表是按照从右到左的顺序匹配的);
- 使用 id 选择器没有必要进行嵌套;
- 通配符和属性选择器效率较低,尽量避免使用;
- cssSprite,合成所有 icon 图片,用宽高加上
background-position
的背景图方式显现 icon 图,减少 http 请求; - 把小的 icon 图片转成 base64 编码;
BFC
块级格式化上下文。触发条件:
- 根元素,即 HTML 元素
- 浮动元素,
float
为left
、right
overflow
不为visible
,为auto
、scroll
、hidden
display
为inline-block
、inltable-cell
、table-caption
、table
、inline-table
、flex
、inline-flex
、grid
、inline-grid
position
的值为absolute
或fixed
应用场景:
- 防止
margin
塌陷 - 清除内部浮动
- 自适应多栏布局
一些单位
- em:相对长度单位,相对于当前对象内文本的字体尺寸(针对父元素的尺寸);如当前行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸
16px
; - px:与设备像素比有关,但是与元素的其他属性无关;
- 设备像素比(DPR):
window.devicePixelRatio
- 设备像素比(DPR):
- rem:相对长度单位,相对的是
HTML
根元素font-size
的值; - vh、vw:相对于窗口宽高,100vw 代表满宽,100vh 表示满高;
css 隐藏元素的方式
opacity: 0
:影响布局、响应交互visibility: hidden
:影响布局,不响应交互display: none
:元素不可见position: absolute; top: -9999px; left: -9999px
:不影响布局,响应交互
两栏布局
- 左边块使用
float
,右边块使用margin
,父使用overflow: hidden
触发 BFC; - 左边块使用
absolute
; - 父使用
display: flex
,左边块固定宽度,右边使用flex:1
; - 父使用
display: grid; grid-template-columns: 200px auto
三栏布局
- 两边使用
float
,中间使用margin
:需要将main
放在最末; - 两边使用
absolute
,中间使用margin
; - 父使用
display: flex; justify-content: space-between
,中间使用flex: 1
,main
需要在中间; - 父使用
display: grid; grid-template-columns: 100px auto 100px; grid-template-areas: 'a b c'
,main
可以在中间,通过grid-areas: b
将main
定位在中间;
居中布局
块状元素:
- 利用
position
+margin: auto
:需要子元素top/right/bottom/left
设为相同的值,然后使用margin: auto
; - 利用
position
+margin: 负值
:需要子元素top: 50%; left: 50%; margin-left: 负一半自身宽度; margin-top: 负一半自身高度
,需要知道自身宽高; - 利用
position
+transform
:需要子元素top: 50%; left: 50%; transform: translate(-50%, -50%)
,不需要知道自身宽高; - table 布局:父元素使用
display: table-cell;text-align: center;vertical-align: middle
,子元素使用display: inline-block
; - flex 布局:父元素使用
display: flex;justify-content: center;align-items: center
; - grid 布局:父元素使用
display: grid;align-items: center;justify-content: center
行内元素:
text-align: center
;height
=line-height
响应式布局
响应式网站设计是一种网络页面设计布局,页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。
原理是通过媒体查询检测不同的设备屏幕尺寸并进行处理。
媒体查询
html
中需要添加 <meta>
标签来声明 viewport。
|
|
css 中使用 @media 查询,可以针对不同的媒体类型定义不同的样式:
|
|
CSS3 新增的特性
新增选择器
:nth-child(n)
:first-of-type
:last-child
:disabled
边框
border-radius
box-shadow
border-image
背景
background-clip
background-origin
background-size
background-break
文字
word-wrap
text-overflow
text-shadow
text-decoration
单行文本溢出显示省略号:
|
|
多行文本溢出显示省略号:
|
|
transition
|
|
transform
提示
不支持 inline 元素。transform-origin
修改 transform base 的位置。
|
|
animation
|
|
渐变
linear-gradient
radial-gradient
flex
容器属性:
flex-direction
:主轴方向,row
|row-reverse
|column
|column-reverse
flex-wrap
:是否可换行,nowrap
|wrap
|wrap-reverse
flex-flow
:是flex-direction
属性和flex-wrap
属性的简写形式,默认值为row nowrap
justify-content
:flex-start
|flex-end
|center
|space-between
|space-around
align-items
:flex-start
|flex-end
|center
|baseline
|stretch
align-content
:flex-start
|flex-end
|center
|space-between
|space-around
|stretch
成员属性:
order
:定义项目的排列顺序,数值越小,排列越靠前,默认为 0flex-grow
:定义项目的放大比例flex-shrink
:定义项目的缩小比例flex-basis
:定义初始尺寸flex
:是flex-grow
,flex-shrink
和flex-basis
的简写flex: 1 = flex: 1 1 0%
flex: 2 = flex: 2 1 0%
flex: auto = flex: 1 1 auto
flex: none = flex: 0 0 auto
常用于固定尺寸不伸缩
align-self
:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items
grid
容器属性:
display
:grid
|inline-grid
,标识容器是块级元素还是行内元素grid-template-columns
:设置列宽;grid-template-rows
:设置行高- 可以使用
repeat()
函数,如repeat(3, 100px)
auto-fill
:如repeat(auto-fill, 200px)
,表示可以放下几个就放几个fr
:片段,表示比例关系,grid-template-columns: 200px 1fr 2fr
表示第一个列宽设置为200px
,后面剩余的宽度分为两部分,宽度分别为剩余宽度的 1/3 和 2/3
- 可以使用
grid-row-gap
:设置行间距;grid-column-gap
:设置列间距;grid-gap
:是前两个的缩写;grid-template-areas
:用于定义区域grid-template-areas: "a b c" "d e f" "g . ."
:分成 7 个区域,.
表示无用区域grid-template-areas: 'a a a' 'b b b' 'c c c'
:分成a b c
三个区域
grid-auto-flow
:row
|column
,标识放置顺序,先行后列或是先列后行justify-items
:设置单元格内容的水平位置;align-items
:设置单元格的垂直位置start
|end
|center
|stretch
place-items
:是合并简写形式
justify-content
:设置整个内容区域在容器的水平位置;align-content
:设置整个内容区域在容器的垂直位置start
|end
|center
|stretch
|space-around
|space-evenly
place-content
:是合并简写形式
grid-auto-columns
:设置隐形网格的高度;grid-auto-rows
:设置隐形网格的宽度;
成员属性:
grid-column-start
:左边框所在的垂直网格线;grid-column-end
:右边框所在的垂直网格线;grid-row-start
:上边框所在的垂直网格线;grid-row-end
:下边框所在的垂直网格线;grid-area
:定义项目放置在哪个区域,这里的区域是上面的grid-template-area
justify-self
:设置单个项目在容器的水平位置;align-self
:设置单个项目在容器的垂直位置start
|end
|center
|stretch
place-self
:是合并简写形式- 覆盖父元素的
justify-items
和align-items
其他的一些
- 视差滚动
background-attachment: fixed
- 吸顶
position: sticky
示例
文章作者 xuyou
上次更新 2021-05-01