## **HTML5**
### 语义化标签
> header、nav、footer、section、article、aside 优点:更好的SEO,更清晰的HTML结构,增强了可读性,便于维护开发
- header:定义页面或文章头部,通常包含logo、页面标题等
- nav:定义只包含导航链接的章节
- section:定义文档中的一个章节/部分
- aside:定义和页面内容关联度较低的内容(即使删除,剩下的内容仍然合理)
- footer:定义页面或章节的尾部,通常包含版权信息、法律信息和反馈建议等有效链接地址
### 媒体标签:
audio(音频)、video(视频)
不需要第三方插件就能播放音频和视频了,可以直接插入,并且用同一的API接口控制。
### SVG和Canvas
> SVG:可缩放矢量图形,svg并不是html5专有的标签
- 不依赖分辨率
- 支持事件处理器
- 最适合带有大型渲染区域的应用程序(比如谷歌地图)
- 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
- 不适合游戏应用
> Canvas:画布
- 依赖分辨率
- 不支持事件处理器
- 弱的文本渲染能力
- 能够以 .png 或 .jpg 格式保存结果图像
- 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
**SVG和Canvas区别:**
- Canvas是使用javaScript程序绘制动态生成的,SVG是使用xml文档描述来绘图。从这点来看:SVG更适合用来做动态交互,而且SVG绘图更容易编辑
- SVG是基于矢量的,所以它能够很好的处理图形大小的变大。canvas是基于位图的图像,他不能改变大小,只能缩放显示,最适合带有大型渲染区域的应用程序(比如谷歌地图)
- canvas支持的颜色比SVG多,更适合图像密集型的游戏之类使用
### Geolocation定位:
Geolocation:是window.navigator下面的一个对象,该对象提供了实现地理位置定位的接口。要用该功能首先判断浏览器是否支持navigator.geolocation该对象。
### localStorage和sessionStorage和Cookie
- 用法:
- 存储:
- 普通类型:window.localStorage.setItem('key',value);
- OBject类型:window.localStorage.setItem('param',JSON.stringify(Object))
- 读取:
- 普通类型:window.localStorage.getItem('key');
- OBject类型:JSON.parse(window.localStorage.getItem('key'))
- 删除:
- window.localStorage.removeItem('key')
- 清除缓存:
- localStorage.clear()
- > localStorage和sessionStorage一样都是用来存储客户端临时信息的对象。
- 他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。
- localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
- sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
- 不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。
- > cookie和它们的区别:
- cookie数据始终每次http请求都会携带cookie,浏览器和服务器间来回传递;而sessionStorage和localStorage不会自动把数据发送给服务器;
- 存储大小限制也不同,cookie单个cookie数据不能超过4K,sessionStorage和localStorage可以达到5M或更大;
- 数据有效期不同,cookie只在设置的cookie过期时间之前有效,即使窗口关闭或浏览器关闭;
- 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面; localstorage在所有同源窗口 中都是共享的; cookie也是在所有同源窗口中都是共享的。
- cookie使用:
- 写入:document.cookie='username=xxxx';
- 读取:document.cookie;
### fetch请求方式:
- Fetch是浏览器内置API,Ajax的替代者,在浏览器环境中,封装了Promise机制,可以通过顶层对象window获取,优化了异步问题——可以直接用.then()方法。
```javascript
const url = "https://gitee.com/api/v5/users/liyangyf";
fetch(url).then( response=>response.json() ) // 将response数据解析成json
.then( json=>console.log(json) )
```
### input新类型:
- email : 提交表单时检测值是否是一个电子邮件格式
- url: 提交表单时检测值是否是一个url格式
- date: 年-月-日格式的控件
- time: 时:分格式的控件
- datetime-local : 年-月-日 时:分 格式的控件(本地时间)
- month : 年-月格式的控件
- week: 年-周数格式的控件
- number: 数字输入框
- Range : 选择区域
- tel: 电话输入框
- search: 用于搜索
- color: 调用系统选色器
### input新属性:
- placeholder: 占位符,输入框提示信息
- required: 该input为必填项
- autofocus: 在页面加载时,域自动地获得焦点
- Pattern : 正则验证 如: pattern="[0-9]{7,12}"
- min/max: input能输入的最小/最大数字的大小
- maxlength:input能输入的最大字节的长度(最多可以输入的文字或者字母的个数)
- Step;针对number和range类型,每次递增step的值
- list: 指定一个datalist,作为下拉提示单
## **CSS**
### CSS3 新特性有哪些?
1. 颜色:新增 rgba(),HSLA 模式
2. 文字阴影(text-shadow、)
3. 边框: 圆角(border-radius)边框阴影: box-shadow ; 边框图片:border-image
4. 盒子模型:box-sizing
5. 背景:background-size 设置背景图片的尺寸 background-origin 设置背景图片的原
点,background-clip 设置背景图片的裁切区域,以”,”分隔可以设置多背景,用于自
适应布局
6. 渐变:linear-gradient、radial-gradient
7. 过渡:transition,可实现动画
8. 自定义动画
9. 在 CSS3 中唯一引入的伪元素是 ::selection.
10. 媒体查询,多栏布局
11. 2D 转换:transform:translate(x,y) rotate(x,y) skew(x,y) scale(x,y)
12. 3D 转换:transform:translate3d(x,y,z)
### Scss与Less区别
- 变量不同:less-@ scss-$
- 运算: scss 加减法中 计算单位必须相同;less 加减法中可以不同单位进行运算
- 作用域不同, less 存在变量提升 scss 没有变量提升 $number:1px @number:1px
### 什么是BFC
BFC直译为‘块级格式化上下文’。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 block-level box,display属性为block, list-item, table的元素,会生成block-level box。并且参与block fomatting context。
### BFC特性
- Box垂直方向的距离由margin决定,属于同一个BFC的两个相邻box的margin会发生重叠
- 计算BFC的高度时,浮动元素也参与计算
- BFC的区域不会与float box发生重叠
- BFC内部的Box会在垂直方向,一个接一个的放置
- 每个元素的margin box的左边会与包含块border box的左边相接触(对于从左到右的格式化,否则相反),即使存在浮动也会如此
- BFC就是页面上的一个独立容器,容器里面的元素不会影响到外面的元素
### CSS问题
> 清除图片间隙
- 清除图片左右间距
1. 两张图片挨着写(img标签挨在一起)
2. 父元素的font-size设置为0
3. 给图片设置浮动
- 清除图片上下间距
1. 图片设置为display:block
2. 给图片设置vertical-align:top/bottom/middle
> 元素水平垂直居中
- 弹性盒
\- 父元素:display:flex;子元素:margin:auto;
\- 父元素:display:flex;justify-content:center;align-item:center;
- 定位
\- 父元素:position:relative;子元素:position:absolute;left:0;right:0;bottom:0;top:0;margin:auto;
- 定位+2D变形
\- 父元素:position:relative;子元素:position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
### css长度单位
- px:常用的绝对长度单位,相对与显示器分辨率而定位的单位,兼容性较好
- 百分比:常用相对长度单位,相对于父元素的尺寸取值
- pt:绝对长度单位 1px = 0.75pt
- em:相对长度单位,相对于当前元素内部的文本尺寸
- rem:css3新增的相对长度单位,相对的是根元素HTML的文本尺寸
- vw:相对视窗宽度的百分比(1vw代表视窗宽度1%)
- vh:相对视窗高度的百分比
- vmax:当前vw和vh中较大的值
- vmin:当前vw和vh中较小的值
### 高度塌陷
高度塌陷是因为所有的子元素浮动,且父元素没有设置高度,就会触发父元素高度塌陷;
> 给父元素添加固定高度; 缺点:不适合高度自适应的布局。
> 给父元素添加overflow:hidden;
### 行内元素、块状元素、行内块状元素
> 行内元素
1. 设置宽高无效
2. margin设置仅左右有效,padding设置上下左右都有效
3. 不会自动换行
> 块状元素
1. 可以设置宽高
2. margin,padding上下左右均有效
3. 会自动换行
4. 块状元素排列从上至下(未脱离文档流时)
> 行内块状元素
1. 不会自动换行
2. 可以设置宽高
3. 默认排列从左至右
### css选择器
!importent > 行内样式 > id选择器 > 类选择器 > 标签选择器 > 通配符选择器
### 动画和过渡区别
> animation(动画)、transition-property(过度)
- 动画不需要事件触发,过渡需要,
- 过渡只有开始和结束两个关键帧,动画可以设置多个关键帧
### 元素水平垂直居中
- 弹性盒
- 父元素:display:flex;子元素:margin:auto;
- 父元素:display:flex;justify-content:center;align-item:center;
- 定位
- 父元素:position:relative;子元素:position:absolute;left:0;right:0;bottom:0;top:0;margin:auto;
- 定位+2D变形
- 父元素:position:relative;子元素:position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
### 重绘和回流
> 回流:当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建时,这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建render tree
> 重绘:浏览器会重新绘制受影响的部分到屏幕中,该过程称之为重绘
> 当render tree中的一些元素需要更新属性时,而这些属性只是影响元素的外观、风格而不会影响布局的时候,比如background-color,文字颜色、边框颜色等。则就称为重绘。
**回流一定会触发重绘,而重绘不一定会回流**
## **JavaScript**
### js运行机制
首先我们需要了解JavaScript的特性就是单线程,单线程简单的说就是同一时间只能做一件事。那么为什么是单线程呢?作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程再某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?
单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。多线程可以将任务放到不同的线程中去处理。CPU的调度单位是线程,它会在不同的线程之间切换,任务是隶属于线程的
于是,JavaScript中所有