CSS背景属性用于定义HTML元素的背景,在CSS提供的背景属性中,

background-image:指定要使用的一个或多个背景图像;

background-color:指定要使用的背景颜色;

background-position:指定背景图像的位置;

background-size:指定背景图片的大小;

background-repeat:指定如何重复背景图像;

background-origin  指定背景图像的定位区域;

background-clip     指定背景图像的绘画区域;

background-attachment  设置背景图像是否固定或者随着页面的其余部分滚动。

下面我们以“小圆球的海洋”作为实例来体会背景动画的设计方法。

1.CSS3 径向渐变

在CSS3中,可以使用radial-gradient() 函数以径向渐变的方式创建背景“图像”。径向渐变由它的中心定义。其调用格式为:

background-image: radial-gradient(shape size at position, start-color, ..., last-color);

各参数说明如下:

shape确定渐变的类型,属性值ellipse(默认)指定椭圆形的径向渐变,circle指定圆形的径向渐变。

size  定义渐变的大小,可取属性值有:

farthest-corner(默认):指定径向渐变的半径长度为从圆心到离圆心最远的角;

closest-side:指定径向渐变的半径长度为从圆心到离圆心最近的边;

closest-corner:指定径向渐变的半径长度为从圆心到离圆心最近的角;

farthest-side:指定径向渐变的半径长度为从圆心到离圆心最远的边。

position   定义渐变的位置。可取属性值有:

center(默认):设置中间为径向渐变圆心的纵坐标值;

top:设置顶部为径向渐变圆心的纵坐标值;

bottom:设置底部为径向渐变圆心的纵坐标值。

start-color,…,last-color用于指定渐变的起止颜色,可以使用长度值或百分比来指定起止色位置,但不允许负值。

设页面中有<div class="shape"></div>,定义.shape的样式规则如下:

.shape

{

width:200px;

height:150px;

background-image: radial-gradient(red, green, blue);

}

可在页面中显示如图1所示的径向渐变图案。在这个径向渐变中颜色结点分布均匀。

图1  径向渐变图(颜色结点分布均匀)

若改写为:background-image: radial-gradient(red 5%, green 15%, blue 60%);,则显示的图案如图2所示。

图2  径向渐变图(颜色结点分布不均匀)

若改写为:background-image: radial-gradient(closest-side at 60% 50%, red, green, blue);,则显示如图3所示的图案。

图3  径向渐变图

若改写为:background-image: radial-gradient(circle, red, green, blue);,则显示如图4所示的图案。

图4  圆形径向渐变图

若修改.shape的样式定义为:

.shape

{

width:200px;

height:200px;

border-radius:50%;

background-image: radial-gradient(circle, red,yellow,blue);

}

可在页面中显示如图5所示的圆形。

图5  圆形

2.小圆球一分为四

设页面中有<div class="ocean"></div>,为.ocean定义样式规则如下:

.ocean

{

margin: 0 auto;

width:450px;

height: 450px;

border: 4px solid rgba(255, 0, 0, 0.9);

border-radius: 10%;

background-image: radial-gradient(circle at center, #f5f6fa 10px, transparent 0),

radial-gradient(circle at center, #f5f6fa 10px, transparent 0),

radial-gradient(circle at center, #f5f6fa 10px, transparent 0),

radial-gradient(circle at center, #f5f6fa 10px, transparent 0);

background-size: 90px 90px;

background-color: #0652dd;

background-repeat:no-repeat;

}

则页面中的显示如图6所示。background-image后定义了四个径向渐变图像,由于没有给它们指定位置,会叠放在一起,因而显示为一个小圆球。小圆球的圆心坐标为(45px,45px)。

图6  一个白色小圆球

为这四个小圆球指定位置,在.ocean样式定义中加上如下属性设置:

background-position: calc(50% + 0px) calc(50% + 0px),

calc(50% + 0px) calc(50% + 90px),

calc(50% + 90px) calc(50% + 0px),

calc(50% + 90px) calc(50% + 90px);

则页面中的显示如图7所示。

图7  4个小圆球

为从图6至图7的变化定义关键帧,使小球由一分成四,编写的HTML文件内容如下。

<!DOCTYPE html>
<html>
<head>
<title>小圆球一分为四</title>
<style>
.ocean
{
margin: 0 auto;
width:450px;
height: 450px;
border: 4px solid rgba(255, 0, 0, 0.9);
border-radius: 10%;
background-image: radial-gradient(circle at center, #f5f6fa 10px, transparent 0),
radial-gradient(circle at center, #f5f6fa 10px, transparent 0),
radial-gradient(circle at center, #f5f6fa 10px, transparent 0),
radial-gradient(circle at center, #f5f6fa 10px, transparent 0);
background-size: 90px 90px;
background-color: #0652dd;
animation: anim 2s infinite linear;
background-repeat:no-repeat;
}
@keyframes anim
{
to
{
background-position: calc(50% + 0px) calc(50% + 0px),
calc(50% + 0px) calc(50% + 90px),
calc(50% + 90px) calc(50% + 0px),
calc(50% + 90px) calc(50% + 90px);
}
}
</style>
</head>
<body>
<div class="ocean"></div>
</body>
</html>

在浏览器中打开包含这段HTML代码的html文件,可以呈现出如图8所示的动画效果。

图8  小圆球一分为四(no-repeat)

若将上面样式定义中的“background-repeat:no-repeat;”去掉,此时背景图像将向垂直和水平方向重复,则呈现出如图9所示的动画效果。

图9  小圆球一分为四(repeat)

3.小圆球的海洋

理解了图8和图9的动画思想,我们继续。

为4个小圆球指定好初始位置,然后将各自的终止位置略作变化。编写如下的HTML文件。

<!DOCTYPE html>
<html>
<head>
<title>小圆球的海洋</title>
<style>
.ocean
{
margin: 0 auto;
width:450px;
height: 450px;
border: 4px solid rgba(255, 0, 0, 0.9);
border-radius: 10%;
background-image: radial-gradient(circle at center, #f5f6fa 10px, transparent 0),
radial-gradient(circle at center, #f5f6fa 10px, transparent 0),
radial-gradient(circle at center, #f5f6fa 10px, transparent 0),
radial-gradient(circle at center, #f5f6fa 10px, transparent 0);
background-position: calc(50% + 0px) calc(50% + 0px),
calc(50% + 0px) calc(50% + 90px),
calc(50% + 90px) calc(50% + 90px),
calc(50% + 90px) calc(50% + 0px);
background-size: 90px 90px;
background-color: #0652dd;
animation: anim 2s infinite linear;
background-repeat:no-repeat;
}
@keyframes anim
{
to
{
background-position:calc(50% + 90px) calc(50% + 0px),
calc(50% + 0px) calc(50% + 0px),
calc(50% + 0px) calc(50% + 90px),
calc(50% + 90px) calc(50% + 90px);
}
}
</style>
</head>
<body>
<div class="ocean"></div>
</body>
</html>

在浏览器中打开包含这段HTML代码的html文件,可以呈现出如图10所示的动画效果。

图10  旋转的4个小圆球

同样将样式定义中的“background-repeat:no-repeat;”去掉,此时背景图像将向垂直和水平方向重复,则呈现出如图11所示的动画效果。

图11  小圆球的海洋(1)

若在图11的基础上,在关键帧to中加上一句“background-size: 180px 180px;”,使得关键结束帧的背景大小扩大1倍,则呈现出如图12所示的动画效果。

图12  小圆球的海洋(2)

在关键帧to中加上的一句为“background-size: 45px 45px;”,使得关键结束帧的背景大小缩小1倍,且将radial-gradient四个函数中的10px均修改为8px,使得小圆球也适当变小,则呈现出如图13所示的动画效果。

图13  小圆球的海洋(3)

将整个屏幕作为背景,显示欢乐的小圆球,编写的HTML文件如下。

<!DOCTYPE html>
<html>
<head>
<title>满屏都是小圆球</title>
<style>
body
{
min-height: 100vh;
background-image: radial-gradient(circle at center, #f5f6fa 1vmin, transparent 0),
radial-gradient(circle at center, #f5f6fa 1vmin, transparent 0),
radial-gradient(circle at center, #f5f6fa 1vmin, transparent 0),
radial-gradient(circle at center, #f5f6fa 1vmin, transparent 0);
background-position: calc(50% + 0vmin) calc(50% + 0vmin),
calc(50% + 0vmin) calc(50% + 15vmin),
calc(50% + 15vmin) calc(50% + 15vmin),
calc(50% + 15vmin) calc(50% + 0vmin);
background-size: 15vmin 15vmin;
animation: anim 2s infinite linear;
background-color: #0652dd;
}
@keyframes anim
{
to
{
background-size: 30vmin 30vmin;
background-position: calc(50% + 15vmin) calc(50% + 0vmin),
calc(50% + 0vmin) calc(50% + 0vmin),
calc(50% + 0vmin) calc(50% + 15vmin),
calc(50% + 15vmin) calc(50% + 15vmin);
}
}
</style>
</head>
<body>
</body>
</html>

在浏览器中打开包含这段HTML代码的html文件,可以呈现出如图14所示的动画效果。

图14  满屏都是欢乐的小圆球

CSS动画实例:小圆球的海洋的更多相关文章

  1. CSS动画实例

    上一篇讲过css动画transform transition的语法,这一节展示自己做的几个小例子加深印象 1. 线条动画效果 代码:最外层div包含2个小的div : a和b.   a有左右边框(高度 ...

  2. CSS动画实例:太极图在旋转

    利用CSS可以构造出图形,然后可以对构造的图形添加动画效果.下面我们通过旋转的太极图.放大的五角星.跳“双人舞”的弯月等实例来体会纯CSS实现动画的方法. 1.旋转的太极图 设页面中有<div ...

  3. CSS动画实例:移动的眼珠子

    适当地利用CSS的box-shadow可以构造图形,然后可以对构造的图形添加动画效果.下面我们通过移动的眼珠子.圆珠一二三.一分为四.四小圆旋转扩散等实例来体会box-shadow属性在动画制作中的使 ...

  4. CSS动画实例:升空的气球

    1.制作一个气球 设页面中有<div class="balloon"></div>,为. balloon设置样式规则如下: .balloon { heigh ...

  5. CSS动画实例:行星和卫星

    设页面中有<div class=" planet "></div>,用来绘制一个行星和卫星图形.这个图形包括三部分:行星.卫星和卫星旋转的轨道.定义. pl ...

  6. CSS动画实例:旋转的圆角正方形

    在页面中放置一个类名为container的层作为效果呈现容器,在该层中再定义十个名为shape的层层嵌套的子层,HTML代码描述如下: <div class="container&qu ...

  7. CSS动画实例:一颗躁动的心

    在页面中放置一个类名为container的层作为盛放心心的容器,在该层中再定义一个名为heart的子层,HTML代码描述如下: <div class="container"& ...

  8. CSS动画实例:跳跃的字符

    1.翻转的字符 在页面中放置一个类名为container的层作为容器,在该层中放置5个字符区域,HTML代码描述如下: <div class="container"> ...

  9. CSS动画实例:Loading加载动画效果(三)

    3.小圆型Loading 这类Loading动画的基本思想是:在呈现容器中定义1个或多个子层,再对每个子层进行样式定义,使得其均显示为一个实心圆形,最后编写关键帧动画控制,使得各个实心圆或者大小发生改 ...

随机推荐

  1. php提取xml配置参数

    demo1.php <?php class AddressManager{ private $addresses = array("ip地址1","ip地址2&qu ...

  2. 2016A06寒假作业 全排列

    又是一个全排列哈, 注意注意,这个题不是十三个数字都需要,但原理是一样的 一开始把for的边界写错了(每次其实应该从k开始,还没看出来orz) #include <iostream> #i ...

  3. 程序员面试:C/C++求职者必备 20 道面试题,一道试题一份信心!

    面试真是痛并快乐的一件事,痛在被虐的体无完肤,快乐在可以短时间内积累很多问题,加速学习. 在我们准备面试的时候,遇到的面试题有难有易,不能因为容易,我们就轻视,更不能因为难,我们就放弃.我们面对高薪就 ...

  4. Linux的VMWare中Centos7文件目录类命令

    1.)ls命令简介 ls   ---列出目前工作目录所含之文件及子目录 语法    ls [-alrtAFR] [name...]   参数 : -a 显示所有文件及目录 (ls内定将文件名或目录名称 ...

  5. org.hibernate.AssertionFailure: null id 错误

    对象属性有Blob类型: 而Blob需在输入流中读取: InputStream in = new FileInputStream(url.getFile()); Blob bookPic = lobH ...

  6. 【python接口自动化】- ConfigParser配置文件的使用

    前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏.视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式.而在python中,也有这样的一个配置模块可以把代码可配置化 ...

  7. spring-Sessions are not supported by the MongoDB cluster to which this client is connected

    原因: 1.mongodb版本过低4.0以下不支持事务的情况下会报这个 2.安全认证问题参考如下连接 https://blog.csdn.net/ssehs/article/details/10530 ...

  8. 痞子衡嵌入式:了解i.MXRTxxx系列ROM API及其与i.MXRT1xxx系列的差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM API设计细节. 痞子衡之前写过两篇文章 <利用i.MXRT1xxx系列ROM提供的FlexSPI ...

  9. RabbitMQ 基础概念进阶

    上一篇 RabbitMQ 入门之基础概念 介绍了 RabbitMQ 的一些基础概念,本文再来介绍其中的一些细节和其它的进阶的概念. 一.消息生产者发送的消息不可达时如何处理 RabbitMQ 提供了消 ...

  10. mac 安卓生成证书(uniapp项目安卓证书申请)

    mac  安卓生成证书 义务需求: 最近在开发基于uniapp框架的app,到了打包发布的阶段,来尝试打包为安卓的apk安装包.在用HBuild打包的时候需要提供安卓的数字证书(.keystore 文 ...