H5、CSS3和ES6新特性

CSS3新特性

01 新增语义化标签

<header>:头部标签

<nav>:导航标签

<article>:内容标签

<section>:定义文档某个区域

<aside>:侧边栏区域

<footer>:尾部标签

02 新增多媒体标签
  • 音频

<audio src="文件地址" controls="controls" loop autoplay></audio>

  • 视频

<video width height preload src="文件地址" controls="controls" loop autoplay></video>

03 新增input类型

type=email url date time month week number tel search color

04 新增表单属性
  • 表单及表单属性
<form method="post" action="result.html"> </form>
  • required

  • placeholder

  • autofocus

  • autocomplete:基于之前输入过的值,显示出在字段中填写的选项

  • multiple:可以多选文件提交,用于type为file的表单

HTML5新特性

01 新增选择器
  • 属性选择器

属性选择器可以根据元素的特定属性来选择元素,可以不借助于类或者id选择器。

image-20230602192738589
  • 结构伪类选择器

根据文档结构来选择元素,常用于根据父级选择器选择里面的子元素。

  • E:first-child 父元素中第一个子元素E
  • E:last-child 父元素中最后一个E元素
  • E:nth-child(n) 父元素中第n个子元素E
  • E:first-of-type 指定类型E的第一个
  • E:last-of-type 指定类型E的最后一个
  • E:nth-of-type(n) 指定类型E的第n个

对于E:nth-child(n),n可以是数字或者是关键字,公式。

关键字:even 偶数 odd 奇数

当括号中是n时,n会进行计算,从0开始一直加到最后,所以写n时就等价于选择了所有孩子。

注意必须是n不能是其他的字母。

  • 伪元素选择器

伪元素选择器可以利用CSS创建新标签,不需要HTML标签,从而简化HTML结构。

伪元素清除浮动

// 1、额外标签法(隔墙法),要求新的空标签必须是块级元素
// 2、父级添加overflow属性
// 3、父级添加after伪元素
.clearfix::after {
    content: "";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}
// 4、父级添加双伪元素
.clearfix::before,.clearfix::after {
    content:"";
    display:table; /*转换为块级元素并且一行显示*/
}
.clearfix::after{
    clear:both;
}
02 盒子模型border-box
1. box-sizing: content-box 盒子大小为 width + padding + border (以前默认的)
2. box-sizing: border-box 盒子大小为 width
03 图片变模糊filter

filter:函数() 如:filter:blur(5px) // blur模糊处理,数值越大越模糊

04 计算盒子宽度width:calc函数

width:calc(100%-80px); // 执行一些计算

05 过渡transition

transition: 要过渡的属性 花费时间 运动曲线 何时开始; // 搭配 :hover 使用

属性:宽度高度 背景颜色 内外边距

运动曲线:linear、ease 、ease-in、ease-out

06 2D转换transform

转换(transform):位移变化要放在最前面

  • 移动:translate

translate(50%,50%)中的百分比是相对于自身元素的。不会影响其它元素的位置。

  • 旋转:rotate

rotate(45deg) 角度为正时,顺时针。

transform-origin:x y; 设置元素转换的中心点

  • 缩放:scale(x,y)
07 动画animation
  1. 用 keyframes 定义动画
  2. 元素使用动画
@keyframe 动画名称 {
	0%{
		width:100px;
	}
	100%{
		width:200px;
	}
}
div {
	width:200px;
	height:200px;
    background-color:aqua;
    margin:100px auto;
    // 调用动画
    animation-name: 动画名称;
    // 持续时间
    animation-duration: 持续时间;
    animation-timing-function:速度曲线;
    animation-delay:延时;
    animation-iteration-count:被播放次数如infinite;
    animation-play-state:运行或者暂停;
}
08 3D转换

transform:translate3d(x,y,z)

perspective// 指的是眼睛与屏幕的距离,值越小,看到的就越大;写在被观察元素的父盒子中

transform:rotate3d(x,y,z,deg)

transform-style:flat // 默认的,开启立体空间使用preserve-3d,写在父元素

09 浏览器私有前缀

浏览器私有前缀是为了兼容老版本的写法,比较新版本的浏览器无须添加。
私有前缀

-moz-:代表 firefox 浏览器私有属性
-ms-:代表 ie 浏览器私有属性
-webkit-:代表 safari、chrome 私有属性
-o-:代表 Opera 私有属性

提倡的写法
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
-o-border-radius: 10px;
border-radius: 10px;

ES6新特性

01 let和const

ES6推荐使用let声明局部变量

  • let和const不存在变量提升,只能在块级作用域里访问,同一作用域下不能声明同一变量
  • var定义的变量,变量提升,没有块的概念,可以跨块访问
  • const用来定义常量,使用时必须初始化,而且不能修改
02 Symbol、BigInt

基本数据类型:undefined、null、Number(数值)、String(字符串)、Boolean(布尔值)、BigInt(大整数)
特殊的数据类型:Object(对象)

Symbol是ES6中引入的一种新的基本数据类型,用于表示一个独一无二的值,不能与其他数据类型进行运算,主要用于防止第三方框架的同名属性被覆盖。
大整数(BigInt):用于表示任意精度的整数。在传统的 JavaScript 中,数字类型被限制为 64 位双精度浮点数,因此无法精确表示超过Number.MAX_SAFE_INTEGER(2^53 - 1)的整数。大整数解决了这个限制,可以表示任意大的整数。可以使用 n 后缀或 BigInt() 函数创建大整数。

03 模板字符串&字符串新方法

模板字符串

// ES6之前,通过 \ 和 + 来构建模板
let html="<div>"+"<a>"+url+"</a>"+"</div>";
// ES6,用${}来界定,反引号 `` 搞定
let html=`<div><a>${url}</a></div>`

字符串新方法

  • includes() 判断字符串是否包含参数字符串,返回Boolean值
  • startsWith() 或 endsWith() 判断是否以参数字符串开头或结尾,返回Boolean值。可以有两个参数,用一个数字表示开始查找的位置。
  • repeat() 按指定重复次数返回一个新的字符串
  • padStart() 或 padEnd() 用参数字符串按给定长度从前面或者后面补全字符串,返回新字符串。
let arr='hel'
console.log(arr.padEnd(6,'o')) // 'helooo'
console.log(arr.padEnd(6)) 		// 'hel   ',没有指定字符则以空格代替
console.log(arr.padStrat(5,'o')) // 'oohel'
04 (数组&对象)解构表达式

解构赋值是对赋值运算符的扩展。针对数组或者对象进行模式匹配,对变量进行赋值。

字符串、以及ES6新增的Map和Set都可以使用。

  • 数组解构
let [a,b,c]=[1,2,3];
console.log(a,b,c);	//1,2,3

let [a,b,c]=[1,,3];
console.log(a,b,c);	//1,undefined,3

let [a,,c]=[1,2,3];
console.log(a,c);	//1,3

let [a,..b]=[1,2,3];	//...是剩余运算符,表示赋值运算符右边除第一个值外剩余的都赋值给b
console.log(a,b);	//1,[2,3]
  • 对象解构
let obj={
    name:"li",
    age:18
};
let {name,age}=obj;
console.log(name,age);	//’li' 18
let {name:myName,age:myAge}=obj;	 //自定义变量名
console.log(myName,myAge);	//’li' 18
05 Map和Set

Map和Set属于es6新增的对象

  • Map对象用于保存键值对,任何JavaScript支持的值都可以作为键、值。

区别:1、object的键只能是字符串或者Symbol值;

2、Map对象有一个size()属性,为键值对的个数,而object没有。

let myMap=new Map([['name','li'],['age',18]]);
console.log(myMap);	//{'name'=>'li','age'=>18}
myMap.set('sex','male');
console.log(myMap.size);	//3
myMap.get('name');
myMap.delete('sex');
myMap.has('sex');
  • Set表示一组唯一的值,其中每个值只能出现一次。Set 提供了高效的查找和添加元素的操作。类似数组。
let mySet=new Set([1,2,3]);
console.log(mySet);	//{1,2,3}
mySet.add(4);	//{1,2,3,4}
mySet.delete(1);	//true
mySet.has(1);	//false

WeakMap:类似于 Map,但键只能是对象,并且对键的引用是弱引用。当键不再被引用时,它们可以被垃圾回收。

WeakSet:类似于 Set,但值只能是对象,并且对值的引用是弱引用。当值不再被引用时,它们可以被垃圾回收。
数组的去重

let arr=[1,1,2,4,4];
let mySet=new Set(arr);
let newArr=Array.from(mySet);
console.log(newArr);	//[1,2,4]
06 数组的新方法
  • Array.from() 将可迭代对象转换为新的数组
let arr=[1,2,3];
let obj={
    double(n){
        return n*2;
    }
}
// Array.from()可接受3个参数(后两个可没有)
// 第一个为将被转换的可迭代对象;第二个是回调函数;第三个是回调函数内的this指向
console.log(Array.from(arr, function(n){
    return this.double(n);
},obj));	//[2,4,6]
  • includes() 查看数组中是否存在这个元素
  • map() 原数组经过运算后的数组,或者从对象数组中拿某个属性
  • filter() 筛选满足条件的数据成为一个新数组,不会影响旧数组
let arr=[1,33,2,44];
let new1=arr.map((v)=>v>10);	//[false,true,false,true]
let new2=arr.map((v)=>v*2);	//[2,66,4,88]
let new3=arr.filter((v)=>v>10);	//[33,44]
let new4=arr.filter((v)=>v*2);	//[1,33,2,44]
  • forEach() 循环遍历数组中的每一项,没有返回值
  • find() 查找数组中符合条件的第一个元素,直接返回
  • some() 找到一个符合条件的就返回true
  • every() 数组所有值都符合条件才返回true
07 object的新方法
  • Object.is() //判断两个值是否为同一个值
  • Object.assign() //将所有可枚举的属性的值从一个或多个源对象分配到目标对象,并返回目标对象。将对象合并到第一个对象,相同的属性会覆盖
  • Object.keys() //返回对象所有属性
  • Object.values() //返回对象所有属性值
  • Object.entries() //返回多个数组,每个数组是key-value
08 对象声明简写&…对象扩展符
  • 对象声明简写

声明对象时,属性名与引用的变量名相同时就可以省略。(k,v一致省略v)

  • …(对象扩展符)
// 拷贝
let obj={
    name:"li",
    age:18
};
let obj2={...obj}
console.log(obj2==obj)
console.log(obj2)	//{name:"li", age:18}
// 合并对象
const p1={a:1}
const p2={b:2,a:5}
let newO={...p1,...p2}
console.log(newO);	//{a:5,b:2}
09 函数参数默认值
function add(a=0,b=0){
    return a+b;
}
let x=add()	//0
let y=add(2)	//2
let z=add(3,4)	//7
10 箭头函数

箭头函数实现了一种更加简洁地书写方式。箭头函数内部:

  • 没有arguments(无法在函数内部获取形参)
  • 也没有prototype属性
  • 不能用new关键字调用箭头函数
  • 其内部this永远指向其父级对象的this
let sum=(a,b) => a+b
11 class类

class关键字定义类,本质仍是一个函数。类的继承通过extends关键字实现,子类必须在constructor中调用super()

class Person {
    constructor(name,age){
        this.name=name;
        this.age=age;
    }
    say(){
        console.log(this.name+':'+this.age);
    }
}
class Student extends Person {
    constructor(name,age,sex) {
        super(name,age);
        this.sex=sex;
    }
}
var stu=new Student("muzi",18,"male")
12 promise&proxy
13 模块化
  • 导入import
import '模块名称' from '路径'
import from '路径'
  • 导出export和export default
let name='muzi',age=18;
export {name,age};
  • 优点:防止命名冲突;复用性强
14 运算符
  • 扩展运算符 …
  • 可选链 ?.
  • 函数绑定运算符 ::
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值