# HTML5
**Repository Path**: yushi5344/html5
## Basic Information
- **Project Name**: HTML5
- **Description**: No description available
- **Primary Language**: HTML
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-14
- **Last Updated**: 2021-09-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HTML5
1. 概述
HTML5是定义HTML标准的最新版本.
是唯一一个能通吃PC,MAC,iPhone,Android 等主流平台的跨平台语言.
2. DOCTYPE
`DOCTYPE` 全称`Document Type Declaration`(文档类型声明)
通常情况下,DOCTYPE位于HTML文档最前面,位于根元素HTML的起始标签之前
|传统名称|和HTML草案名称|document.compatMode返回值|
| :---: | :---: | :---: |
| standards mode | no-quirks mode| CSS1Compat|
|almost standars mode | limited-quirks mode |CSS1Compat|
| quirks mode | quirks mode | BackCompat|
3. 语义化标签
```html
```
# JavaScript
## 数据类型的分类和判断
1. 数据类型
- 基本数据类型
- String
- Number
- boolean
- undefined
- null
- 引用数据类型
- Object 任意对象
- Function 一种可以执行的对象
- Array 一种数值下标,内部有序对象
2. 类型判断
- typeof
数据类型的字符串表达
```javascript
console.log(typeof 1)// number
console.log(typeof "1") // string
console.log(typeof true) //boolean
console.log(typeof undefined) // undefined
console.log(typeof null) // object
console.log(typeof {}) // object
console.log(typeof [])// object
console.log(typeof alert) // function
```
- instanceof
实例 判断对象的具体类型
```javascript
console.log(1 instanceof Number)//false
console.log('1' instanceof String)//false
onsole.log({} instanceof Object)// true
console.log([] instanceof Object,[] instanceof Array)// true true
console.log(alert instanceof Object,alert instanceof Function)// true true
```
- ===
可以判断undefined,null
3. 类型
- undefined和null的区别
- undefined代表定义未赋值
- null定义赋值了,只是值为null
- 什么时候赋值给变量null呢
- 初始赋值,表名将要赋值为对象
- 结束前,让对象称为垃圾对象(被垃圾回收器回收)
- 严格区别数据类型和变量类型
- 数据类型
- 基本
- 对象
- 变量类型
- 基本: 保存的是基本类型的数据
- 引用: 保存的是地址值
4. 数据,变量和内存的理解
- 什么是数据
- 在内存中可读的,可传递的保存了特定信息的东东
- 一切皆数据,函数也是数据
- 在内存中所有操作的目标 :数据
- 什么是变量
- 在程序运行中它的值是允许改变的量
- 一个变量对应一小块内存,它的值保存在次内存中
- 什么是内存
- 内存条通电后产生的存储空间
- 一块内存包含两个方面的数据
- 内部存储的数据
- 地址值数据
- 内存空间的分类
- 堆内存: 对象
- 栈内存: 全局变量或者局部变量
- 内存数据和变量之间的关系
- 内存是容器,用来存储不同的数据
- 变量是内存的标示,通过变量我们可以操作内存中的数据
5. 对象的理解和使用
- 什么是对象
- 多个数据,属性的集合
- 用来保存多个数据的容器
- 属性组成
- 属性名: 字符串
- 属性值: 任意类型
- 属性分类
- 一般: 属性值不是function, 描述对象的状态
- 方法: 属性值为function 描述对象的行为
- 特别对象
- 数组,属性值为数字索引
- 函数 可以执行的对象
- 如何操作内部方法
- `.属性名`
- `["属性名"]`
6. 函数的理解和使用
- 什么是函数
- 用来实现特定功能的n条语句的封装体
- 只有函数类型的数据是可以执行的,其他的都不可以
- 为什么要用函数
- 提交复用性
- 便于阅读交流
- 函数也是对象
- instanceof Object===true
- 函数有属性 prototype
- 函数有方法 bind,call,apply
- 可以添加新的属性/方法
- 函数的三种不同角色
- 一般函数 直接调用
- 构造函数 通过new调用
- 对象 通过`.`调用内部属性或者方法
- 函数中this
- 显示指定 obj.xxx
- 通过call/apply/bind指定谁调用 xxx.call(obj)
- 不指定调用 window
- 回调函数 看背后是通过谁来调用它
- 匿名函数自调用
```javascript
;(function(){
// ....
})()
```
专业术语 IIFE
- 回调函数理解
- 什么是回调函数
- 你定义的
- 你没有调用
- 但它最终执行了
- 常用的回调函数
- DOM事件回调
- 定时器回调
- Ajax请求回调
- 生命周期回调

## 原型和原型链
1. 原型与原型链
- 所有的函数都有个特别的属性
- `prototype` 显示原型属性
- 所有的实例对象都有一个特别的属性
- `__proto__` 饮食原型属性
- 显式原型与隐式原型的关系
- 函数的`prototype` 定义函数时自动赋值,默认为{},即用为原型对象
- 实例对象的_`_proto__` 在创建实例对象时被自动创建,并赋值为构造函数的prototype属性
- 原型对象即为当前实例对象的父对象
- 原型链
- 所有的实例对象都有`__proto__`属性 它指向的是原型对象
- 这样通过`__proto__`属性就形成了一个链的结构-->原型链
- 当查找对象内部的属性和方法时,js引擎会自动沿着这个原型链查找
- 当给对象属性赋值时,不会使用原型链,而只是在当前对象中进行操作
2. 执行上下文和执行上下文栈
- 变量提升与函数提升
- `变量提升` 在变量定义语句前,就可以访问到这个变量
- `函数提升` 在函数定义语句前,就执行该函数
- 先有变量提升,后有函数提升
- 理解
- `执行上下文` 由js引擎自动创建的对象,包含对应作用域中的所有变量属性
- `执行上下文栈` 用来管理产生的多个执行上下文
- 分类
- `全局` `window`
- `函数` 对程序员来说是透明的
- 生命周期
- `全局` 准备执行全局代码前产生,当页面刷新/关闭时死亡
- `函数` 调用函数时产生,函数执行完死亡
- 包含哪些属性
- 全局
- 使用var定义的全局变量 `undefined`
- 使用function定义的全局变量 `function`
- this `window`
- 函数
- 使用var定义的变量 `undefined`
- 使用function声明的函数 `function`
- this 调用函数的对象,如果没有就是`window`
- 形参 对应实参值
- `arguments` 实参列表的伪数组
- 执行上下文创建和初始化的过程
- 全局
- 在全局代码执行前创建一个全局执行上下文 `window`
- 收集一些全局变量,并初始化
- 将这些变量设置为window属性
- 函数
- 在调用函数时,在执行函数体之前创建一个函数执行上下文
- 收集一些局部变量,并初始化
- 将这些变量设置为执行上下文属性
3. 作用域和作用域链
- 理解
- `作用域`: 一块代码区域,在编码时就确定了,不会再变化
- `作用域链` 多个嵌套的作用域形成的由内向外的结构,用于查找变量
- 分类
- 全局
- 函数
- 块作用域
- 作用
- `作用域`:隔离变量,可以在不同的作用域定义的同名变量不冲突
- `作用域链` :查找变量
- 区别作用域与执行上下文
- `作用域` :静态的 编码时就确定了,一旦确定就不会变化了
- `执行上下文` : 动态的,在执行代码时创建,执行结束小时
- `联系`: 执行上下文环境是对应的作用域中的
4. 闭包
- 理解
- 当嵌套的内部函数引用了外部函数的变量时就产生了闭包
- 通过Chrome控制台得知: 闭包本质是函数内部的一个对象,这个对象中包含引用的变量属性
- 作用
- 延长局部变量的生命周期
- 让函数外部能够操作内部的局部变量
- 编码
```javascript
function fn1() {
var a = 2;
function fn2() {
a++;
console.log(a);
}
return fn2;
}
var f = fn1();
f();
f();
```
- 应用
- 模块化
- 循环遍历加监听
- js库JQuery使用了大量的闭包
- 缺点
- 变量占用内存时间过长
- 可能导致内存泄露
5. 内存溢出和内存泄露
- 内存溢出
- 内存泄露

## 面向对象
1. 创建对象方式
- Object构造函数模式
```javascript
var obj = {};
obj.name = 'Tom'
obj.setName = function(name){this.name=name}
```
- 对象字面量模式
```javascript
var obj = {
name : 'Tom',
setName : function(name){this.name = name}
}
```
- 构造函数模式
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
this.setName = function(name){this.name=name;};
}
new Person('tom', 12);
```
- 构造函数+原型的组合模式
```javascript
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.setName = function(name){this.name=name;};
new Person('tom', 12);
```
2. 继承模式
- 原型链继承:得到方法
```javascript
function Parent(){}
Parent.prototype.test = function(){};
function Child(){}
Child.prototype = new Parent(); // 子类型的原型指向父类型实例
Child.prototype.constructor = Child
var child = new Child(); //有test()
```
- 借用构造函数:得到属性
```javascript
function Parent(xxx){this.xxx = xxx}
Parent.prototype.test = function(){};
function Child(xxx,yyy){
Parent.call(this, xxx);//借用构造函数 this.Parent(xxx)
}
var child = new Child('a', 'b'); //child.xxx为'a', 但child没有test()
```
- 组合
```javascript
function Parent(xxx){this.xxx = xxx}
Parent.prototype.test = function(){};
function Child(xxx,yyy){
Parent.call(this, xxx);//借用构造函数 this.Parent(xxx)
}
Child.prototype = new Parent(); //得到test()
var child = new Child(); //child.xxx为'a', 也有test()
```
- new 一个对象后做了些什么
- 创建一个空对象
- 给对象设置__proto__,值为构造函数对象的prototype,即
```javascript
this.__proto__=Fn.prototype
```
- 执行构造函数体 给对象添加属性/方法

## 线程与进程
1. 线程,进程
- 进程
- 程序的一次执行,它战友一片独有的内存空间
- 可以通过windows任务管理器查看进程
- 线程
- 是进程内的一个独立执行单元
- 是程序执行的一个完整流程
- 是CPU的最小调度单元
- 关系
- 一个进程至少有一个线程
- 程序是在某个进程内的某个线程执行的
2. 浏览器内核模块组成
- 主线程
- js引擎模块:负责js的编译与运行
- HTML,CSS文档解析模块:负责文本的解析处理
- DOM/css模块: 负责dom/css在内存中的相关处理
- 布局和渲染模块: 负责页面的布局和效果的绘制
- 分线程
- 定时器模块:负责定时器管理
- DOM事件模块
- 网络请求模块
3. js线程
- js是单线程
- h5提出了多线程的解决方案
- 只能是主线程更新界面
4. 定时器问题
- 定时器并不真正完全定时
- 如果在主线程执行了一个长时间的操作,可能导致延时才处理
5. 事件处理机制

# CSS3
1. 新增选择器
- 根据类型
- `first-of-type` 同一类下第一个
- `last-of-type` 同一类下最后一个
- `nth-of-type(n)` 同一类下第n个
- `nth-last-of-type(n)` 同一类下倒数第n个
```css
p:first-of-type{
color: red;
}
p:last-of-type{
color: blue;
}
p:nth-of-type(2){
color: aqua;
}
p:nth-last-of-type(2){
color: blueviolet;
}
```
- 根据顺序
```css
p:first-child{
font-size: 18px;
}
p:last-child{
font-size: 24px;
}
p:nth-child(2){
font-size: 20px;
}
p:nth-last-child(2){
font-size: 28px;
}
```
- 根据属性
- `::selection` CSS伪元素应用于文档中被用户高亮的部分(比如使用鼠标或其他选择设备选中的部分)
- `:not(p)` 排除p元素
- `:root` 根目录 同html,优先级高
- `[attr=""]`属性选择
```css
p::selection{
background: chartreuse;
}
.paragraphs :not(p){
background: brown;
}
:root{
background: #ebebeb;
}
input[type="text"]{
width: 100px;
}
input[type="text"]:enabled{
border: 1px solid forestgreen;
}
input[type="text"]:disabled{
border: 1px solid red;
}
input[type="radio"]{
width: 25px;
height: 25px;
}
input[type='radio']:checked{
width: 35px;
height: 35px;
}
```
- target
`:target` CSS 伪类 代表一个唯一的页面元素(目标元素),其id 与当前URL片段匹配 .
```html
点击我news1变绿色
点击我new2变红色
我是IDnews1
我的ID为new2
```
```css
#news1:target{
color: green;
}
#news2:target{
color: orangered;
}
```
2. css3装换
- `translate` 根据x轴和Y轴给定的参数,从当前元素位置移动
- `rotate` 在一个给定度数旋转的元素,负值表示逆时针
- `scale` 表示该元素增加或者减少的多少,取决于宽度和高度的参数
- `skew` 包含两个参数值,分别代表X轴和Y轴倾斜的角度,如果第二个参数为空,则为0,参数为负表示反方向倾斜
- `matrix` 前四个方法合为一个.
- `transform-origin` 设置转换原点,默认为(50%,50%),表示以元素中心点为转换原点,除了使用固定值和百分比之外,也可使用left,top,center,bottom,right等控制.
3. css3过渡
`transform`只能使元素的样子发生改变,并不能使它动起来,要让元素动起来,还需要过渡
css3过渡是元素从一种样式逐渐过渡到另一种效果.
- `transition-property` 规定应用过渡的css属性的名称
- `transition-duration` 定义过渡效果花费的时间 默认是0
- `transition-timing-function` 规定过渡效果的时间曲线 默认ease
- `liner` 以相同速度开始至结束
- `ease` 慢速开始,然后变快,最后慢慢结束
- `ease-in` 规定以慢速开始的过渡效果
- `ease-out` 规定以慢速结束的过渡结果
- `ease-in-out` 规定以慢速开始喝结束的过渡效果
- `cubic-bezier` 在贝塞尔曲线函数定义
- `transition-delay` 规定过渡效果何时开始
- 简写形式
```css
transition:height 1s liner 2s;
/*
transition :名称 持续时间 时间曲线函数 延迟
*/
```
4. `~`选择器和`+`选择器
- `~`选择器 ele1~ele2 匹配出现在ele1后面的ele2
- `+`选择器 ele1+ele2 匹配出现在ele1后面临近的ele2
5. border-raduis 圆角
- 一个值
```css
.div1{
border-radius: 50px;
}
```
- 两个值
```css
.div2{
/*设置左上角右下角为0 ,右上角-左下角为50*/
border-radius: 0 50px;
}
```
- 三个值
```css
.div3{
/*设置左上角为50,右上角0 右下角50 左下角0*/
border-radius: 50px 0 50px;
}
```
- 四个值
```css
.div4{
border-radius: 50px 0 50px 20px;
}
```
6. css动画
- 设置动画
```css
@keyframes layer-rollIn {
0% {background: #ebebeb;margin-left: 0;margin-top: 0;}
25% {background: #cd0000;margin-left:500px;margin-top: 0;}
50%{background: chartreuse;margin-left:500px;margin-top: 500px }
75%{background: blueviolet;margin-left: 0;margin-top:500px}
100%{background: aquamarine;left: 0;top: 0; }
}
```
使用keyframes创建动画规则
- 绑定动画到元素上
```css
.div{
background: #ebebeb;
height: 200px;
width: 200px;
animation-name: layer-rollIn;
animation-duration: 5s;
animation-timing-function: ease;
animation-delay: 1s;
animation-iteration-count:infinite;
animation-direction: alternate;
animation-play-state: running;
}
```
- 属性说明
- `animation-name` 动画名称
- `animation-durtaion` 动画持续时间 默认为0
- `animation-timing-function` 动画执行时间曲线函数 默认ease
- `linear` 线性速度运行
- `ease` 动画以低速开始,然后加快,在结束前变慢
- `ease-in` 动画以低速开始
- `ease-out` 动画以低速结束
- `ease-in-out` 动画以低速开始和结束
- `cubic-bezier` 贝塞尔曲线
- `animation-delay` 动画延迟 默认0
- `animation-iteration-count` 动画迭代运行次数 默认1 无穷 infinite
- `animation-direction` 规定动画是否在下一个周期逆向播放
- `normal` 正常的
- `reverse` 反向播放
- `alternate` 奇数次正向 ,偶数次反向
- `alternate-reverse` 奇数次反向,偶数次正向
- `initial` 初始
- `inherit` 继承
7. box-shadow
box-shadow: h-shadow v-shadow blur spread color inset;
8. ::after和::before
content可以接收的值
- url
- string
- attr
```css
a::after{
content: "("attr(href)")";
}
```
9. 多列
```css
p{
column-count: 3;
column-gap: 60px;
column-rule: 5px solid #cd0000;
/*column-width: 400px;*/
}
```