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、hiddendisplay为inline-block、inltable-cell、table-caption、table、inline-table、flex、inline-flex、grid、inline-gridposition的值为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-radiusbox-shadowborder-image
背景
background-clipbackground-originbackground-sizebackground-break
文字
word-wraptext-overflowtext-shadowtext-decoration
单行文本溢出显示省略号:
|
|
多行文本溢出显示省略号:
|
|
transition
|
|
transform
提示
不支持 inline 元素。transform-origin 修改 transform base 的位置。
|
|
animation
|
|
渐变
linear-gradientradial-gradient
flex
容器属性:
flex-direction:主轴方向,row|row-reverse|column|column-reverseflex-wrap:是否可换行,nowrap|wrap|wrap-reverseflex-flow:是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrapjustify-content:flex-start|flex-end|center|space-between|space-aroundalign-items:flex-start|flex-end|center|baseline|stretchalign-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 autoflex: 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|stretchplace-items:是合并简写形式
justify-content:设置整个内容区域在容器的水平位置;align-content:设置整个内容区域在容器的垂直位置start|end|center|stretch|space-around|space-evenlyplace-content:是合并简写形式
grid-auto-columns:设置隐形网格的高度;grid-auto-rows:设置隐形网格的宽度;
成员属性:
grid-column-start:左边框所在的垂直网格线;grid-column-end:右边框所在的垂直网格线;grid-row-start:上边框所在的垂直网格线;grid-row-end:下边框所在的垂直网格线;grid-area:定义项目放置在哪个区域,这里的区域是上面的grid-template-areajustify-self:设置单个项目在容器的水平位置;align-self:设置单个项目在容器的垂直位置start|end|center|stretchplace-self:是合并简写形式- 覆盖父元素的
justify-items和align-items
其他的一些
- 视差滚动
background-attachment: fixed - 吸顶
position: sticky
示例
文章作者 xuyou
上次更新 2021-05-01