开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
1.盒子模型
当对一个文档进行布局渲染时,浏览器会将一个个元素表示为矩形盒子。 属性:
- content:实际内容
- border:边框
- padding:内边距
- margin:外边距
标准盒子模型:
- 盒子总宽度:width+border+padding+margin
- 盒子总高度:height+border+padding+margin
怪异盒子模型:
可以开启box-sizing: border-box;,开启后
总宽度=withd=内容+border+padding+margin
2.选择器及优先级
CSS常用选择器:
- 标签选择器
- 类选择器
- id选择器
- 后代选择器
- 子选择器
- 伪类选择器
- 伪元素选择器
CSS3新增选择器
- 层次选择器
- 伪类选择器
- 属性选择器
选择器优先级:标签<类<id<行内样式<通配符选择器
3.CSS中的属性继承
- 字体属性系列
font:组合字体
font-family:规定元素的字体系列
font-weight:设置字体的粗细
font-size:设置字体的尺寸
font-style:定义字体的风格
font-variant:偏大或偏小的字体
- 文本属性系列
text-indent:文本缩进
text-align:文本水平对齐
line-height:行高
word-spacing:增加或减少单词间的空白
letter-spacing:增加或减少字符间的空白
text-transform:控制文本大小写
direction:规定文本的书写方向
color:文本颜色
- 列表属性
list-style-type:文字前面的小点点样式
list-style-position:小点点位置
list-style:以上的属性可通过这属性集合
- 元素可见性/透明度
visibility
transiton
4.前端单位区别
px
px是“像素”,绝对单位。
em
em是相对单位,相对于当前对象内的font-size的大小。浏览器默认1em=16px
rem
rem是相对单位,相对于HTML根标签的font-size的大小。
vw/vh
是一个相对单位,相对于浏览器可视窗口的大小
5.CSS隐藏页面的元素
- display:none;不占位置
- visibility:hidden;占位置
- opacity:0;
- height:0;weight:0;
- 定位
.hide {
position: absolute;
top: -9999px;
left: -9999px;
}
6.BFC
块级格式化上下文:形成一个相对外界完全独立的空间,保护内部元素不受外界的干扰。
触发条件
- 浮动
- 绝对定位或者固定定位
- display:inline-block
- overflow:hidden;
使用场景
- 外边距塌陷
同一个BFC的两个上下的盒子的margin会重叠,以大的为主。
解决方案:在其中一个盒子外面包裹一层容器
- 清除内部浮动
overflow:hidden;
7.元素水平居中的方式
- 子绝父相,子的上下左右都给0,margin:auto;
- 子绝父相,后子元素:
top:50%;
left:50%;
margin-top:-50%;
margin-left:-50%;
- 子绝父相,后子元素:
top:50%;
left:50%;
transform:translate(-50%,-50%);
- flex布局,给父元素开启:
display: flex;
justify-content: center;
align-items: center;
8.两栏布局
给父元素开启flex布局,左孩子盒子给一个固定宽度,右孩子盒子给个flex:1;
<style>
.box{
display: flex;
}
.left {
width: 100px;
}
.right {
flex: 1;
}
</style>
<div class="box">
<div class="left">左边</div>
<div class="right">右边</div>
</div>
9.三栏布局(双飞翼,圣杯)
-
两边绝对定位,中间使用margin撑开。
-
flex布局,让中间的盒子自适应。
<style type="text/css">
.wrap {
display: flex;
justify-content: space-between;
}
.left,
.right,
.middle {
height: 100px;
}
.left {
width: 200px;
background: coral;
}
.right {
width: 120px;
background: lightblue;
}
.middle {
background: #555;
width: 100%;
margin: 0 20px;
}
</style>
<div class="wrap">
<div class="left">左侧</div>
<div class="middle">中间</div>
<div class="right">右侧</div>
</div>
- 仅需将容器设置为
display:flex;, - 盒内两边元素给固定宽度,将中间元素设置为
100%宽度,或者设为flex:1,即可填充空白 - 盒内元素的高度撑开容器的高度
10.CSS3新增了哪些新特性
- 阴影
- 文字特效
- 属性、伪类选择器
- 边框样式
border-radius:创建圆角边框
box-shadow:为元素添加阴影
border-image:使用图片来绘制边框
- transition过渡属性
transition: CSS属性,花费时间,效果曲线(默认ease),延迟时间(默认0)
- transform转换
transform: translate(120px, 50%):位移
transform: scale(2, 0.5):缩放
transform: rotate(0.5turn):旋转
transform: skew(30deg, 20deg):倾斜
11.css动画有哪些
- transition 实现渐变动画,根据时间改变
- transform 转变动画,变化位置
- animation 实现自定义动画
12.回流和重绘
回流:布局引擎会根据样式来计算盒子在页面上的位置和大小。
重绘:当计算好盒子的位置和大小后,将其渲染到页面上。
13.浏览器的解析和渲染机制
- 解析HTML,生成DOM树;同时解析CSS,生成CSSOM树。
- 将DOM树和CSSOM结合,生成render-tree。
- 回流
- 重绘
- 展示。将像素发给GPU,展示到页面上。
14.CSS sprit是什么?有什么优缺点?
将许多小图片拼接到一张图片里面,通过background-position来调节位置,展示要显示的内容。
优点
- 减少了http请求,提高了页面加载速度。
- 便于压缩。
- 便于更换风格,只需要更换大图片的颜色。
缺点
- 图片合并麻烦。
- 图片修改麻烦。
- 首次请求精灵图图片响应速度慢。
15.link和@import的区别
- link是HTML引入的方式,@import是CSS的引入方式。
- link权重大于@import。
- link最大限度支持并行下载;@import过多的嵌套会导致串行下载,会出现FOUC(文档样式短暂失效,页面闪烁)。
16.display与float、position的关系
如果display取值为none,则float、position都不起作用。
17.清除浮动的几种方式
- 父级div定义height
- 父级div也浮动,定义宽度
- 父级div定义 overflow:hidden
- 结尾处加空div标签
- 父级定义伪类 :after (最优解)
之所以清除浮动,是因为子元素如果浮动,则脱离标准流,若父元素靠子元素撑开,则此时会撑不开。
18.解决外边距塌陷
父子元素都有上外边距,则父元素塌陷较大值
同一个BFC的两个上下的盒子的margin会重叠,以大的为主。
- 给父元素底部增加border
- 给父元素底部增加padding
- 给父元素增加overflow:hidden
- 定位或者浮动
19.为什么要初始化CSS样式
因为浏览器的兼容问题,每个浏览器对标签的默认值都不尽相同,所以要初始化默认值。
但是,初始化CSS对SEO有影响,所以要在影响最小化的情况下初始化。
20.CSS3新增伪类有哪些?
-
p:first-of-type
-
p:last-of-type
-
p:only-of-type
-
P:only-of-child
-
p:nth-child(2)
-
:after 在元素之前添加内容,也可用来清除浮动
-
:before 在元素之后添加内容
-
:enable 已启用的表单元素
-
:disable 已禁用的表单元素
-
:checked 单选框或者复选框被选中
21.行内元素float:left后可否变为块级元素
浮动后更像是行内块元素,此时给他设置宽高都是有效果的。
22.行内元素和块级元素
块级元素
每个块级元素通常都会独占一行或者是多行,可以对其单独设置高度,宽度以及对齐等属性。
常见的块级元素有:<h1>~<h6>,<p>,<div>,<ul>,<ol>,<li>等
行内元素
行内元素(内联元素):不占有独立的区域,仅仅依靠自己的字体大小或者是图像大小来支撑结构。
一般不可以设置宽度,高度以及对齐等属性。特殊行内元素可以设置宽高:img,input。
常见的行内元素有:<a>,<strong>,<b>,<em>,<del>,<span>等
默认的宽度就是它本身的宽度
行内块元素
和其他行内或行内块级元素元素放置在同一行上;
元素的高度、宽度、行高以及顶
和底边距都可设置。
23.动画的最小间隔
一般屏幕刷新率是60HZ,即1s刷新60次,所以最小间隔理论是1/60*1000ms=16.7ms
24.CSS合并
避免使用@import导入多个文件,可以使用css工具将多个文件合并成一个css文件,例如Sass。
25.列出你知道的改变页面布局的属性
width ,height ,float ,left ,right ,position ,top ,bottom ,padding ,margin
26.Sass和Less是什么?为什么要使用他们?
他们是CSS预处理器,赋予了CSS语言的动态特性,例如变量,继承,运算,函数等
优点:
- 结构清晰
- 多级继承
- 无视浏览器之间的差异
- 完全兼容CSS,可以和老项目混合使用
27.如何实现小于12px的字体效果
transform:scale() 这个属性只可以缩放可以定义宽高的元素,而行内元素是没有宽高的,我们可以加上一个
display:inline-block;
28.前端要注意的SEO
- 合理的TDK
title,description,keywords。搜索权重逐个减小。title值要强调重点,不同页面要不同;不同页面的description也要不同;keywords要列举关键词。
-
语义化HTML,要符合W3C的标准,让搜索引擎更容易理解网页。
-
重要的HTML代码放在前面,因为搜索引擎抓代码是从上到下,要保证重要的被抓到。
-
重要内容不用JS。
-
少用iframe标签:里面的内容不会被浏览器抓取。
-
非装饰性图片要加alt属性。
-
提高网站速度:网站速度是搜索引擎排序的一个重要指标。
29.如何提高网站速度
content方面
-
减少HTTP请求:合并文件,CSS精灵,图片懒加载(当页面有很多图片时,先加载上面的,下面的等滚到时再加载)
-
减少DNS查询
-
减少DOM
server方面
-
使用CDN(简化很多耗时的优化任务,例如图片的渐进渲染)
-
对组件压缩
-
条件允许的话,尽量使用SSR
cookie方面
- 减小cookie大小
js方面
-
将脚本放在页面底部
-
精简,压缩脚本
-
从外部引入js
-
减少DOM访问
CSS方面
-
将样式表放在顶部
-
不使用CSS表达式
-
使用,不使用@import
30.HTTP的几种请求方法用途
- GET:发送一个请求来获得服务器上的资源。
- POST:向URL指定的资源提交数据。
- PUT:类似POST,也是向服务器提交数据,但是PUT指定了资源在服务器的位置。
- DELETE:删除服务器上的某资源。
31.对于浏览器内核的理解
主要有两部分:渲染引擎和JS引擎。
渲染引擎:获取网页内容,加入样式,计算页面的显示方式。
JS引擎:解释和执行JS,以此来实现页面的动态效果。
最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就偏向于只指渲染引擎。
32.HTML5的新特性
绘画canvas
媒体标签video和audio
localStorage和sessionStorage存储
新的表单控件:calendar,url,search等
新的技术:websocket(基于TCP的全双工通信协议。浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性连接,并进行双向数据传输)等。
33.HTML5离线存储怎么使用
用户没联网时,可以正常访问站点或者应用;当联网时,更新缓存文件。
原理:基于.appcache文件的缓存机制(不是存储),通过文件上的解析清单离线存储资源。之后再没网状态下,浏览器会将这些资源展示到界面上。
34.img的alt和title有什么不同
alt:当img不能正常显示时显示里面的文字
title:为设置该属性的元素提供建议性信息
35.渐进增强和优雅降级
渐进增强:针对低版本浏览器构建页面,保证最基本的功能,然后针对高级浏览器进行优化。
优雅降级:一开始就构建完整的功能,然后针对低版本浏览器进行兼容。
36.一个页面上有大量图片,如何进行优化?
-
懒加载
-
预加载
-
渐进渲染
-
大图片使用精灵图
-
小图片使用Iconfont,Base64等技术
37.Logo SEO优化
-
logo里面放一个h1标签,目的是为了提高权重,告诉浏览器这个地方很重要
-
h1面放一个链接,可以返回首页的。
-
链接里面要放网站名称,但文字不要显示。(font-size=0)
38.CSS中的渐进增强,优雅降级
优雅降级:产品优先在高版本浏览器中使用,但是要向下兼容旧版本的浏览器。
渐进增强:从低版本的浏览器进行适配。
39.定位position
- static:静态定位,不脱离文档流。top,right,bottom,left等属性不生效。
- absolute:绝对定位,脱离文档流,相对定位的父元素进行定位。左右margin为auto将会失效,通过top,right,bottom,left来决定元素位置。
- relative:相对定位,参照物为原来的位置,不脱标,左右margin为auto不会失效。
- fixed:固定定位,参照物为浏览器窗口,不会脱离文档流。