1、拖拽释放(Drap and drop) API ondrop
拖放是一种常见的特性,即抓取对象以后拖到另一个位置
在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放
2、自定义属性 data-id
3、语义化更好的内容标签(header,nav,footer ,aside, article, section)
4、音频 ,视频(audio, video) 如果浏览器不支持自动播放怎么办?在属性中添加 autoplay
5、画布 Canvas
5.1)getContext() 方法返回一个用于在画布上绘图的环境 Canvas.getContext(contextID)
参数 contextID 指定了您想要在画布上绘制的类型。当前唯一的合法值是 “2d”,它指定了
二维绘图,并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API
5.2)cxt.stroke() 如果没有这一步 线条是不会显示在画布上的
5.3)canvas 和 image 在处理图片的时候有什么区别?
image 是通过对象的形式描述图片的,canvas 通过专门的 API 将图片绘制在画布上.
6、 地理(Geolocation) API
7、 本地离线存储 localStorage 长期存储数据 浏览器关闭后数据不丢失
8、 sessionStorage 的数据在浏览器关闭后自动删除
9、 表单控件 calendar , date , time , email , url , search , tel , file , number
10、新的技术 webworker, websocket , Geolocation
1、颜色: 新增 RGBA , HSLA 模式
2、文字阴影(text-shadow)
3、边框: 圆角(border-radius) 边框阴影 : box-shadow
4、盒子模型: box-sizing
5、背景:background-size background-origin background-clip
6、渐变: linear-gradient , radial-gradient
7、过渡 : transition 可实现动画
8、自定义动画 animate @keyfrom
9、媒体查询 多栏布局 @media screen and (width:800px) {…}
10、border-image
11、2D 转换;transform: translate(x,y) rotate(x,y) skew(x,y) scale(x,y)
12、3D 转换
13、字体图标 font-face
14、弹性布局 flex
H5 事件
onblur:当失去焦点时运行脚本
onchange:当元素改变时运行脚本
onclick:当单击鼠标时运行脚本
ondrop:当被拖动元素正在被拖放时运行脚本
onended:当媒体已抵达结尾时运行脚本
onerror:当在元素加载期间发生错误时运行脚本
onfocus:当获得焦点时运行脚本
oninput:当元素获得用户输入时运行脚本
onkeydown:当按下按键时运行脚本(还没松开时就触发)
onkeypress:当按下并松开按键时运行脚本(必须经历按下、松开这一过程才触发)
onkeyup:当松开按键时运行脚本(松开时即触发)
onload:当加载时运行脚本
onmousedown: 当按下鼠标按钮时运行脚本
onmousemove:当鼠标指针移动时运行脚本
onmouseout:当鼠标指针移出元素时运行脚本
onmouseover:当鼠标指针移至元素之上时运行脚本
onmouseup:当松开鼠标按钮时运行脚本
1 、cookie
这个存储用了很久了,而且也是以前大多网站十分喜欢的存储站点。但是也很容易被清除。同时 cookie 会在每一次通信过程中传向服务端。同时 cookie 有一个很好的地方就是,它本身有一个过期时间属性,可以用来标注一个变量的有效期。而 cookie 一旦过期就会被自动删除掉;
2、localStorage、sessionStorage
3、indexedDB
内嵌在浏览器端的非关系型数据库,数据以键值对的形式存储,兼容性良好
indexDB 直接操作的存储对象是 ObjectStore,这有点类似其他数据库中 table 概念;
4、websql
内嵌在浏览器的关系型数据库,前端可以像在使用 mysql、Oracle 一样的写 sql 语句,并存储信息。兼容性良好。存储后可在浏览器 resource 中查看;
5、window 变量
生命周期有限,一般大家也不会去使用。但是对于全局变量的临时存储来说,还是一个不可多得的好地方;
1、transform:描述了元素的静态样式,本身不会呈现动画效果,可以对元素进行 旋转rotate、扭曲 skew、缩放 scale 和移动 translate 以及矩阵变形 matrix。
transition 和 animation 两者都能实现动画效果
transform 常常配合 transition 和 animation 使用
2、transition 样式过渡,从一种效果逐渐改变为另一种效果
transition 是一个合写属性
Transition: transition-property、transition-duration 、transition-timing-function、transition-delay ; 从左到右分别是:css 属性、过渡效果花费时间、速度曲线、过渡开始的延迟时间
transition 通常和 hover 等事件配合使用,需要由事件来触发过渡
3、animation 动画 由@keyframes 来描述每一帧的样式
区别:
3.1)transform 仅描述元素的静态样式,常常配合 transition 和 animation 使用
3.2)transition 通常和 hover 等事件配合使用,animation 是自发的,立即播放
3.3)animation 可设置循环次数
3.4)animation 可设置每一帧的样式和时间,transition 只能设置头尾
3.5)transition 可与 js 配合使用,js 设定要变化的样式,transition 负责动画效果。
<style>
p span{font-size:10px;-webkit-transform:scale(0.8);display:block;}
style>
<p>
<span>豪豪豪 10pxspan>
p>
1 HTML5 就是HTML 版本的第五次重大修改,目的为了适用移动端的发展;
2. 版本: HTML4 – XHTML – HTML5;
3. HTML5 前景移动端优先;
4. 广义的HTML5 是 HTML5本身 + CSS3 + JavaScrip
使用语义化标签的好处是
增强了代码的可阅读性,遵循 W3C
准的团队都遵循这个标准,可以减少差异化;
有利于 SEO(Search Engine Optimization,搜索引擎优化):和搜索引擎建立良好沟通;
有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;便于团队开发和维护,
header 头部标签
nav 导航标签
article 内容标签
section 块级标签
aside 侧边栏标签
注意
多媒体标签分为 音频 audio 和视频 video 两个标签 使用它们,我们可以很方便的在页面中嵌入音频和视频,而不再去使用落后的flash和其他浏览器插件了。
因为多媒体标签的 属性、方法、事件比较多,因此我们需要什么功能的时候,就需要去查找相关的文档进行学习使用。
eg:
source : 源,文件路径
格式 | MIME-type |
---|---|
MP3 | audio/mpeg |
Ogg | audio/ogg |
Wav | audio/wav |
source 标签
可以通过在多媒体标签内加入source标签,用来指定多个播放路径,当第一个source标签的路径出错时,自动会切换到第二个source标签
<audio controls="controls">
<source src="media/snow.mp3" type="audio/mpeg" />
<source src="media/snow.ogg" type="audio/ogg" />
您的浏览器不支持播放声音
audio>
audio指定单一音频源:audio中添加src属性
audio指定多个音频源:source标签替代audio的src属性
type:类型, 当前音频文件的具体类型 , audio/mpeg : audio是大类型/具体类型 (MIMEtype)
图片类型: jpg , jpeg ----age/jpeg```
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 如果出现该属性,则音频在就绪后马上播放。 |
controls | controls | 如果出现该属性,则向用户显示控件,比如播放按钮。 |
loop | loop | 如果出现该属性,则每当音频结束时重新开始播放。 |
preload | preload | 如果出现该属性,则音频在页面加载时进行加载,并预备播放。如果使用 “autoplay”,则忽略该属性 |
src | url | 要播放的音频的 URL |
<audio src="小猪佩奇.mp3" controls="controls" autoplay> audio>
<audio controls="controls" autoplay>
<source src="media/snow.mp3" type="audio/mpeg" />
<source src="media/snow.ogg" type="audio/ogg" />
您的浏览器不支持播放声音
audio>
问题1:指定多个源的时候,为啥还要给audio指定controls属性?
答:多个源,只是将audio的src属性替换为了source标签而已,其他属性(controls,autoplay...)还是需要给audio添加
问题2:为啥单一源时,不需要type,而多个源需要type?
答:其实都需要指定,规范写法就是需要添加type。
<video src="小猪佩奇.mp4" autoplay controls >video>
格式 | MIME-type |
---|---|
MP4 | video/mp4 |
WebM | video / webm |
Ogg | video / ogg |
属性 | 方法 | 事件 |
---|---|---|
duration 视频播放时长 | play 播放 | canplay 视频加载完毕 准备播放 |
currentTime 当前播放进度 | pause 暂停 | imeupdate 播放时-持续触发 |
volume 音量大小 |
source标签
不仅audio可以使用source来指定多个文件源,video也可以:
<video >
<source src="1.mp4">
<source src="2.mp4">
<source src="3.mp4">
video>
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 视频就绪自动播放(谷歌浏览器需要添加 muted 来解决自动播放问题) |
controls | controls | 向用户显示播放控件 |
width | pixels(像素) | 设置播放器宽度 |
height | pixels(像素) | 设置播放器高度 |
loop | loop | 播放完是否继续播放该视频,循环播放 |
preload | auto(预先加载视频)none(不应加载视频) | 规定是否预加载视频(如果有了autoplay 就忽略该属性) |
src | url | 视频url地址 |
poster | Imgurl | 加载等待的画面图片 (视频首帧:首画面。海报) |
muted | muted | 静音播放 |
<video autoplay="autoplay" muted="muted">
<source src="media/video.mp4" type="video/mp4" />
<source src="media/video.ogg" type="video/ogg" />
您的浏览器太low了,不支持播放此视频
video>
总结
object-fit属性
当video标签视频内容宽度没有铺满video标签时,可以在css写上 该属性即可
video {
/* 让视频内容铺满整个video标签 fit意为:合适 */
object-fit: fill; /* fit意为:合适 */
}
注意:此属性用的比较少,视频一般都是铺满video标签的
属性值 | 说明 |
---|---|
type=“email” | 限制用户输入必须为Email类型 |
type=“url” | 限制用户输入必须为URL类型 |
type=“date” | 限制用户输入必须为日期类型 |
type=“time” | 限制用户输入必须为时间类型 |
type=“month” | 限制用户输入必须为月类型 |
type=“week” | 限制用户输入必须为周类型 |
type=“number” | 限制用户输入必须为数字类型 |
type=“tel” | 手机号码(不限制只能输入数字,因为有些特殊电话会有符号) |
type=“search” | 搜索框 |
type=“color” | 生成一个颜色选择表单 |
代码
<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>
属性 | 值 | 说明 |
---|---|---|
required | required | 表单拥有该属性表示其内容不能为空,必填 |
placeholder | 提示文本 | 表单的提示信息,存在默认值将不显示 |
autofocus | autofocus | 自动聚焦属性,页面加载完成自动聚焦到指定表单 |
autocomplete | off / on | 当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。默认已经打开,如 autocomplete=”on “ 关闭 autocomplete =”off”-需要放在表单内同时加上name属性-同时成功提交 |
multiple | multiple | 可以多选文件提交 |
<form action="">
用户名: <input type="text" required="required" > <input type="submit" value="提交">
form>
代码:
<form action="">
用户名: <input type="text" placeholder="请输入用户名">
<input type="submit" value="提交">
form>
autofocus:自动获得焦点 一般页面中放1个
代码:
<form action="">
用户名: <input type="text" required="required" placeholder="请输入用户名" autofocus="autofocus">
form>
autocomplete 自动完成:自动补全,类似百度搜索框一样,会以下拉菜单形式提示以往输入过的内容
代码:
<form action="">
用户名: <input type="text" name="username" autocomplete="off">
<input type="submit" value="提交">
form>
//注意:代码中需要带上name属性,提交的时候才会将input的内容提交过去
一起使用代码:
<form action="">
用户名: <input type="text" name="username" >
<input type="submit" value="提交">
上传头像: <input type="file" name="" id="" multiple="multiple">
form>
form属性:可以将输入标签放在表单的外面,还受到表单的管理
<form action="" id="ff" >
<input type="submit" value="提交">
form>
<input type="text" required form="ff" >
选择符 | 简介 |
---|---|
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元素 |
注意:类选择器、属性选择器、伪类选择器,权重为 10
特殊符号
^ : 匹配开头
$:匹配结尾
* : 匹配任意位置
代码:
<style>
/* 属性选择器使用方法 */
/* 属性选择器的权重是 10 */
/* 1.直接写属性 */
button[disabled] { /* 选择的是: 既是button 又有 disabled 这个属性的元素 */
cursor: default;
}
button {
cursor: pointer;
}
/* 2. 属性等于值 */
input[type="search"] {
color: pink;
}
/* 3. 以某个值开头的 属性值 */
div[class^="icon"] {
color: red;
}
/* 4. 以某个值结尾的 */
div[class$="icon"] {
color: green;
}
/* 5. 可以在任意位置的 */
div[class*="icon"] {
color: blue;
}
style>
head>
<body>
<button>按钮button>
<button>按钮button>
<button disabled="disabled">按钮button>
<button disabled="disabled">按钮button>
<input type="text" name="" id="" value="文本框">
<input type="text" name="" id="" value="文本框">
<input type="text" name="" id="" value="文本框">
<input type="search" name="" id="" value="搜索框">
<input type="search" name="" id="" value="搜索框">
<input type="search" name="" id="" value="搜索框">
<div class="icon1">图标1div>
<div class="icon2">图标2div>
<div class="icon3">图标3div>
<div class="iicon3">图标4div>
<div class="absicon">图标5div>
body>
结构伪类选择器如下:
选择符 | 简介 |
---|---|
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个 |
<style>
ul li:first-child{
background-color: red;
}
/* ul li:first-child ------ 在ul li的选择器选中的结果中进行过滤,过滤出第一个儿子 */
style>
<ul>
<li>列表项一li>
<li>列表项二li>
<li>列表项三li>
<li>列表项四li>
ul>
匹配到父元素的第n个子元素E 或者 是倒数第n个子元素E
nth:第n个的意思(注意:nth是一个单词,单词意思就是第n个)
相比 E:first-child 则要强大了不少,功能如下
代码:
<style>
ul li:first-child {
background-color: pink;
}
ul li:last-child {
background-color: deeppink;
}
/* nth-child(n) 我们要第几个,n就是几 比如我们选第8个, 我们直接写 8就可以了 */
ul li:nth-child(8) {
background-color: lightpink;
}
style>
nth-child(n)- n详细介绍:
注意:不能写成5-n,这里的-就是减号了,而不是负号。
匹配到父元素的前3个子元素
ul li:nth-child(-n+3){ }
选择器中的 n 是怎么变化的呢?
因为 n是从 0 ,1,2,3… 一直递增
所以 -n+3 就变成了
- n=0 时 -0+3=3
- n=1时 -1+3=2
- n=2时 -2+3=1
- n=3时 -3+3=0
- ...
这里只讲明 E:nth-child(n) 和 E:nth-of-type(n) 的区别
剩下的 E:first-of-type E:last-of-type E:nth-last-of-type(n) 同理做推导即可
<style>
ul li:nth-child(2){
/* 字体变成红色 */
color: red;
}
ul li:nth-of-type(2){
/* 背景变成绿色 */
background-color: green;
}
style>
<ul>
<li>列表项一li>
<p>乱来的p标签p>
<li>列表项二li>
<li>列表项三li>
<li>列表项四li>
ul>
最终记住,理解如下内容即可:
E:nth-child(n) n: E父元素中所有儿子进行排序
E:nth-of-type(n) n: E父元素中E儿子进行排序
<style>
div {
width: 300px;
height: 300px;
border: 1px solid #000;
}
div::before {
content: "我";
display: inline-block;
width: 100px;
height: 100px;
background-color: pink;
}
div::after {
content: "小猪佩奇";
display: inline-block;
width: 100px;
height: 100px;
background-color: pink;
}
style>
head>
<body>
<div>是div>
body>
想要让伪元素有效,必须遵循以下注意事项:
md文档: * ---- 无序符号 (小圆点)
将特殊含义的* 转义为普通字符* ----- *
\:将特殊字符转换为普通字符使用
css中: ea50 ---- ico字体中是一个向下的三角箭头
将普通字符串ea50 转义为特殊的icon字体 ---- \ea50
\ : 可以将普通字符与特殊字符进行转换
\ 是一个转义字符
转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、变形、缩放。
2d转换是改变标签在2维平面上的位置和形状的一种技术,我们先来学习2维坐标系。
2d移动是2d转换里面的一种功能,可以改变元素在页面中的位置,类似 定位
使用2d移动的步骤:
div{
transform: translate(50px,50px);
/*transform:改变;translate:有移动的意思
理解,我要改变这个div,怎么改变呢?通过移动来改变div的位置。
注意:这个操作没有动画过程,是直接瞬间向下向右移动了50px
还可以分开写:
transform:translateX(50px);
transform:translateY(50px);
*/
}
2d旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转
使用步骤:
div{
transform: rotate(0deg);
// rotate:旋转
// deg:degree:度
}
观察过后,2d旋转有以下特点
<head>
<style>
div {
position: relative;
width: 249px;
height: 35px;
border: 1px solid #000;
}
div::after { /*小三角通过微元素来处理 : 通过只显示两个方向的边框来控制显示三角*/
content: "";
position: absolute;
top: 8px;
right: 15px;
width: 10px;
height: 10px;
border-right: 1px solid #000;
border-bottom: 1px solid #000;
transform: rotate(45deg);
transition: all 0.2s; /* transition:过渡,有动画过程 ;all代表所有变化属性都做动画*/
}
/* 鼠标经过div 里面的三角旋转 */
div:hover::after {
transform: rotate(225deg);
}
style>
head>
<body>
<div>div>
body>
属性可以修改元素旋转的时候的中心点。
origin:原点,如果与rotate旋转配合使用,就是旋转的中心点。如果与scale配合使用,就是缩放的基准点。
语法: transform-origin: x y;
注意:
常见写法:
缩放,顾名思义,可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小
语法: transform:scale(x,y);
步骤:
div{
transform:scale(2,3);
//scale:比例的意思,理解为按照比例缩放。
}
注意:
案例一 点击图片缩放:
<style>
div {
overflow: hidden;
float: left;
margin: 10px;
}
div img {
transition: all .4s;
}
div img:hover { /*鼠标悬浮之后,将img变大1.1倍*/
transform: scale(1.1);
}
style>
head>
<body>
<div>
<a href="#"><img src="media/scale.jpg" alt="">a>
div>
<div>
<a href="#"><img src="media/scale.jpg" alt="">a>
div>
<div>
<a href="#"><img src="media/scale.jpg" alt="">a>
div>
body>
案例2:分页按钮案例:
<style>
li {
float: left;
width: 30px;
height: 30px;
border: 1px solid pink;
margin: 10px;
text-align: center;
line-height: 30px;
list-style: none;
border-radius: 50%;
cursor: pointer;
transition: all .4s;
}
li:hover {/*鼠标悬浮之后,将li变大1.2倍*/
transform: scale(1.2);
}
style>
head>
<body>
<ul>
<li>1li>
<li>2li>
<li>3li>
<li>4li>
<li>5li>
<li>6li>
<li>7li>
ul>
body>
综合写法注意:
总结:
制作动画分为两步:
/* 1 声明动画函数 */
@keyframes ani_div {
0%{
width: 100px;
background-color: red;
}
50%{
width: 150px;
background-color: green;
}
100%{
width: 300px;
height: 300px;
background-color: yellow;
}
}
/*keyframes关键帧,理解,定义动画就是定义动画过程中的几个关键帧,然后根据关键帧依次变化*/
div {
width: 200px;
height: 200px;
background-color: aqua;
margin: 100px auto;
/* 2 调用动画 */
animation-name: ani_div;
/* 持续时间 */
animation-duration: 2s;
}
动画序列:
总结:
keyframes:关键帧,理解,定义动画就是定义动画过程中的几个关键帧,然后根据关键帧依次变化。
动画常用属性:
理解:
ease-in和ease-out的理解,这里我们把in和out理解为进入和离去。
一个车进入你的视线,感觉上肯定是由慢到快 (ease-in)
一个车离开你的视线,感觉上肯定是由快到慢(ease-out)
延迟时间
animation-delay: 0s;
循环次数
设置动画播放的循环次数 animation-iteration-count: 2;
可以指定数字,也可以指定 infinite ,infinite为无限循环
interation:反复,循环
循环方向
animation-direction:direction:方向
如在动画中定义了 0%:红色 100%:黑色 那么 当属性值为 :
动画等待或者结束的状态
animation-fill-mode 设置动画在等待或者结束的时候的状态 。
动画结束之后默认是回到初始状态:backwards。
动画简写语法:
animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态;
animation: name duration timing-function delay iteration-count direction fill-mode;
用逗号分隔
animation: name duration timing-function delay iteration-count direction fill-mode,
animation: name duration timing-function delay iteration-count direction fill-mode;
元素在动画结束之后,会自动触发的事件 animationend
var div = document.querySelector("div");
div.addEventListener("animationend", function () {
console.log("div的动画结束之后,触发");
})
代码:
<style>
body {
background-color: #333;
}
.map { /* 地图,水平居中,热点效果需要定位,所以子绝父相 */
position: relative;
width: 747px;
height: 616px;
background: url(media/map.png) no-repeat;
margin: 0 auto;
}
.city { /* 北京 处理位置 */
position: absolute;
top: 227px;
right: 193px;
color: #fff;
}
.tb {/* 台北 */
top: 500px;
right: 80px;
}
.dotted { /* 小圆点 */
width: 8px;
height: 8px;
background-color: #09f;
border-radius: 50%;
}
.city div[class^="pulse"] {
/* 保证我们小波纹在父盒子里面水平垂直居中 放大之后就会中心向四周发散 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 8px;
height: 8px;
box-shadow: 0 0 12px #009dfd; /*阴影效果*/
border-radius: 50%;
animation: pulse 1.2s linear infinite; /* 动画,匀速,无线循环 */
}
.city div.pulse2 { /* 第二层波纹延迟0.4s */
animation-delay: 0.4s;
}
.city div.pulse3 { /* 第三层波纹延迟0.8s */
animation-delay: 0.8s;
}
/* 定义动画,0%默认,70%大小变大,透明度不变。100%继续变大,透明度变为0。
效果就是,波纹从小到70%越来越大,让再大的话就开始变虚。
*/
@keyframes pulse {
0% {}
70% {
/* transform: scale(5); 我们不要用scale 因为他会让 阴影变大*/
width: 40px;
height: 40px;
opacity: 1;
}
100% {
width: 70px;
height: 70px;
opacity: 0;
}
}
style>
head>
<body>
<div class="map">
<div class="city">
<div class="dotted">div>
<div class="pulse1">div>
<div class="pulse2">div>
<div class="pulse3">div>
div>
<div class="city tb">
<div class="dotted">div>
<div class="pulse1">div>
<div class="pulse2">div>
<div class="pulse3">div>
div>
div>
body>
在看案例2之前,我们需要来普及一个知识点:
animation-timing-function:规定动画的速度曲线,默认是“ease”
值 | 描述 |
---|---|
linear | 动画从头到尾的速度是相同的。匀速 |
ease | 默认。动画以低速开始,然后加快,在结束前变慢。 |
ease-in | 动画以低速开始。 |
ease-out | 动画以低速结束。 |
ease-in-out | 动画以低速开始和结束。 |
steps() | 指定了时间函数中的间隔数量(步长) |
之前已经介绍过除了steps之外的速度曲线了。我们来看一下steps()
代码:
<style>
div {
overflow: hidden;
font-size: 20px;
width: 0;
height: 30px;
background-color: pink;
/* 让我们的文字强制一行内显示 */ //注意:这个强制换行可以不写
/* white-space: nowrap; */
/* steps 就是分几步来完成我们的动画 有了steps 就不要在写 ease 或者linear 了 */
animation: w 4s steps(10) forwards;
}
@keyframes w {
0% {
width: 0;
}
100% {
width: 200px;
}
}
style>
head>
<body>
<div>世纪佳缘我在这里等你div>
body>
理解: steps(n) : step意为步长,与linear和ease都属于属于速度曲线的一种,效果为 分n步完成动画。
<style>
body {
background-color: #ccc;
}
div {
position: absolute;
width: 200px;
height: 100px;
background: url(media/bear.png) no-repeat;
/* 我们元素可以添加多个动画, 用逗号分隔 */
animation: bear .4s steps(8) infinite, move 3s forwards;
}
@keyframes bear {
0% {
background-position: 0 0;
}
100% {
background-position: -1600px 0;
}
}
@keyframes move {
0% {
left: 0;
}
100% {
left: 50%;
/* margin-left: -100px; */
transform: translateX(-50%);
}
}
style>
head>
<body>
<div>div>
body>
封装了常见的有意思的小动画 ,建议看官网来学习使用
官网
中文
引入css文件
"stylesheet" href="animate.min.css">
给元素添加对应的class
<h1 class="animated infinite bounce">快来看看我h1>
简单解读:
css3涉及到较多的新属性,某些低版本(如ie8以及以下)的浏览器对css3的支持程度不够,因此需要做以下处理
添加对应的浏览器的前缀 常见前缀如下
如对 border-radius 进行兼容性处理
-webkit-border-radius: 30px 10px;
-moz-border-radius: 30px 10px;
-ms-border-radius: 30px 10px;
// border-radius 一定要放在最后
border-radius: 30px 10px;
如果发现添加前缀也解决不了兼容性问题,那么就不要使用该css3属性