W3C 标准
- 需要声明(
DOCTYPE)文档类型 - 需要定义语言编码
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" charset="utf-8" /> JS必须要用<script language=“javascript” type=“text/javascript”>来开头定义CSS必须要用<style type=“text/css”>开头来定义- 正确使用注释,不要在注释内容中使用
– - 所有标签的元素和属性名字都必须使用小写
- 所有的属性必须用引号
" "括起来 - 所有特殊符号(
<和&)用编码表示 - 所有属性必须有属性值
- 所有的标记都必须有相应的结束标记
- 所有的标记都必须合理嵌套
- 图片添加有意义的
alt属性 - 在
form表单中增加label,以增加用户友好度
Web 语义化
指使用恰当语义的html标签、class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容。
利于SEO,便于阅读维护理解。
- 正确的标签做正确的事情
- 页面内容结构化
- 便于阅读维护和理解
- 便于浏览器、搜索引擎解析。利于爬虫标记、利于SEO
@import 和 link的区别
| 名称 | 从属关系 | 加载顺序 | 缺点 |
|---|---|---|---|
| @import | CSS 提供的语法规则,导入样式表 | 页面加载完毕后,加载 | 阻塞加载,兼容性差 |
| link | HTML提供的标签,可以加载 CSS 文件、定义 RSS、rel 连接属性 | 加载页面,同时加载 |
CSS 盒模型
标准盒模型 box-sizing = content-box
width/height = content
IE 盒模型 box-sizing = border-box
width/height = border + padding + content
px、em、rem 区别
px
相对长度单位。相对于显示器屏幕分辨率。
em
相对长度单位。相对于当前对象内(元素)文本的字体大小
rem
相对长度单位。相对于HTML根元素的字体大小
display 常用属性
display: block;:块级元素display: inline;:行内元素display:table;:表格布局display: grid;:网格布局display:flex;:弹性布局display: none;:隐藏元素display: inline-block;:行内块元素display: inline-table;:行内表格元素display: inline-flex;:行内弹性布局display: inherit;:继承父元素的 display属性
清楚浮动
- 伪类
- overflow: hidden
布局
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 | 子项目在交叉轴上的对齐方式 | stretch 如果子项目未设置高度或设为 auto,将占满整个容器的高度。 | flex-start 交叉轴起点; flex-end 交叉轴终点; center 交叉轴居中; baseline 项目的第一行文字的基线对齐。(文字的行高、字体大小会影响每行的基线) |
align-content | 多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用 | stretch 轴线占满整个交叉轴 | 同 justify-content,只是为交叉轴 |
子项目的属性
| 属性 | 描述 | 默认值 | 其他值 |
|---|---|---|---|
order | 排列顺序,数值越小,排列越靠前 | 0 | |
flex-grow | 扩展比例,基于剩余空间 | 0 如果存在剩余空间,也不放大 | |
flex-shrink | 缩小比例 | 1 如果空间不足,该项目将缩小 | 示例: 0 不被挤压、缩小,显示正常; 2 宽度为原来宽度的二分之一 |
flex-basis | 占据的主轴空间。如果主轴为水平,设置这个属性,相当于设置项目的宽度,原 width 将会失效 | auto | |
flex | flex-grow, flex-shrink 和 flex-basis 的简写 | 0 1 auto | |
align-self | 单个项目自身在交叉轴上的排列方式,可以覆盖掉父容器上的 align-items 属性 | auto 继承父容器的 align-items 属性值 | 同父容器 align-items |
双栏布局
使用 float 左浮左边栏,右边模块使用 margin-left 撑出内容块做内容展示
三栏布局
左右两栏固定宽度,中间自适应
| 布局方案 | 具体实现 | 缺点 | 优点 |
|---|---|---|---|
| 浮动 | 左右两栏固定宽度和浮动,中间栏增加左右外边距 | 当宽度缩小到不足以显示三栏时,右侧栏会被挤到下方 | 兼容性好 |
| 绝对定位 | 容器为相对定位,左右两栏分绝对定位,中间栏增加左右外边距 | 宽度缩小到无法显示主体内容时,主体内容会被覆盖无法显示 | 内容可以优先加载 |
| Flex | 容器为flex,左右栏固定宽度不可伸缩,中间栏为自动伸缩 | 无法兼容低版本的浏览器 | 代码简洁,DOM结构清晰,主流实现方式 |
| 网格 | 容器为grid,设置三栏的宽度 | 兼容性相对弹性盒要差 | 代码简洁,DOM结构清晰 |
| 表格 | 容器为table且宽度为100%,子元素为table-cell | 非语义化 | 兼容性好 |
| 圣杯 | 左中右三栏分别左浮动。中间栏width 为 100%。左栏margin-left为 -100% 。右栏margin-left为自身宽度的负值。容器设置左右 padding 为左右两栏留出空间,以展示中间栏内容。左右两栏为相对定位,左栏的 left 和右栏的 right 为内边距的宽度的负值。 | 当中间栏宽度比左栏宽度小时,布局会发生混乱 | 内容可以优先加载,兼容性好 |
| 双飞翼 | 基于圣杯布局,引入一个容器来放置中间栏,并且设置中间栏的外边距,不需要使用相对定位。中间栏的子元素左右边距为左右栏的width,以展示中间栏内容。 | DOM结构较复杂 | 支持内容优先加载;当中间栏宽度比左栏宽度小时,布局不会发生混乱 |
BFC
BFC 即 Block Formatting Contexts(块级格式化上下文)
具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素
触发条件(任意一个)
HTML根元素- 浮动元素:
float除none以外的值 - 绝对定位元素:
position(absolute、fixed) display为inline-block、table-cells、flex、flow-rootoverflow除了visible以外的值 (hidden、auto、scroll)
应用场景
- 相邻元素margin重叠问题
- 自适应两栏布局
- 清除浮动
前端数据存储方式 localStorage、sessionStorage、cookie 对比
| 储存方式 | 生命周期 | 存储容量 | 存储位置 | 应用场景 |
|---|---|---|---|---|
| cookie | 保存在内存中,随浏览器关闭失效,如果设置过期时间,则到过期后失效 | 4KB | 保存在客户端,每次请求时都会带上 | 跟踪浏览用户身份 |
| localStorage | 永久有效,除非主动清除 | 4.98MB(不同浏览器情况不同) | 保存在客户端,不与服务端交互。节省网络流量 | 页适合持久化缓存数据,比如页面的默认偏好配置等 |
| sessionStorage | 仅在当前网页会话下有效,关闭页面或浏览器后会被清除 | 4.98MB(部分浏览器没有限制) | 保存在客户端,不与服务端交互。节省网络流量 | 适合一次性临时数据保存 |
HTTP常见状态码
1xx - 信息响应
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
- 100 -
Continue 继续初始的请求已经接受,客户端应当继续发送请求的其余部分。如果已经完成,则忽略它 - 101 -
Switching Protocols 交换协议服务器将遵从客户的请求转换到另外一种协议 - 102 -
Processing 处理中服务器已收到并正在处理该请求,但没有响应可用
2xx - 成功响应
这类状态代码表明服务器成功地接受了客户端请求。
- 200 -
Ok 成功请求成功。服务器已成功处理了请求 - 201 -
Created 已创建请求成功并且服务器创建了新的资源 - 202 -
Accepted 已接受服务器已接受请求,但尚未处理 - 203 -
Non-Authoritative Information 非授权信息服务器已成功处理了请求,但文档可能来自另一来源,非权威性信息 - 204 -
No Content 无内容服务器成功处理了请求,但没有返回任何内容。 - 205 -
Reset Content 重置内容服务器成功处理了请求,但没有返回任何内容。但浏览器应该重置它所显示的文档。用来强制浏览器清除表单输入内容 - 206 -
Partial Content 部分内容客户端发送了一个带有Range头的GET请求(分块请求),服务器完成了它
3xx - 重定向
客户端浏览器必须采取更多操作来实现请求
- 300 -
Multiple Choices 多选客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。 - 301 -
Moved Permanently 永久重定向永久重定向。请求的资源已被分配了新的URL(URL在Location头部),以后应使用新的URL - 302 -
Found 临时重定向临时重定向。类似于301,但新的URL应该被视为临时性的替代,而不是永久性的 - 303 -
See Other类似于301/302。不同之处在于,如果原来的请求是POST,Location头部指定的重定向资源应该通过GET提取 - 304 -
Not Modified 未修改客户端发送了一个有条件的请求。服务器告诉客户端,原先的文档还可以继续使用。 - 305 -
Use Proxy 使用代理服务器被请求的资源必须通过指定的代理才能被访问,代理的位置在Location头部 - 307 -
Temporary Redirect 临时重定向临时重定向。和302大致相同
4xx - 客户端错误
发生错误,客户端有问题
- 400 -
Bad Request 错误的请求请求出现语法错误 - 401 -
Unauthorized 未经授权访问被拒绝,当前请求需要用户验证 - 403 -
Forbidden 禁止资源不可用,服务器理解客户端的请求,但拒绝处理它 - 404 -
Not Found 未找到请求失败,服务器上无法找到请求的资源 - 405 -
Method Not Allowed 不允许的方法请求方法对指定的资源不适用 - 406 -
Not Acceptable 不接受指定的资源已经找到,但它的的内容特性(MIME)无法满足请求头中(Accpet)的条件 - 407 -
Proxy Authentication Required 需要代理身份验证类似于401,表示客户端必须先经过代理服务器的授权 - 408 -
Request Timeout 请求超时请求超时。在服务器许可的等待时间内,客户一直没有发出任何请求 - 409 -
Conflict 冲突请求无法完成。和被请求的资源的当前状态之间存在冲突 - 410 -
Gone 已删除所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址
5xx - 服务器错误
服务器由于遇到错误而不能完成该请求
- 500 -
Internal Server Error 内部服务器错误服务器遇到了意料不到的错误情况,不能完成客户端的请求 - 501 -
Not Implemented 未实现请求方法不被服务器支持且无法被处理。例如,客户发出了一个服务器不支持的PUT请求 - 502 -
Bad Gateway 错误的网关服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答 - 503 -
Service Unavailable 暂停服务服务不可用,服务器由于维护或者负载过重未能应答 - 504 -
Gateway Timeout 网关超时网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答
浏览器从 URL 输入到页面展现的整个过程
DNS 域名解析
TCP 三次握手
- 客户端发送标有 SYN 的数据包,表示我将要发送请求
- 服务端发送标有 SYN/ACK 的数据包,表示我已经收到通知,告知客户端发送请求
- 客户端发送标有 ACK 的数据包,表示我要开始发送请求,准备被接受
发送 HTTP 请求
服务器处理请求并返回 HTTP 报文
浏览器解析渲染页面
- 根据 HTML 解析 DOM 树
- 根据 CSS 解析生成 CSS 规则树
- 结合 DOM 树和 CSS 规则树,生成渲染树
- 布局:通过渲染树中渲染对象的信息,计算出每一个渲染对象的位置和尺寸
- 回流:在布局完成后,某个元素的尺寸发生了变化影响了布局,则需重新计算渲染树,重新渲染
- 绘制:根据计算好的信息绘制页面
- 重绘:某个元素的背景颜色,文字颜色等,不影响元素周围或内部布局的属性发生变化,将只会引起浏览器的重绘。
断开连接,TCP 四次挥手
- 客户端发送请求,申请断开连接。此时不会发送数据,但是会继续接收数据
- 服务端接收请求后,告知客户端已明白。不会再接收数据,但是会继续发送数据
- 服务端发送完剩余的数据后,告知客户端可以断开连接。此时服务端不会发送和接收数据
- 客户端收到后,告知服务端我开始断开连接
TCP / IP 协议, HTTP / HTTPS 协议
TCP / IP协议
传输层协议,主要是解决数据如何在网络中传输
HTTP / HTTPS 协议
应用层协议,主要是解决如何包装数据
HTTP
超文本传输协议(Hypertext Transfer Protocol )。是建立在 TCP 协议之上的一种应用。
特点:客户端发送的每次请求 都需要服务器回送响应,在请求结束后,会主动释放连接。这个过程称为“一次连接”。
HTTP 和 HTTPS 的区别
- HTTPS 需要申请证书
- HTTPS 是超文本传输协议,属于明文传输。 HTTPS 是具有安全性的 SSL 加密传输协议
- HTTP 和 HTTPS 是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443
- HTTP 的连接很简单,是无状态的。HTTPS 是由 SSL+HTTP 构建的可进行加密传输、身份认证的网络协议,比 HTTP 安全。