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


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

    <div class="container">

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

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

         <div class="shape">

            <div class="shape">

            </div>

         </div>

      </div></div></div></div>

      </div></div></div></div>

    </div>

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

      .container

      {

         margin: 0 auto;

         650px;

         height: 650px;

         position: relative;

         overflow: hidden;

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

         display: flex;

         padding: 0;

         flex: 1;

         align-items: center;

         justify-content: center;

       }

       .shape

       {

          background: radial-gradient(circle, #000, transparent) #f00;

          border: 1px solid;

          box-sizing: border-box;

          border-radius: 5%;

          padding: 20px;

       }

          在CSS样式的作用下,这11个层在浏览器中显示如图1所示。10个层层嵌套的子层显示为10个圆角正方形。

    图1  10个圆角正方形

    现在让这10个圆角正方形旋转起来,编写关键帧定义为:

       @keyframes turn

       {

          0%   {  transform: rotate(0deg); }

          100% {  transform: rotate(360deg); }

       }

          然后在.shape样式定义中加上一句“animation: turn 30s infinite linear;”,此时,10个圆角正方形会旋转起来,如图2所示。

     

    图2  旋转的红色圆角正方形

          图2中旋转的10个正方形的背景色全部为红色,我们想让颜色进行些变化,在编写一个名为rainbow(彩虹)的颜色变化的关键字定义如下:

       @keyframes rainbow

       {

          0%,100% { color: #f00; }

          16.667% { color: #ff0; }

          33.333% { color: #0f0; }

          50.000% { color: #0ff; }

          66.667% { color: #00f; }

          83.333% { color: #f0f; }

       }

    再修改shape的样式规则定义为:

       .shape

       {

          background: radial-gradient(circle, #000, transparent)  currentcolor;

          border: 1px solid;

          box-sizing: border-box;

          border-radius: 5%;

          padding: 20px;

          animation: turn 10s infinite linear,rainbow 10s infinite linear;

       }

          其中修改了两处:一处是将背景颜色由红色(#f00)改成当前色(currentcolor),另一处是在动画属性animation中加入了颜色变化的动画定义。

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

     

    图3  旋转的变色圆角正方形

          图3中旋转过程中正方形虽然会改变颜色,但10个正方形的颜色仍然一样。为了让各个正方形颜色不同,可以为每个层定义一个变量—n,然后为颜色变化的动画加上属性animation-delay,它的属性值根据变量—n进行计算。

          完整的HTML文件内容如下。

    <!DOCTYPE html>
    <html>
    <head>
    <title>旋转的正方形</title>
    <style>
      .container
      {
         margin: 0 auto;
         width: 600px;
         height: 600px;
         position: relative;
         overflow: hidden;
         border: 4px solid rgba(255, 0, 0, 0.9);
         display: flex;
         padding: 0;
         flex: 1;
         align-items: center;
         justify-content: center;
       } 
       .shape 
       {
          background: radial-gradient(circle, #000, transparent)  currentcolor;
          border: 1px solid;
          box-sizing: border-box;
          border-radius: 5%;
          padding: 20px;
          animation: turn 30s infinite linear,
                     rainbow 30s infinite linear
               calc(30 * (10 * (10 - var(--n)) * 0.01) * -1s);
       }
       @keyframes turn 
       {
          0%   {  transform: rotate(0deg); }
          100% {  transform: rotate(360deg); }
       }
       @keyframes rainbow 
       {
          0%,100% { color: #f00; }
          16.667% { color: #ff0; }
          33.333% { color: #0f0; }
          50.000% { color: #0ff; }
          66.667% { color: #00f; }
          83.333% { color: #f0f; }
       }
    </style>
    </head>
    <body>
    <div class="container">
      <div class="shape" style="--n: 10;"><div class="shape" style="--n: 9;">
      <div class="shape" style="--n: 8;"><div class="shape" style="--n: 7;">
      <div class="shape" style="--n: 6;"><div class="shape" style="--n: 5;">
      <div class="shape" style="--n: 4;"><div class="shape" style="--n: 3;">
         <div class="shape" style="--n: 2;">
            <div class="shape" style="--n: 1;">
            </div>
         </div>
      </div></div></div></div>
      </div></div></div></div>
    </div>
    </body>
    </html>
    View Code

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

     

    图4  旋转的彩色正方形

          我们也可以采用如下的方法实现旋转的圆角正方形。

          在页面中放置一个类名为container的层作为效果呈现容器,在该层中再定义18个名为shape的子层,为每个子层设置三个变量:表示该子层缩放比例的变量—scale,表示该子层初始旋转角度的变量—rotation和表示该子层背景色的变量—color。HTML代码描述如下:

    <div class="container">

        <div class="shape" style="--scale: 0.840;--rotation: 180deg;--color:#f00"></div>

        <div class="shape" style="--scale: 0.720;--rotation: 360deg;--color:#f36"></div>

        <div class="shape" style="--scale: 0.605;--rotation: 540deg;--color:#f69"></div>

        <div class="shape" style="--scale: 0.518;--rotation: 720deg;--color:#f9c"></div>

        <div class="shape" style="--scale: 0.435;--rotation: 900deg;--color:#900"></div>

        <div class="shape" style="--scale: 0.373;--rotation: 1080deg;--color:#936"></div>

        <div class="shape" style="--scale: 0.314;--rotation: 1260deg;--color:#969"></div>

        <div class="shape" style="--scale: 0.269;--rotation: 1440deg;--color:#993"></div>

        <div class="shape" style="--scale: 0.226;--rotation: 1620deg;--color:#9c0"></div>

        <div class="shape" style="--scale: 0.193;--rotation: 1800deg;--color:#909"></div>

        <div class="shape" style="--scale: 0.163;--rotation: 1980deg;--color:#f06"></div>

        <div class="shape" style="--scale: 0.139;--rotation: 2160deg;--color:#a9a9a9"></div>

        <div class="shape" style="--scale: 0.117;--rotation: 2340deg;--color:#bdb76b"></div>

        <div class="shape" style="--scale: 0.100;--rotation: 2520deg;--color:#556b2f"></div>

        <div class="shape" style="--scale: 0.084;--rotation: 2700deg;--color:#ff8c00"></div>

        <div class="shape" style="--scale: 0.072;--rotation: 2880deg;--color:#e9967a"></div>

        <div class="shape" style="--scale: 0.061;--rotation: 3060deg;--color:#8fbc8f></div>

        <div class="shape" style="--scale: 0.052;--rotation: 3240deg;--color:#2f4f4f"></div>

    </div>

          分别为container和shape定义CSS样式规则,并定义动画关键帧。

          完整的HTML代码如下。

    <!DOCTYPE html>
    <html>
    <head>
    <title>旋转的圆角正方形</title>
    <style>
      .container
      {
         margin: 0 auto;
         width: 500px;
         height: 500px;
         position: relative;
         overflow: hidden;
         border: 4px solid rgba(255, 0, 0, 0.9);
         display: flex;
         padding: 0;
         flex: 1;
         align-items: center;
         justify-content: center;
         background:#d8d8d8;
         border-radius: 10%;
       } 
       .shape
       {
         position: absolute;
         width: 80%;
         height: 80%;
         top: 50%;
         left: 50%;
         opacity: 0.6;
         border-radius:10%;
         animation: rotate 5s alternate infinite ease-in-out;
       }
       .shape:nth-child(1n+0) 
       {
          background: var(--color);
       }
       @keyframes rotate 
       {
           from { transform: translate(-50%, -50%) rotate(var(--rotation)) scale(var(--scale)); }
           to   { transform: translate(-50%, -50%) rotate(90deg) scale(var(--scale));  }
       }
    </style>
    </head>
    <body>
    <div class="container"> 
        <div class="shape" style="--scale: 0.840;--rotation: 180deg;--color:#f00"></div>
        <div class="shape" style="--scale: 0.720;--rotation: 360deg;--color:#f36"></div>
        <div class="shape" style="--scale: 0.605;--rotation: 540deg;--color:#f69"></div>
        <div class="shape" style="--scale: 0.518;--rotation: 720deg;--color:#f9c"></div>
        <div class="shape" style="--scale: 0.435;--rotation: 900deg;--color:#900"></div>
        <div class="shape" style="--scale: 0.373;--rotation: 1080deg;--color:#936"></div>
        <div class="shape" style="--scale: 0.314;--rotation: 1260deg;--color:#969"></div>
        <div class="shape" style="--scale: 0.269;--rotation: 1440deg;--color:#993"></div>
        <div class="shape" style="--scale: 0.226;--rotation: 1620deg;--color:#9c0"></div>
        <div class="shape" style="--scale: 0.193;--rotation: 1800deg;--color:#909"></div>
        <div class="shape" style="--scale: 0.163;--rotation: 1980deg;--color:#f06"></div>
        <div class="shape" style="--scale: 0.139;--rotation: 2160deg;--color:#a9a9a9"></div>
        <div class="shape" style="--scale: 0.117;--rotation: 2340deg;--color:#bdb76b"></div>
        <div class="shape" style="--scale: 0.100;--rotation: 2520deg;--color:#556b2f"></div>
        <div class="shape" style="--scale: 0.084;--rotation: 2700deg;--color:#ff8c00"></div>
        <div class="shape" style="--scale: 0.072;--rotation: 2880deg;--color:#e9967a"></div>
        <div class="shape" style="--scale: 0.061;--rotation: 3060deg;--color:#8fbc8f></div>
        <div class="shape" style="--scale: 0.052;--rotation: 3240deg;--color:#2f4f4f"></div>
    </div>
    </body>
    </html>
    View Code

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

     

    图5  旋转的圆角正方形

  • 相关阅读:
    [笔记]: 树链剖分 2017-06-05 16:57 35人阅读 评论(0) 收藏
    [笔记]: 最小生成树Kruska 2017-06-05 16:52 34人阅读 评论(0) 收藏
    [笔记]: 并查集 2017-06-05 16:49 58人阅读 评论(0) 收藏
    [bzoj2144]: 跳跳棋 2017-06-02 15:53 42人阅读 评论(0) 收藏
    [noip2013] 货车运输(最大生成树+并查集+LCA) 2017-06-02 15:18 56人阅读 评论(0) 收藏
    [练习] LCA练习1(最基础) 2017-06-02 11:54 39人阅读 评论(0) 收藏
    [笔记]: RMQ算法(区间查询) 2017-06-01 18:06 44人阅读 评论(0) 收藏
    [笔记]: LCA最近公共祖先 2017-06-01 11:38 38人阅读 评论(0) 收藏
    [hdu&poj&洛谷] 经典线段树练习题 2017-06-01 08:10 56人阅读 评论(0) 收藏
    保留X位小数(Double) swift
  • 原文地址:https://www.cnblogs.com/cs-whut/p/13494143.html
Copyright © 2020-2023  润新知