CSS动画实例:旋转的叶片

在页面中放置一个类名为container的层作为容器,在该层中再定义一个名为shape的子层,HTML代码描述如下:

<div class="container">

<div class="shape"></div>

</div>

分别为container和shape定义CSS样式规则如下:

.container

{

margin: 0 auto;

width: 500px;

height: 500px;

position: relative;

overflow: hidden;

display: block;

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

background:#d8d8d8;

border-radius: 10%;

}

.shape

{

position: absolute;

width: 80%;

height: 45%;

left: 10%;

bottom:30%;

border-radius: 100% 4px;

opacity: 0.6;

background: #fffe33;

}

在CSS样式的作用下,这2个层在浏览器中显示如图1所示,其中子层显示为1个淡黄色的叶片。

图1  叶片

若将图1所示的叶片每隔10°复制一次,复制17次后,18个叶片将围成一个圆周。为了得到这个圆周图案,在container层中定义18个名为shape的子层,并且为每个子层设置两个变量:表示该子层旋转角度的变量—rotation和表示该子层背景色的变量—color。

编写的HTML文件内容如下。

<!DOCTYPE html>
<html>
<head>
<title>旋转的叶片</title>
<style>
  .container
  {
     margin: 0 auto;
     width: 500px;
     height: 500px;
     position: relative;
     overflow: hidden;
     display: block;
     border: 4px solid rgba(255, 0, 0, 0.9);
     background:#d8d8d8;
     border-radius: 10%;
   }
   .shape
   {
     position: absolute;
     width: 80%;
     height: 45%;
     left: 10%;
     bottom:30%;
     border-radius: 100% 4px;
     opacity: 0.6;
   }
   .shape:nth-child(1n+0)
   {
      background: var(--color);
      transform: rotate(var(--rotation));
   }
</style>
</head>
<body>
<div class="container">
    <div class="shape" style="--rotation: 0deg;--color:#fffe33"></div>
    <div class="shape" style="--rotation: -10deg;--color:#feff00"></div>
    <div class="shape" style="--rotation: -20deg;--color:#ff9935"></div>
    <div class="shape" style="--rotation: -30deg;--color:#f87e07"></div>
    <div class="shape" style="--rotation: -40deg;--color:#ff339c"></div>
    <div class="shape" style="--rotation: -50deg;--color:#ff007e"></div>
    <div class="shape" style="--rotation: -60deg;--color:#ff34ff"></div>
    <div class="shape" style="--rotation: -70deg;--color:#ff00ff"></div>
    <div class="shape" style="--rotation: -80deg;--color:#9a34ff"></div>
    <div class="shape" style="--rotation: -90deg;--color:#7f00ff"></div>
    <div class="shape" style="--rotation: -100deg;--color:#3233ff"></div>
    <div class="shape" style="--rotation: -110deg;--color:#0000fe"></div>
    <div class="shape" style="--rotation: -120deg;--color:#3399fe"></div>
    <div class="shape" style="--rotation: -130deg;--color:#0978f5"></div>
    <div class="shape" style="--rotation: -140deg;--color:#33fffe"></div>
    <div class="shape" style="--rotation: -150deg;--color:#32ff98"></div>
    <div class="shape" style="--rotation: -160deg;--color:#99ff32"></div>
    <div class="shape" style="--rotation: -170deg;--color:#81fe00"></div>
</div>
</body>
</html>

View Code

在浏览器中打开包含这段HTML代码的html文件,可以看到如图2所示的图案。

图2  18个叶片组成的图案

现在让这18个叶片旋转起来,编写关键帧定义为:

@keyframes rotate

{

from { transform: rotate(var(--rotation)); }

to   { transform: rotate(360deg);  }

}

然后在.shape样式定义中加上一句“animation: rotate 3s alternate infinite ease-in-out;”,此时,18个叶片会旋转起来,收拢为1个叶片,之后又旋转展开为18个叶片,如图3所示。

图3  旋转后收拢并展开的叶片

由于定义关键帧@keyframes rotate中结束帧状态均是旋转360deg,因此18个叶片会收拢成1个叶片。若想让18个叶片各自旋转360°不收拢起来,可修改关键帧定义如下:

@keyframes rotate

{

from { transform: rotate(var(--rotation)); }

to   { transform: rotate(calc(360deg + var(--rotation)));  }

}

此时,在浏览器中呈现出如图4所示的效果。

图4  旋转的叶片

图4中叶片较密,且不是绕一个方向匀速旋转。为此,去掉9个偶数项子层(即旋转角度为-10deg、-30deg、…、-170deg的子层),且修改动画属性定义语句为:

animation: rotate 3s linear infinite;

则呈现出如图5所示的动画效果。

图5  绕一个方向匀速旋转的叶片

完整的HTML文件内容如下。

<!DOCTYPE html>
<html>
<head>
<title>旋转的叶片</title>
<style>
  .container
  {
     margin: 0 auto;
     width: 500px;
     height: 500px;
     position: relative;
     overflow: hidden;
     display: block;
     border: 4px solid rgba(255, 0, 0, 0.9);
     background:#d8d8d8;
     border-radius: 10%;
   }
   .shape
   {
     position: absolute;
     width: 80%;
     height: 45%;
     left: 10%;
     bottom:30%;
     border-radius: 100% 4px;
     opacity: 0.6;
     animation: rotate 3s linear infinite;
   }
   .shape:nth-child(1n+0)
   {
      background: var(--color);
      transform: rotate(var(--rotation));
   }
   @keyframes rotate
   {
       from { transform: rotate(var(--rotation)); }
       to   { transform: rotate(calc(360deg + var(--rotation)));  }
   }
</style>
</head>
<body>
<div class="container">
    <div class="shape" style="--rotation: 0deg;--color:#fffe33"></div>
    <div class="shape" style="--rotation: -20deg;--color:#ff9935"></div>
    <div class="shape" style="--rotation: -40deg;--color:#ff339c"></div>
    <div class="shape" style="--rotation: -60deg;--color:#ff34ff"></div>
    <div class="shape" style="--rotation: -80deg;--color:#9a34ff"></div>
    <div class="shape" style="--rotation: -100deg;--color:#3233ff"></div>
    <div class="shape" style="--rotation: -120deg;--color:#3399fe"></div>
    <div class="shape" style="--rotation: -140deg;--color:#33fffe"></div>
    <div class="shape" style="--rotation: -160deg;--color:#99ff32"></div>
</div>
</body>
</html>

View Code

(0)

相关推荐

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

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

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

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

  • CSS动画实例:涡旋

    设页面中有<div class=" vortex "></div>,若定义. vortex的样式规则和关键帧如下: .vortex { position: ...

  • CSS动画实例:圆与圆的碰撞

    在页面中放置9个<div class=" circle"></div>,定义每个.circle的样式规则,使得9个圆在页面中显示为半径依次相差20px的同心 ...

  • CSS动画实例:SierPinski地毯

    设页面中有<div class="shape"></div>,若定义.shape的样式规则为: .shape { width: 100px; height: ...

  • CSS动画实例:行星和卫星

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

  • CSS动画实例:小圆球的海洋

    CSS背景属性用于定义HTML元素的背景,在CSS提供的背景属性中, background-image:指定要使用的一个或多个背景图像: background-color:指定要使用的背景颜色: ba ...

  • CSS动画实例:升空的气球

    CSS动画实例:升空的气球

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

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