css 子元素 圆 均匀分布 展开动画

在这里插入图片描述

一般情况下使用scss就可以实现

@import "math";

#app {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 200px;
    height: 200px;
    position: relative;
    border-radius: 50%;
    border: 1px solid #000;
    
    > span {
        position: absolute;
        display: flex;
        align-items: center;
        justify-content: center;
        transform-origin: center center;
        width: 50px;
        height: 50px;
        background: red;
        border-radius: 70%;
        transition: all 3s;
        top: 0;
        left: 0;
        opacity: 0;
        transform: translateX(-50%) translateY(-50%);
        @for $i from 0 through 7 {
            @keyframes moveFromCenter-#{$i} {
                from {
                    left: 50%;
                    top: 50%;
                    opacity: 0.5;
                }
                to {
                    left: calc(#{(cos(360deg / 8 * ($i + 2)) * 100px)} + 50%);
                    top: calc(#{(sin(360deg / 8 * ($i + 2)) * 100px)} + 50%);
                     opacity: 1;
                }
            }
            &:nth-child(#{$i}) {
                animation: moveFromCenter-#{$i} 0.3s * $i 1 forwards normal;
               
            }
        }
    }
}

在vue实际应用中
不需要引入sass:math 默认集成的
不需要特意安装sass 因为scss就是sass的改良版

.middle-center {
        width: 200px;
    	height: 200px;
        position: relative;
        display: flex;
        align-items: center;
        justify-content: center;
        border-radius: 50%;
        border: 1px solid red;
       
        .middle-item {
          width: 50px;
          height: 50px;
          position: absolute;
          display: flex;
          justify-content: center;
          align-items: center;
          transition: all 3s;
          $size: 300px;//圆的大小
          $num: 8;//数量 就是这个圆被分成了几份
          @for $i from 0 through $num {
            $co: cos(360deg / $num * $i);
            $si: sin(360deg / $num * $i );
            $left: calc(#{$co} * #{$size} + 50%);
            $top: calc(#{$si} * #{$size} + 50%);
            @keyframes moveFromCenter-#{$i} {
              from {
                transform: translateX(-50%) translateY(-50%);
              }
              to {
                transform: translateX(calc(-50% + #{$left})) translateY(calc(-50% + #{$top}));//这里得用插值 要不然会报错
              }
            }
            &:nth-child(#{$i}) {
              animation: moveFromCenter-#{$i} 0.3s * $i 1 forwards normal;
            }
          }
 }

如果报错可能时scss 或者sass-loader版本问题
我的版本"sass-loader": "^8.0.2","scss": "^0.2.4"
并且移除vue.config.js中有关css的配置

相关推荐

  1. dom元素+CSS实现阶梯动画效果

    2024-05-11 08:26:06       41 阅读
  2. css设置元素在父元素中水平垂直居中

    2024-05-11 08:26:06       35 阅读
  3. css实现元素内容过高时自动出现展开收起按钮

    2024-05-11 08:26:06       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 08:26:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 08:26:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 08:26:06       87 阅读
  4. Python语言-面向对象

    2024-05-11 08:26:06       96 阅读

热门阅读

  1. 超级好用的C++实用库之动态库加载器

    2024-05-11 08:26:06       30 阅读
  2. axios常用配置

    2024-05-11 08:26:06       33 阅读
  3. npm详解

    2024-05-11 08:26:06       29 阅读
  4. 【服务治理中间件】consul介绍和基本原理

    2024-05-11 08:26:06       34 阅读
  5. Express中间件(完善)

    2024-05-11 08:26:06       32 阅读
  6. VUE----数字增加,兼容小程序

    2024-05-11 08:26:06       31 阅读
  7. Android Gradle的插件

    2024-05-11 08:26:06       28 阅读
  8. sass 详解

    2024-05-11 08:26:06       40 阅读
  9. 人工智能对企业安全的影响与风险控制-内刊

    2024-05-11 08:26:06       26 阅读
  10. Oracle行锁怎么杀

    2024-05-11 08:26:06       29 阅读
  11. rviz与urdf

    2024-05-11 08:26:06       31 阅读