1
0
mirror of https://github.com/Daotin/Web.git synced 2024-10-30 04:24:45 +08:00
Web-main/10-CSS3/06-animation动画,Web字体.md
2018-08-06 19:10:59 +08:00

499 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

>大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新......
>
> - githubhttps://github.com/Daotin/Web
> - 微信公众号:[Web前端之巅](https://github.com/Daotin/pic/raw/master/wx.jpg)
> - 博客园http://www.cnblogs.com/lvonve/
> - CSDNhttps://blog.csdn.net/lvonve/
>
> 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
![](https://github.com/Daotin/pic/raw/master/fgx.png)
# 一、动画
## 1、创建动画
好的前端工程师,会更注重用户的体验和交互。那么动画就是将我们的静态页面,变成具有灵动性,为我们的界面添加个性的一种方式。
一个动画至少需要两个属性:
`animation-name` :动画的名字(创建动画时起的名字,如下为 moveTest
`animation-duration` :动画的耗时
```css
animation-name: moveTest;
animation-duration: 2s;
```
如需在 CSS3 中创建动画,需要学习 `@keyframes` 规则。`@keyframes` 规则用于创建动画。在 `@keyframes` 中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。
使用 `@keyframes `关键字来创建动画。
```css
@keyframes moveTest {
/*百分比是指整个动画耗时的百分比*/
0% {
transform: translate(0px, 0px);
}
50% {
transform: translateY(200px);
}
100% {
transform: translate(200px,200px);
}
}
```
> 其中,百分比是指整个动画耗时的百分比。
**示例:**
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
width: 100px;
height: 100px;
background-color: blue;
animation-name: moveTest;
animation-duration: 2s;
}
@keyframes moveTest {
0% {
transform: translate(0px, 0px);
}
50% {
transform: translateY(200px);
}
100% {
transform: translate(200px,200px);
}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
```
> `0%`:动画起始位置,也可以写成 from
>
> `100%`:动画终点位置,也可以写成 to。
![](images/4.gif)
## 2、动画的其他属性
`animation-iteration-count`设置动画的播放次数默认为1次
`animation-direction`:设置交替动画
`animation-delay`:设置动画的延迟
`animation-fill-mode`:设置动画结束时的状态:默认情况下,动画执行完毕之后,会回到原始状态
`animation-timing-function`:动画的时间函数(动画的效果,平滑?先快后慢等)
`animation-play-state`:设置动画的播放状态 paused:暂停 running:播放
```css
/*3.设置动画的播放次数默认为1次 可以指定具体的数值也可以指定infinite(无限次)*/
animation-iteration-count: 1;
/*4.设置交替动画 alternate:来回交替*/
animation-direction: alternate;
/*5.设置动画的延迟*/
animation-delay: 2s;
/*5.设置动画结束时的状态:默认情况下,动画执行完毕之后,会回到原始状态
forwards:会保留动画结束时的状态,在有延迟的情况下,并不会立刻进行到动画的初始状态
backwards:不会保留动画结束时的状态,在添加了动画延迟的前提下,如果动画有初始状态,那么会立刻进行到初始状态
both:会保留动画的结束时状态,在有延迟的情况下也会立刻进入到动画的初始状态*/
animation-fill-mode: both;
/*6.动画的时间函数:linear,ease...*/
animation-timing-function: linear;
/*设置动画的播放状态 paused:暂停 running:播放*/
animation-play-state: running;
```
## 3、案例无缝滚动
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
div {
width: 600px;
height: 100px;
margin: 100px auto;
background-color: #ccc;
overflow: hidden;
}
ul {
width: 200%;
animation: moveLeft 6s linear 0s infinite;
}
ul > li {
float: left;
list-style: none;
}
li > img {
width: 200px;
height: 100px;
}
div:hover > ul {
cursor: pointer;
animation-play-state: paused;
}
@keyframes moveLeft {
from {
transform: translateX(0);
}
to {
transform: translateX(-600px);
}
}
</style>
</head>
<body>
<div>
<ul>
<li><img src="images/img1.jpg" alt=""></li>
<li><img src="images/img2.jpg" alt=""></li>
<li><img src="images/img3.jpg" alt=""></li>
<!-- 复制的一份图片 -->
<li><img src="images/img1.jpg" alt=""></li>
<li><img src="images/img2.jpg" alt=""></li>
<li><img src="images/img3.jpg" alt=""></li>
</ul>
</div>
</body>
</html>
```
> 1、将要显示的图片复制一份以完成无缝滚动的需求。
>
> 2、然后让 ul 移动整个ul的宽度即可并且无限循环就实现无线轮播的效果。
>
> 3、然后在鼠标放上去的时候使得动画暂停。
![](images/5.gif)
## 4、案例时钟
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
.clock {
width: 300px;
height: 300px;
margin: 100px auto;
border: 10px solid #ccc;
border-radius: 50%;
position: relative;
}
.line {
width: 8px;
height: 300px;
background-color: #ccc;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.line2 {
transform: translate(-50%, -50%) rotate(30deg);
}
.line3 {
transform: translate(-50%, -50%) rotate(60deg);
}
.line4 {
width: 10px;
transform: translate(-50%, -50%) rotate(90deg);
}
.line5 {
transform: translate(-50%, -50%) rotate(120deg);
}
.line6 {
transform: translate(-50%, -50%) rotate(150deg);
}
.cover {
width: 250px;
height: 250px;
background-color: #fff;
border-radius: 50%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.center {
width: 20px;
height: 20px;
background-color: #ccc;
border-radius: 50%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.hour {
width: 12px;
height: 80px;
background-color: red;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -100%);
transform-origin: center bottom;
animation: clockMove 43200s linear infinite;
}
.minute {
width: 8px;
height: 100px;
background-color: blue;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -100%);
transform-origin: center bottom;
animation: clockMove 3600s linear infinite;
}
.second {
width: 4px;
height: 120px;
background-color: green;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -100%);
transform-origin: center bottom;
animation: clockMove 60s infinite steps(60);
}
@keyframes clockMove {
from {
transform: translate(-50%, -100%) rotate(0deg);
}
to {
transform: translate(-50%, -100%) rotate(360deg);
}
}
</style>
</head>
<body>
<div class="clock">
<div class="line line1"></div>
<div class="line line2"></div>
<div class="line line3"></div>
<div class="line line4"></div>
<div class="line line5"></div>
<div class="line line6"></div>
<div class="cover"></div>
<div class="hour"></div>
<div class="minute"></div>
<div class="second"></div>
<div class="center"></div>
</div>
</body>
</html>
```
> 我们让秒针step(60)一步一步走,效果更好。
![](images/6.gif)
---
# 二、Web字体与图标
## 1、web字体
我们有些时候需要在网页上显示一些特殊的字体,如果这些特殊的字体在电脑上没有安装的话,就会显示系统默认的字体,而不是这些特殊的字体。
这时就有了 Web 字体。开发人员可以为自已的网页指定特殊的字体,无需考虑用户电脑上是否安装了此特殊字体,从此把特殊字体处理成图片的时代便成为了过去。它的支持程度比较好,甚至 IE 低版本浏览器也能支持。
## 2、字体格式
不同浏览器所支持的字体格式是不一样的,我们有必要了解一下有关字体格式的知识。
- `TureTpe(.ttf) `格式
.ttf字体是Windows和Mac的最常见的字体是一种RAW格式支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+
- `OpenType(.otf)`格式
.otf字体被认为是一种原始的字体格式其内置在TureType的基础上支持这种字体的浏览器有Firefox3.5+、Chrome4.0+、Safari3.1+、Opera10.0+、iOS Mobile、Safari4.2+
- `Web Open Font Format(.woff)`格式
woff字体是Web字体中最佳格式他是一个开放的TrueType/OpenType的压缩版本同时也支持元数据包的分离支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+
- `Embedded Open Type(.eot)`格式
.eot字体是IE专用字体可以从TrueType创建此格式字体支持这种字体的浏览器有IE4+
- `SVG(.svg)`格式
.svg字体是基于SVG字体渲染的一种格式支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+
## 3、使用步骤
需要注意的是,我们在使用 Web 字体的时候,应该首先把需要用到特殊字体的这些字写好,然后在网络上生成这些字体对应的 Web 字体库并将其下载下来。下图为一个网站生成和下载web字体的网站点击立即使用就可以了
![](images/10.png)
下载下来之后,把下在下来的所有文件导入自己的项目,注意路径的匹配问题。
之后在我们css样式里面使用` @font-face`关键字来自定义 Web 字体。
```css
@font-face {
font-family: 'shuangyuan';
src: url('../fonts/webfont.eot'); /* IE9*/
src: url('../fonts/webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../fonts/webfont.woff') format('woff'), /* chrome、firefox */
url('../fonts/webfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('../fonts/webfont.svg#webfont') format('svg'); /* iOS 4.1- */
}
```
最后在使用的时候:`font-family: "shuangyuan";` 就可以使用 shuangyuan 这种字体了。
## 4、字体图标
字体图标就是我们常见的字体,不过这个字体的表现形式为一个图标。这样我们就可以使用这些特殊的字体来代替精灵图了。
常见的是把网页常用的一些小的图标,借助工具帮我们生成一个字体包,然后就可以像使用文字一样使用图标了。
**优点:**
- 将所有图标打包成字体库,减少请求;
- 具有矢量性,可保证清晰度;
- 使用灵活,便于维护
### 4.1、方法一
使用方法和Web字体一样。也是先下载需要的图标字体库文件然后使用关键字 `@font-face` 生成自己的web图标字体。
示例:
```css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
@font-face {
font-family: 'iconfont';
src: url('../fonts/iconfont.eot'); /* IE9*/
src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../fonts/iconfont.woff') format('woff'), /* chrome、firefox */
url('../fonts/iconfont.ttf') format('truetype'), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
url('../fonts/iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */
}
.myFont{
font-family: iconfont;
}
/*笑脸*/
.smile::before{
content: "\e641";
color: red;
font-size: 50px;
}
/*输出*/
.output::before{
content: "\e640";
color: blue;
font-size: 50px;
}
</style>
</head>
<body>
<!--使用字体图标的时候得自己指定你想使用的图片-->
<span class="myFont smile"></span>
<span class="myFont output"></span>
<span class="myFont">&#xe642;</span>
</body>
</html>
```
### 4.2、方法二
直接在线调用网上web图标 css库
```css
<link rel="stylesheet" href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css">
```
使用的时候:和方法一一样,直接使用类属性 `class='fa fa-play` 的方式fa-play是一个播放的图标不同的图标的名字含义不同只需要到 font-awesome 官网http://www.fontawesome.com.cn/)找到对应的图标的名称即可。
示例:
```html
<a href="javascript:void(0);" class="fa fa-play"></a> <!--播放图标-->
<a href="javascript:void(0);" class="fa fa-arrows-alt"></a> <!--全屏图标-->
```
> 注意class 样式的 第一个 fa 是必写的,表示的是用的 font-awesome 的字体图标。
![](https://github.com/Daotin/pic/raw/master/fgx.png)