HTML5&CSS3 新特性
- 前言
- [HTML5 新特性](#HTML5 新特性)
- [CSS3 新特性](#CSS3 新特性)
前言
小白开始干前端
生命不息,学习不止~~
以下内容源于黑马前端教程,纯属搬运工了
上篇:[CSS 学习 | 第三章](#CSS 学习 | 第三章)
HTML5 新特性
一、语义化标签
HTML5
的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性
等。
这些新特性都有兼容性问题,基本是 IE9+
以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。
声明:
- 新特性增加了很多,但是我们专注于开发常用的新特性。
- 基础班我们讲解部分新特性,到了就业班还会继续讲解其他新特性。
1. HTML5 新增的语义化标签
以前布局,我们基本用 div 来做。div 对于搜索引擎来说,是没有语义的。
html
<div class="header"> </div>
<div class="nav"> </div>
<div class="content"> </div>
<div class="footer"> </div>
HTML5
新增的语义化标签
<header>
:头部标签<nav>
:导航标签<article>
:内容标签<section>
:定义文档某个区域<aside>
:侧边栏标签<footer>
:尾部标签
注意:
- 这种语义化标准主要是针对搜索引擎的
- 这些新标签页面中可以使用多次
- 在 IE9 中,需要把这些元素转换为块级元素
- 其实,我们移动端更喜欢使用这些标签
- HTML5 还增加了很多其他标签,我们后面再慢慢学
二、多媒体标签
新增的多媒体标签主要包含两个:
- 音频:
<audio>
- 视频:
<video>
使用它们可以很方便的在页面中嵌入音频和视频,而不再去使用 flash
和其他浏览器插件。
注意:谷歌浏览器把音频和视频自动播放禁止了
1. 视频 <video>
HTML5 在不使用插件的情况下,也可以原生的支持视频格式文件的播放,当然,支持的格式是有限的
当前 <video>
元素支持三种视频格式: 尽量使用 mp4
格式
语法:
html
<video src="文件地址" controls="controls"></video
如果考虑兼容性可以这样写:
html
<video controls="controls" width="300">
<source src="move.ogg" type="video/ogg" >
<source src="move.mp4" type="video/mp4" >
您的浏览器暂不支持 <video> 标签播放视频
</video >
属性说明:
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>html5-视频标签</title>
<style>
video {
width: 100%;
}
</style>
</head>
<body>
<video src="media/mi.mp4" autoplay="autoplay" controls="controls" muted="muted" loop="loop"
poster="media/mi9.jpg"></video>
</body>
</html>
1. 音频 <audio>
HTML5 在不使用插件的情况下,也可以原生的支持音频格式文件的播放,当然,支持的格式是有限的。
当前 <audio>
元素支持三种音频格式:
语法:
html
<audio src="文件地址" controls="controls"></audio>
如果考虑兼容性可以这样写:
html
<audio controls="controls" >
<source src="happy.mp3" type="audio/mpeg" >
<source src="happy.ogg" type="audio/ogg" >
您的浏览器暂不支持 <audio> 标签。
</audio>
属性说明:
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>html5-音频标签</title>
<style>
</style>
</head>
<body>
<audio src="media/music.mp3" controls="controls" autoplay="autoplay"></audio>
</body>
</html>
多媒体标签总结
- 音频标签和视频标签使用方式基本一致
- 浏览器支持情况不同
- 谷歌浏览器把音频和视频自动播放禁止了
- 我们可以给视频标签添加 muted 属性来静音播放视频,音频不可以(可以通过JavaScript解决)
- 视频标签是重点,我们经常设置自动播放,不使用 controls 控件,循环和设置大小属性
三、新增 input 类型
HTML5
新增的 input
类型
重点记住: number
、tel
、search
这三个
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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>
四、新增表单属性
HTML5
新增的表单属性
属性 | 值 | 说明 |
---|---|---|
required | required | 表单拥有该属性表示其内容不能为空,必填 |
placeholder |
提示文本 | 表单的提示信息,存在默认值将不显示 |
autofocus | autofocus | 自动聚焦属性,页面加载完成自动聚焦到指定表单 |
autocomplete | off / on | 当用户在开始键入时,游览器基于之前键入过的值,应该显示出在字段中填写的选项。默认已经打开,如 autocomplete="on",关闭 autocomplete="off" 需要放在表单内,同时加上 name 属性,同时成功提交 |
multiple |
multiple | 可以多选文件提交 |
可以通过css以下设置修改 placeholder 里面的字体颜色:
css
input::placeholder {
color: red;
}
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>html5-新增表单属性</title>
<style>
input::placeholder {
color: red;
}
</style>
</head>
<body>
<form action="">
<input type="search" name="sear" id="" required="required" placeholder="搜索" autocomplete="on"
autofocus="autofocus">
<input type="file" name="upload" id="" multiple="multiple">
<input type="submit" value="提交">
</form>
</body>
</html>
CSS3 新特性
- 新增的CSS3特性有兼容性问题,ie9+才支持
- 移动端支持优于 PC 端
- 不断改进中
- 应用相对广泛
- 现阶段主要学习:新增选择器和盒子模型以及其他特性
一、新增选择器
CSS3 给我们新增了选择器,可以更加便捷,更加自由的选择目标元素:
- 属性选择器
- 结构伪类选择器
- 伪元素选择器
注意:类选择器、属性选择器、伪类选择器,权重为 10
1. 属性选择器
属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者 id
选择器。
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS3新增属性选择器</title>
<style>
/* 必须是 input 但是同时具有 value 这个属性的元素 */
input[value] {
color: pink;
}
/* 只选择 type=text 文本框的 input 选取出来 */
input[type=text] {
color: red;
}
/* 选择是 div 然后具有 class 属性,并且属性值必须是 icon 开头的元素 */
div[class^=icon] {
color: green;
}
/* 选择是 div 然后具有 class 属性,并且属性值必须是 png 结尾的元素 */
div[class$=png] {
color: yellow;
}
</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="imge3">小图片3</div>
<div class="imge4">小图片4</div>
<!-- 4.属性选择器可以选择属性值结尾的某些元素 -->
<div class="1-pic">照片1</div>
<div class="2-pic">照片2</div>
<div class="3-png">照片3</div>
<div class="4-png">照片4</div>
</body>
</html>
2. 结构伪类选择器
结构伪类选择器主要根据文档结构
来选择器元素, 常用于根据父级选择器里面的子元素
nth-child(n)
选择某个父元素的一个或多个特定的子元素(重点)
- n 可以是数字,关键字和公式
- n 如果是数字,就是选择第 n 个子元素, 里面数字从1开始...
- n 可以是关键字:even 偶数,odd 奇数
- n 可以是公式:常见的公式如下 ( 如果n是公式,则从0开始计算,但是第 0 个元素或者超出了元素的个数会被忽略 )
区别:
nth-child
对父元素里面所有孩子排序选择(序号是固定的) 先找到第n个孩子,然后看看是否和E匹配nth-of-type
对父元素里面指定子元素进行排序选择。 先去匹配E ,然后再根据E 找第n个孩子
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>结构伪类选择器</title>
<style>
/* 选择 ul 里面的第一个 li */
ul li:first-child {
background-color: pink;
}
/* 选择 ul 里面的最好一个 li */
ul li:last-child {
background-color: skyblue;
}
/* 选择 ul 里面的第 n 个 li */
ul li:nth-child(3) {
background-color: yellowgreen;
}
/* 选择 ul 里面的所有偶数 li */
ul li:nth-child(even) {
background-color: gray;
}
/* 选择 ul 里面的所有 5 倍数的 li */
ul li:nth-child(5n) {
background-color: bisque;
}
section div:nth-child(1) {
border-color: red;
}
section div:nth-of-type(1) {
background-color: aquamarine;
}
</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>
<li>我排行第9</li>
</ul>
<section>
<p>1111</p>
<div>2222</div>
<div>3333</div>
</section>
</body>
</html>
3. 伪元素选择器
伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构
注意:
before
和after
创建一个元素,但是属于行内元素- 新创建的这个元素在文档树中是找不到的,所以我们称为
伪元素
- 语法:
element::before {}
- before 和 after 必须有
content 属性
- before 在父元素内容的前面创建元素,after 在父元素内容的后面插入元素
伪元素选择器
和标签选择器
一样,权重为 1
示例 - 字体图标:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>伪元素选择器</title>
<style>
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?7kkyc2');
src: url('fonts/icomoon.eot?7kkyc2#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?7kkyc2') format('truetype'),
url('fonts/icomoon.woff?7kkyc2') format('woff'),
url('fonts/icomoon.svg?7kkyc2#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
div {
position: relative;
width: 200px;
height: 30px;
border: 1px solid red;
}
div::after {
position: absolute;
content: "\e91e";
top: 10px;
right: 10px;
font-family: 'icomoon';
color: red;
font-size: 18px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
伪元素清除浮动
W3C 推荐使用额外标签法(也称为隔墙法)清除浮动,而伪元素清除浮动就是额外标签发的一个升级和优化
单伪元素清除浮动
双伪元素清除浮动:
二、盒子模型
CSS3 中可以通过 box-sizing
来指定盒模型,有2个值:即可指定为 content-box
、border-box
,这样我们计算盒子大小的方式就发生了改变
可以分成两种情况:
- box-sizing: content-box 盒子大小为 width + padding + border (以前默认的)
- box-sizing: border-box 盒子大小为 width
如果盒子模型改为了box-sizing: border-box
, 那 padding
和 border
就不会撑大盒子了(前提 padding
和 border
不会超过 width
宽度)
三、图片模糊处理
filter
CSS 属性将模糊或颜色偏移等图形效果应用于元素
语法:
css
filter: 函数(); --> 例如: filter: blur(5px); --> blur模糊处理 数值越大越模糊
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
img {
/* blur 是一个函数,小括号中的数值越大,图片越模糊 */
filter: blur(4px);
}
</style>
</head>
<body>
<img src="media/mi9.jpg" alt="">
</body>
</html>
四、calc 函数
calc()
此 CSS 函数让你在声明 CSS 属性值时执行一些计算
语法:
css
width: calc(100% - 80px);
括号里面可以使用 + - * /
来进行计算
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.father {
width: 300px;
height: 200px;
background-color: aqua;
}
.son {
width: calc(100% - 30px);
height: 30px;
background-color: antiquewhite;
}
</style>
</head>
<body>
<!-- 需要子盒子的宽度永远比父盒子小 30 像素 -->
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
五、过渡 - transition
过渡(transition) 是 CSS3 中具有颠覆性的特征之一,我们可以在不使用 Flash 动画或 JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。
过渡动画: 是从一个状态渐渐的过渡到另外一个状态
可以让我们页面更好看,更动感十足,虽然 低版本浏览器不支持(ie9以下版本) 但是不会影响页面布局。
现在经常和 :hover 一起 搭配使用
语法:
css
transition: 要过渡的属性 花费时间 运动曲线 何时开始;
- 属性 : 想要变化的 css 属性, 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡, 写一个all 就可以
- 花费时间: 单位是 秒(必须写单位) 比如 0.5s
- 运动曲线: 默认是 ease (可以省略)
- 何时开始:单位是 秒(必须写单位)可以设置延迟触发时间 默认是 0s (可以省略)
- 后面两个属性可以省略
- 记住过渡的使用口诀: 谁做过渡给谁加
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>过渡</title>
<style>
.box {
width: 200px;
height: 100px;
background-color: skyblue;
/* transition: 变化的属性 花费时间 运动曲线 何时开始 */
/* transition: width .5s; */
/* 多个可用逗号拼接 */
/* transition: width .5s, height 1s ease .5s; */
/* 如果想要多个属性都变化,属性写 all 就行了 */
transition: all .5s;
}
.box:hover {
width: 400px;
height: 200px;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
六、2D 转换 - transform
转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果
- 移动:translate
- 旋转:rotate
- 缩放:scale
二维坐标系:
2D转换是改变标签在二维平面上的位置和形状的一种技术
1. 2D 转换之移动 translate
2D移动是2D转换里面的一种功能,可以改变元素在页面中的位置,类似 定位
语法:
css
transform: translate(x,y);
transform: translateX(n);
transform: translateY(n);
重点:
- 定义 2D 转换中的移动,沿着 X 和
- translate 最大的优点:不会影响到其他元素的位置
- translate 中的百分比单位是相对于自身元素的 translate:(50%,50%)
- 对行内标签没有效果
2. 2D 转换之移动 rotate
2D旋转指的是让元素在2维平面内 顺时针旋转
或者 逆时针旋转
语法:
css
transform:rotate(度数deg)
重点:
- rotate 里面跟度数, 单位是 deg 比如 rotate(45deg)
- 角度为正时,顺时针,负时,为逆时针
- 默认旋转的中心点是元素的中心点
3. 2D 转换之旋转 rotate
css
p::before {
content: '';
position: absolute;
right: 20px;
top: 10px;
width: 10px;
height: 10px;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
transform: rotate(45deg);
}
4. 2D 转换中心点 transform-origin
设置元素转换的中心点
语法:
css
transform-origin: x y;
重点:
- 注意后面的参数 x 和 y 用空格隔开
- x y 默认转换的中心点是元素的中心点 (50% 50%)
- 还可以给 x y 设置 像素 或者 方位名词 (top bottom left right center)
5. 2D 转换之缩放scale
缩放,顾名思义,可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小
语法:
css
transform:scale(x,y);
注意:
- 注意其中的 x 和 y 用逗号分隔
- transform:scale(1,1) :宽和高都放大一倍,相对于没有放大
- transform:scale(2,2) :宽和高都放大了2倍
- transform:scale(2) :只写一个参数,第二个参数则和第一个参数一样,相当于 scale(2,2)
- transform:scale(0.5,0.5):缩小
- sacle 缩放最大的优势:可以设置转换中心点缩放,默认以中心点缩放的,而且不影响其他盒子
案例-分页按钮:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
li {
float: left;
width: 30px;
height: 30px;
margin: 10px;
border: 1px solid skyblue;
text-align: center;
line-height: 30px;
list-style: none;
border-radius: 50%;
/* 鼠标变小手 */
cursor: pointer;
transition: all .4s;
}
li:hover {
transform: scale(1.2);
}
</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>
</ul>
</body>
</html>
5. 2D 转换综合写法
- 同时使用多个转换,其格式为:transform: translate() rotate() scale() ...等
- 其顺序会影转换的效果。(先旋转会改变坐标轴方向)
- 当我们同时有位移和其他属性的时候,记得要将位移放到最前
七、动画 - animation
动画(animation)是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。
制作动画分为两步:
- 先定义动画
- 再使用(调用)动画
1. 用keyframes 定义动画(类似定义类选择器)
语法:
css
@keyframes 动画名称 {
0%{
width:100px;
}
100%{
width:200px;
}
}
动画序列
- 0% 是动画的开始,100% 是动画的完成。这样的规则就是动画序列
- 在 @keyframes 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果
- 动画是使元素从一种样式逐渐变化为另一种样式的效果。您可以改变任意多的样式任意多的次数
- 请用百分比来规定变化发生的时间,或用关键词 "from" 和 "to",等同于 0% 和 100%
2. 元素使用动画
语法:
css
div {
width: 200px;
height: 200px;
background-color: aqua;
margin: 100px auto;
/* 调用动画 */
animation-name: 动画名称;
/* 持续时间 */
animation-duration: 持续时间;
}
示例:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* from 和 to 等价于 0% 和 100% */
@keyframes move {
0% {
transform: translate(0, 0);
}
25% {
transform: translate(1000px, 0);
}
50% {
transform: translate(1000px, 500px);
}
75% {
transform: translate(0, 500px);
}
100% {
transform: translate(0, 0);
}
}
div {
width: 100px;
height: 100px;
background-color: skyblue;
animation-name: move;
animation-duration: 3s;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
动画常用属性
animation-timing-function
:规定动画的速度曲线,默认是"ease"
动画简写属性
animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的
css
animation: myfirst 5s linear 2s infinite alternate;
- 简写属性里面不包含 animation-play-state
- 暂停动画:animation-play-state: puased; 经常和鼠标经过等其他配合使用
- 想要动画走回来 ,而不是直接跳回来:animation-direction : alternate
- 盒子动画结束后,停在结束位置: animation-fill-mode : forwards
八、3D 转换 - translate3d
我们生活的环境是3D的,照片就是3D物体在2D平面呈现的例子
3D 的特点:
- 近大远小
- 物体后面遮挡不可见
三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的
- x轴:水平向右
注意: x 右边是正值,左边是负
- y轴:垂直向下
注意: y 下面是正值,上面是负值
- z轴:垂直屏幕
注意: 往外面是正值,往里面是
3D 转换主要学习工作中最常用的 3D 位移
和 3D 旋转
,主要知识点:
- 3D位移:translate3d(x,y,z)
- 3D旋转:rotate3d(x,y,z)
- 透视:perspective
- 3D呈现:transfrom-style
3D移动 translate3d
3D移动在2D移动的基础上多加了一个可以移动的方向,就是 z 轴方向
- translform:translateX(100px):仅仅是在x轴上移动
- translform:translateY(100px):仅仅是在Y轴上移动
- translform:translateZ(100px):仅仅是在Z轴上移动(注意:translateZ一般用px单位)
- transform:translate3d(x,y,z):其中 x、y、z 分别指要移动的轴的方
因为z轴是垂直屏幕,由里指向外面,所以默认是看不到元素在z轴的方向上移动
透视 perspectiv
在2D平面产生近大远小视觉立体,但是只是效果二维的
- 如果想要在网页产生3D效果需要透视(理解成3D物体投影在2D平面内)
- 模拟人类的视觉位置,可认为安排一只眼睛去看
- 透视我们也称为视距:视距就是人的眼睛到屏幕的距离
- 距离视觉点越近的在电脑平面成像越大,越远成像越小
- 透视的单位是像素
透视写在被观察元素的父盒子上面的
d:就是视距,视距就是一个距离人的眼睛到屏幕的距离
z:就是 z 轴,物体距离屏幕的距离,z 轴越大(正值) 我们看到的物体就越大
translateZ
translform:translateZ(100px):仅仅是在Z轴上移动。有了透视,就能看到 translateZ 引起的变化了
- translateZ:近大远小
- translateZ:往外是正值
- translateZ:往里是负值
3D旋转 rotate3d
3D旋转指可以让元素在三维平面内沿着 x轴,y轴,z轴或者自定义轴进行旋转
- transform:rotateX(45deg):沿着x轴正方向旋转 45度
- transform:rotateY(45deg) :沿着y轴正方向旋转 45deg
- transform:rotateZ(45deg) :沿着Z轴正方向旋转 45de
- transform:rotate3d(x,y,z,deg): 沿着自定义轴旋转 deg为角度(了解即可)
transform:rotate3d(x,y,z,deg): 沿着自定义轴旋转 deg为角度,xyz是表示旋转轴的矢量,是标示你是否希望沿着该轴旋转,最后一个标示旋转的角度
- transform:rotate3d(1,0,0,45deg) 就是沿着x轴旋转 45deg
- transform:rotate3d(1,1,0,45deg) 就是沿着对角线旋转 45de