文章目录
前言
这篇文章为我跟随pink老师重新系统学习前端时做的一些笔记。
系列文章目录
【HTML5与CSS3篇】
D1:HTML基础:简介+常用标签
D2:CSS入门:简介+基础选择器+字体&文本属性+引入方式
D2:CSS基础:复合选择器+元素显示模式+背景
D3:CSS进阶:层叠&继承&优先级+盒子模型+圆角边框+盒子&文本阴影+浮动
D4:CSS进阶:定位+元素的显示与隐藏
D5:CSS进阶:字体图标+CSS三角+光标样式+vertical-align属性+布局技巧
D5:CSS提高:HTML5&CSS3的新特性
【JavaScript篇】
D1:JavaScript入门:计算机基础+变量+数据类型
D2:JavaScript基础:运算符+运算流程分支控制+命名规范与语法格式
D3:JavaScript进阶
1 HTML5的新特性
HTML5的新增特性主要是针对以前的不足,添加了一些新的标签、表单和表单属性等。这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。
1.1 新增语义化标签
以前的布局基本都使用<div>来实现。但<div>对于搜索引擎来说,是没有语义的。
- <header>:头部标签
- <nav>:导航标签
- <article>:内容标签
- <section>:定义文档某个区域
- <aside>:侧边栏标签
- <footer>:尾部标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>HTML5新增语义化标签</title>
<style>
header,
nav {
height: 120px;
background-color: pink;
border-radius: 15px;
width: 800px;
margin: 15px auto;
}
section {
width: 500px;
height: 300px;
background-color: skyblue;
}
</style>
</head>
<body>
<header>头部标签</header>
<nav>导航栏标签</nav>
<section>某个区域</section>
</body>
</html>
- 这种语义化标准主要是针对搜索引擎的。
- 这些新标签在页面中可以多次使用。
- 在IE9中,需要把这些元素转换为块级元素。
- 移动端开发常用这些标签。
1.2 新增多媒体标签
新增的多媒体标签主要包含以下两个:
- 音频:<audio>
- 视频:<video>
使用以上标签可以很方便地在页面中嵌入音频和视频,而不再使用flash和其他浏览器插件。
1.2.1 视频标签<video>
当前<video>元素支持三种视频格式,尽量使用mp4格式:
浏览器 | MP4 | WebM | Ogg |
---|---|---|---|
IE | √ | ||
Chrome | √ | √ | √ |
Firefox | √,从Firefox 21版本开始,Linux系统从Firefox 30开始 | √ | √ |
Safari | √ | ||
Opera | √,从Opera 25版本开始 | √ | √ |
<video src="文件地址" controls="controls"></video>
考虑兼容性时的写法:
<video src="文件地址" controls="controls" width="300">
<source src="movie.mp4" type="video/mp4">
<source src="movie.ogg" type="video/ogg">
您的浏览器暂不支持<video>标签播放视频
</video>
<video>标签的常见属性:
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 视频就绪自动播放(谷歌浏览器需要添加muted来解决自动播放问题) |
controls | controls | 向用户显示播放控件 |
width | pixels(像素) | 设置播放器宽度 |
height | pixels(像素) | 设置播放器高度 |
loop | loop | 播放完是否继续播放该视频,循环播放 |
preload | auto(预先加载视频),none(不预先加载视频) | 规定是否预加载视频(如果有了autoplay,就忽略该属性) |
src | url | 视频url地址 |
poster | imgUrl | 加载等待的画面图片 |
muted | muted | 静音播放 |
<video src="media/mi.mp4" autoplay="autoplay" muted="muted" loop="loop" poster="media/mi9.jpg"></video>
1.2.2 音频标签<audio>
HTML5在不使用插件的情况下,也可以原生支持音频格式文件的播放。
当前<audio>元素支持三种音频格式,尽量使用mp3格式:
浏览器 | MP3 | Wav | Ogg |
---|---|---|---|
IE | √ | ||
Chrome | √ | √ | √ |
Firefox | √ | √ | √ |
Safari | √ | √ | |
Opera | √ | √ | √ |
<audio src="文件地址" controls="controls"></audio>
考虑兼容性时的写法:
<audio src="文件地址" controls="controls">
<source src="music.mp3" type="audio/mpeg">
<source src="music.ogg" type="audio/ogg">
您的浏览器暂不支持<audio>标签播放音频
</audio>
<audio>标签的常见属性:
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 音频就绪自动播放(谷歌浏览器禁止音频自动播放,后期可以通过JavaScript解决) |
controls | controls | 向用户显示播放控件 |
loop | loop | 播放完是否继续播放该音频,循环播放 |
src | url | 音频url地址 |
<audio src="media/music.mp3" autoplay="autoplay" controls="controls"></audio>
1.3 新增input表单
属性值 | 说明 |
---|---|
type=“email” | 限制用户输入必须为Email类型 |
type=“url” | 限制用户输入必须为URL类型 |
type=“date” | 限制用户输入必须为日期类型 |
type=“time” | 限制用户输入必须为时间类型 |
type=“month” | 限制用户输入必须为月类型 |
type=“week” | 限制用户输入必须为周类型 |
type=“number” | 限制用户输入必须为数字类型 |
type=“tel” | 手机号码 |
type=“search” | 搜索框 |
type=“color” | 生成一个颜色选择表单 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<!-- 验证时必须添加form表单域 -->
<form action="">
<ul>
<li>邮箱: <input type="email" /></li>
<li>网址: <input type="url" /></li>
<li>日期: <input type="date" /></li>
<li>时间: <input type="time" /></li>
<li>数量: <input type="number" /></li>
<li>手机号码: <input type="tel" /></li>
<li>搜索: <input type="search" /></li>
<li>颜色: <input type="color" /></li>
<!-- 点击提交按钮就可以验证表单了 -->
<li><input type="submit" value="提交" /></li>
</ul>
</form>
</body>
</html>
1.4 新增表单属性
属性 | 值 | 说明 |
---|---|---|
required | required | 表单拥有该属性,表示其他内容不能为空,必填 |
placeholder | 提示文本 | 表单的提示信息,存在默认值将不显示 |
autofocus | autofocus | 自动聚焦属性,页面加载完成自动聚焦到制定表单 |
autocomplete | off / on | 当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。默认已经打开。需要放在表单内,同时加上name属性,同时成功提交 |
multiple | multiple | 可以多选文件提交 |
修改提示文本的颜色:
input::placeholder {
color: blue;
}
2 CSS3的新特性
2.1 CSS3的现状
- 新增的CSS3特性有兼容性问题,IE9+才支持
- 移动端支持优于PC端
- CSS3正在不断改进中,应用相对广泛
2.2 新增属性选择器
属性选择器可以根据元素特定属性来选择元素,这样就可以不用借助于类选择器或id选择器。
选择符 | 简介 |
---|---|
E[att] | 选择具有att属性的E元素 |
E[att=“val”] | 选择具有att属性且属性值等于val的E元素 |
E[att^=“val”] | 匹配具有att属性且值以val开头的E元素 |
E[att$=“val”] | 匹配具有att属性且值以val结尾的E元素 |
E[att*=“val”] | 匹配具有att属性且值中含有val的E元素 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>CSS3新增属性选择器</title>
<style>
/* 必须是input标签,同时具有value属性 */
/* input[value] {
color:pink;
} */
/* 必须是input标签,同时type属性的属性值为text */
input[type='text'] {
color: pink;
}
/* 必须是div标签,同时class属性的属性值以icon开头 */
div[class^='icon'] {
color: red;
}
/* 必须是section标签,同时class属性的属性值以data结尾 */
section[class$='data'] {
color: blue;
}
/* 注意权重 */
div.icon1 {
color: skyblue;
}
</style>
</head>
<body>
<!-- 1. 利用属性选择器就可以不用借助于类或者id选择器 -->
<!-- <input type="text" value="请输入用户名">
<input type="text"> -->
<!-- 2. 属性选择器还可以选择属性=值的某些元素 -->
<input type="text" name="" id="" />
<input type="password" name="" id="" />
<!-- 3. 属性选择器可以选择属性值开头的某些元素 -->
<div class="icon1">小图标1</div>
<div class="icon2">小图标2</div>
<div class="icon3">小图标3</div>
<div class="icon4">小图标4</div>
<div>测试</div>
<!-- 4. 属性选择器可以选择属性值结尾的某些元素 -->
<section class="icon1-data">测试文本1</section>
<section class="icon2-data">测试文本2</section>
<section class="icon3-ico">测试文本3</section>
</body>
</html>
类选择器、属性选择器、伪类选择器,权重都为10。
2.3 新增结构伪类选择器
结构为类选择器主要根据文档结构来选择元素,常用于根据父级选择里面的子元素。
选择符 | 简介 |
---|---|
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个 |
nth-child(n)选择以某个父元素的一个或多个特定的子元素
- n可以是数字,关键字和公式
- n如果是数字,就是选择第n个元素。注意,n是从1开始的,而不是从0开始的。
- n可以是关键字:even偶数,odd奇数
- n可以是公式,常见的公示如下。注意,当n为公式,则从0开始计算,但是第0个元素和超出元素个数的元素都会被忽略。
公式 | 取值 |
---|---|
2n | 偶数 |
2n+1 | 奇数 |
5n | 5,10,15 |
n+5 | 从第5个开始(包含第5个)到最后 |
-n+5 | 前5个(包含第5个) |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>CSS3新增结构伪类选择器-nth-child</title>
<style>
/* 1. li元素序号从1开始,选择序号为偶数even的li元素 */
ul li:nth-child(even) {
background-color: #ccc;
}
/* 2. li元素序号从1开始,选择序号为奇数odd的li元素 */
ul li:nth-child(odd) {
background-color: plum;
}
/* 3. 选择所有li元素:nth-child(n)。此时元素序号n从0开始,每次加1,往后面计算。这里面必须是n,不能是其他字母 */
/* ol li:nth-child(n) {
background-color: pink;
} */
/* 4. li元素序号从1开始,选择序号为2n的li元素,等价于选择序号为偶数even的li元素*/
/* ol li:nth-child(2n) {
background-color: pink;
}
ol li:nth-child(2n+1) {
background-color: skyblue;
} */
/* ol li:nth-child(n+3) {
background-color: pink;
} */
ol li:nth-child(-n+3) {
background-color: yellow;
}
</style>
</head>
<body>
<ul>
<li>第1个</li>
<li>第2个</li>
<li>第3个</li>
<li>第4个</li>
<li>第5个</li>
<li>第6个</li>
<li>第7个</li>
<li>第8个</li>
</ul>
<ol>
<li>第1个</li>
<li>第2个</li>
<li>第3个</li>
<li>第4个</li>
<li>第5个</li>
<li>第6个</li>
<li>第7个</li>
<li>第8个</li>
</ol>
</body>
</html>
E:nth-child(n)与E:nth-of-type(n)的区别:
- E:nth-child(n)对父元素里面所有子元素排序选择(序号是固定的):先找到第n个子元素,再看是否和E匹配
- E:nth-of-type对父元素里面指定子元素排序选择:先匹配E,再根据E找第n个子元素
- 无序列表,用E:nth-child更多
- 类选择器、属性选择器、伪类选择器的权重都为10
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>CSS3新增选择器nth-type-of</title>
<style>
ul li:first-of-type {
background-color: pink;
}
ul li:last-of-type {
background-color: pink;
}
/* 使用方式和nth-child(n)相同 */
ul li:nth-of-type(even) {
background-color: skyblue;
}
/* nth-child会把所有的盒子都排列序号。执行时先读取:nth-child(1),跳到html中定位第一个子元素,再回CSS中读取div。
当条件不满足时,即section的第一个子元素是p而不是div时,选择元素失败 */
section div:nth-child(1) {
background-color: red;
}
/* nth-of-type会把指定元素的盒子排列序号。执行时先读取指定的元素div,跳到html中定位div标签,再回CSS中读取:nth-of-type(1)。
避免了元素选择失败的问题。 */
section div:nth-of-type(1) {
background-color: blue;
}
</style>
</head>
<body>
<ul>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ul>
<!-- 区别 -->
<section>
<p>p标签</p>
<div>div标签1</div>
<div>div标签2</div>
</section>
</body>
</html>
2.4 新增伪元素选择器(*)
伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构。
选择符 | 简介 |
---|---|
::before | 在元素内部的前面插入内容 |
::after | 在元素内部的后面插入内容 |
- before和after都创建了一个新元素,但是属于行内元素,不能直接设置大小。新创建的这个元素在文档树中不存在,所以称之为伪元素。
- before和after必须有content属性。before在父元素内容的前面创建元素,after在父元素内容的后面插入元素。
- 伪元素选择器和标签选择的权重都为1(
div::before{}
的权重是2)。
使用场景:
- 伪元素字体图标
@font-face { font-family: 'icomoon'; src: url('fonts/icomoon.eot?1lv3na'); src: url('fonts/icomoon.eot?1lv3na#iefix') format('embedded-opentype'), url('fonts/icomoon.ttf?1lv3na') format('truetype'), url('fonts/icomoon.woff?1lv3na') format('woff'), url('fonts/icomoon.svg?1lv3na#icomoon') format('svg'); font-weight: normal; font-style: normal; font-display: block; } div { position: relative; width: 200px; height: 35px; border: 1px solid red; } div::after { position: absolute; top: 10px; right: 10px; font-family: 'icomoon'; /* content: ''; */ content: '\e91e'; color: red; font-size: 18px; }
- 伪元素显示隐藏视频封面遮罩
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>伪元素选择器使用场景2-仿土豆网显示隐藏遮罩案例</title>
<style>
.tudou {
position: relative;
width: 444px;
height: 320px;
background-color: pink;
margin: 30px auto;
}
.tudou img {
width: 100%;
height: 100%;
}
.tudou::before {
content: '';
/* 隐藏遮罩层 */
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.4) url(images/arr.png) no-repeat center;
}
/* 当我们鼠标经过了tudou这个盒子,就让里面before遮罩层显示出来 */
.tudou:hover::before {
/* 此处不是转换为块元素,而是显示元素 */
display: block;
}
</style>
</head>
<body>
<div class="tudou">
<img src="images/tudou.jpg" alt="" />
</div>
<div class="tudou">
<img src="images/tudou.jpg" alt="" />
</div>
<div class="tudou">
<img src="images/tudou.jpg" alt="" />
</div>
<div class="tudou">
<img src="images/tudou.jpg" alt="" />
</div>
</body>
</html>
-
伪元素清除浮动
清除浮动的方法:- 额外标签法(隔墙法),是W3C推荐的做法(【前端学习】D3:CSS进阶)
- 父级添加overflow属性
- 父级添加after伪元素
- 父级添加双伪元素
后两种伪元素清除浮动算是额外标签法的升级和优化。
.clearfix:after { content: ""; /* 伪元素必须写的属性 */ display: block; /* 插入的元素必须是块级 */ height: 0; /* 不要看见这个元素 */ clear: both; /* 清除浮动的核心代码 */ visibility: hidden; /* 不要看见这个元素 */ }
2.5 盒子模型
CSS3中可以通过box-sizing来指定盒模型,有两个值,即可指定为content-box或border-box,这样计算盒子大小的方式就发生了改变。
box-sizing: content-box;
:盒子大小为width+padding+border(以前默认的)box-sizing: border-box;
:盒子大小为width,那么padding和border就不会撑大盒子了(前提是padding和border之和不会超过width)
2.6 其它特性(了解)
2.6.1 滤镜filter:图片变模糊
filter属性将模糊或颜色偏移等图形效果应用于元素。
filter: 函数();
例如:
img {
/* blur模糊处理,数值越大,图片越模糊 */
filter: blur(15px);
}
img:hover {
/* 鼠标悬停时获得清晰图片 */
filter: blur(0);
}
2.6.2 calc函数:计算盒子宽度
calc()实现在声明CSS属性值时执行一些计算。括号里面可以使用+,-,*,/来进行计算。
width: calc(100% - 80px);
2.6.2 新增属性过渡(*)
过渡(transition)是CSS3中具有颠覆性的特征之一,我们可以在不使用Flash动画或JavaScript的情况下,在元素从一种样式变换为另一种样式时为元素添加效果。
过渡动画:是一个从状态渐渐地过渡到领一个状态,可以让页面更好看。虽然低版本浏览器(IE9以下版本)不支持,但不影响页面布局。现在常和:hover一起搭配使用。
transition: 要过渡的属性 花费时间 运动曲线 何时开始;
- 属性:想要变化的CSS属性,例如宽度、高度、背景颜色、内外边距等。如果想要所有属性都变化过度,写all。
- 花费时间:单位是秒(必须写单位),如0.5s。
- 运动曲线:默认是ease(可以省略)。
- 何时开始:单位是秒(必须写单位),可以设置延迟出发时间。默认是0s(可以省略)。
div {
width: 200px;
height: 100px;
background-color: pink;
/* transition: 变化的属性 花费时间 运动曲线 何时开始; */
/* 如果要写多个属性,利用逗号进行分割 */
/* transition: width .5s ease 0s, height .5s ease 1s; */
transition: all 0.5s;
}
div:hover {
width: 400px;
height: 200px;
background-color: skyblue;
}
案例:进度条
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>CSS3过渡练习-进度条</title>
<style>
.bar {
width: 150px;
height: 15px;
border: 1px solid red;
border-radius: 7px;
padding: 1px;
}
.bar_in {
width: 50%;
height: 100%;
background-color: red;
/* 给发生变化的元素加过渡 */
transition: all 0.7s;
}
.bar:hover .bar_in {
width: 100%;
}
</style>
</head>
<body>
<div class="bar">
<div class="bar_in"></div>
</div>
</body>
</html>
鼠标悬停时:
练习:动态切换的小米官网的logo
HTML5+CSS3 Pink老师课后作业——小米logo过渡切换的实现
小白初上手HTML+CSS 仿写小米官网logo动画
3 广义的H5(了解)
狭义的HTML5与CSS3:HTML5结构标签本身与CSS3的相关样式。
广义的HTML5:HTML5本身+CSS3+JavaScript。这个集合有时称为HTML5和朋友,通常缩写为HTML5。虽然HTML5的一些特性仍然不被某些浏览器支持,但它是一种发展趋势。
HTML5 MDN介绍