css旋转动画


title: 'css旋转动画'
date: 2022-10-09 16:38:09
tags:


image_0.2865459501379348.gif
image_0.015742154289754007.gif
import React, { useState } from 'react';
import './rotatingMenu.scss';

const RotatingMenu = (props) => {
  const [isClick, setIsClick] = useState(false);
  return (
    <div className="rotatingMenu">
      <div
        className="rMenu"
        onClick={() => {
          setIsClick(!isClick);
        }}
      >
        <div className={`${isClick ? 'click' : ''}  rMenu_I`} />
      </div>
    </div>
  );
};

export default RotatingMenu;


css文件

.rotatingMenu {
  height: 100vh;
  background: rgb(255 255 0 / 12%);

  .rMenu {
    height: 100px;
    background: #c69797;
    position: relative;
  
    .rMenu_I {
      width: 40px;
      height: 5px;
      display: block;
      z-index: 1;
      border-radius: 2.5px;
      background: rgba(255, 255, 255, 0.7);
      transition: transform 0.5s, top 0.5s;
      position: absolute;
      top: 0;
      bottom: 0;
      right: 0;
      left: 0;
      margin: auto;
    }
    .rMenu_I::after {
      width: 40px;
      height: 5px;
      display: block;
      z-index: 1;
      border-radius: 2.5px;
      background: rgba(255, 255, 255, 0.7);
      transition: transform 0.5s, top 0.5s;
      content: "";
      position: absolute;
      left: 0;
      top: -10px;
    }
    .rMenu_I::before {
      width: 40px;
      height: 5px;
      display: block;
      z-index: 1;
      border-radius: 2.5px;
      background: rgba(255, 255, 255, 0.7);
      transition: transform 0.5s, top 0.5s;
      content: "";
      position: absolute;
      left: 0;
     top: 10px;
    }
    .click {
        background: transparent;
    }
    .click::after {
      transform: rotate(-45deg);
      top: 0;
      width: 40px;
    }
    .click::before {
      transform: rotate(45deg);
      top: 0;
      width: 40px;
    }
  }
}


实现思路
1.首先实现三条线,其实只是div出中间的线,上线两条线是通过伪类 ::after和::before创建的,两条线一条top 10px,一条-10px,这样三条线就创建好了
2.肯定是要用到动画,这里用的是transition和transform ,transition可以帮我们实现动画,transform是用来实现元素的旋转
3.具体的动画实现:
a.点击元素后,中间的线通过背景为transparent,让他变为透明的
b.上面那条线也就是after创建的那个,通过transform: rotate(-45deg)让他逆时针旋转45度
c.同理下面那条线,让他瞬时间旋转45度,这样就会最终就有一个交叉的效果
d.这时候你就会发发现这个交叉,并没有完全变成'X',这时候就需要我们把它俩的top设置为0,也就是让他俩位于中间线那个位置。


至于元素的恢复
则是通过 transition: transform 0.5s, top 0.5s;
通过transform和top进行恢复动画

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SVG中image的CSS旋转动画 1.在jsx中引入图片的引用地址 constfun2=require('@/a...
    杨保_32bb阅读 2,424评论 0 0
  • 盒子模型(CSS重点) 其实,CSS就三个大模块: 盒子模型 、 浮动 、 定位,其余的都是细节。要求这三部分,...
    xlystar阅读 1,651评论 0 1
  • 学会使用CSS选择器熟记CSS样式和外观属性熟练掌握CSS各种选择器熟练掌握CSS各种选择器熟练掌握CSS三种显示...
    七彩小鹿阅读 6,332评论 2 66
  • # CSS样式规则overflow 使用HTML时,需要遵从一定的规范。CSS亦如此,要想熟练地使用CSS对网页进...
    低调迷人的反派角色阅读 1,021评论 0 1
  • CSS样式规则 使用HTML时,需要遵从一定的规范。CSS亦如此,要想熟练地使用CSS对网页进行修饰,首先需要了解...
    wrootlflvl阅读 1,772评论 0 2