div+css实现三维立方体盒子折叠展开动画效果代码

代码语言:html

所属分类:动画

代码描述:div+css实现三维立方体盒子折叠展开动画效果代码

代码标签: div css 三维 立方体 盒子 折叠 展开 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开


<!DOCTYPE html>
<html lang="en" >

<head>

  <meta charset="UTF-8">

  
  
  
<style>
:root {
  --anim-duration: 5s;
  --anim-delay: 0s;
  --anim-props: ease-in-out infinite;
  --clr-cube-1: deepskyblue;
  --clr-cube-2: deeppink;
  --clr-lines: #919084;
  --clr-bg: #2a2b31;
  --grid-v: repeating-linear-gradient(
  	to right,
  	transparent 0,
  	transparent calc(5rem - 1px),
  	var(--clr-lines) 0,
  	var(--clr-lines) 5rem
  );
  --grid-h: repeating-linear-gradient(
  	to bottom,
  	transparent 0,
  	transparent calc(5rem - 1px),
  	var(--clr-lines) 0,
  	var(--clr-lines) 5rem
  );
  --bounce: cubic-bezier(0.4, 0.2, 0.5, 1.6);
}

body {
  height: 100vh;
  margin: 0;
  display: grid;
  place-items: center;
  perspective: 30rem;
  background: var(--clr-bg);
}

body * {
  transform-style: preserve-3d;
}

.floor {
  display: grid;
  width: 45rem;
  height: 40rem;
  grid-template-columns: repeat(9, 5rem);
  grid-template-rows: repeat(8, 5rem);
  background: yellow;
  background-image: radial-gradient(ellipse at center, transparent 25%, var(--clr-bg) 70%), var(--grid-h), var(--grid-v);
  -webkit-animation: var(--anim-duration) var(--anim-props) floor;
          animation: var(--anim-duration) var(--anim-props) floor;
}

.cube__wrapper:nth-of-type(1) {
  grid-area: 4/4/8/7;
}
.cube__wrapper:nth-of-type(1) .face {
  background: var(--clr-cube-1);
}

.cube__wrapper:nth-of-type(2) {
  grid-area: 1/5/5/8;
  transform: rotateZ(180deg);
  --anim-delay: -0.5s;
}
.cube__wrapper:nth-of-type(2) .face {
  background: var(--clr-cube-2);
}

.cube__wrapper {
  position: relative;
}
.cube__wrapper:after {
  position: absolute;
  content: "";
  width: 5rem;
  height: 5rem;
  top: 5rem;
  left: 5rem;
  background: rgba(0, 0, 0, 0.7);
  -webkit-animation: var(--anim-duration) var(--anim-props) var(--anim-delay) cube-shadow;
          animation: var(--anim-duration) var(--anim-props) var(--anim-delay) cube-shadow;
}

.cube {
  display: grid;
  grid-template-columns: repeat(3, 5rem);
  grid-template-rows: repeat(4, 5rem);
  transform-origin: 50% 37.5% 2.5rem;
  -webkit-animation: var(--anim-duration) var(--anim-props) var(--anim-delay) cube-anim;
          animation: var(--anim-duration) var(--anim-props) var(--anim-delay) cube-anim;
}

.face {
  position: relative;
  box-shadow: 0 0 0.8333333333rem rgba(255, 255, 255, 0.25) inset;
}
.face:before, .face:after {
  content: "";
  position: absolute;
  inset: 0;
}
.face:before {
  background: yellow;
  transform: translate3d(0, 0, 1px);
  background-image: var(--grid-h), var(--grid-v);
}
.face:after {
  -webkit-animation: var(--anim-duration) var(--anim-props) var(--anim-delay) face-shadow;
          animation: var(--anim-duration) var(--anim-props) var(--anim-delay) face-shadow;
}

.face.back {
  grid-area: 1/2;
  transform-origin: 50% 100%;
}

.face.bottom {
  grid-area: 2/2;
}

.group {
  grid-area: 3/2/5/3;
  transform-origin: 50% 0;
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 1fr 1fr;
}

.face.front {
  grid-area: 1/1;
}

.face.top {
  grid-area: 2/1;
  transform-origin: 50% 0;
}

.face.left {
  grid-area: 2/1;
  transform-origin: 100% 50%;
}

.face.right {
  grid-area: 2/3;
  transform-origin: 0 50%;
}

.face.back,
.group,
.face.top,
.face.left,
.face.right {
  -webkit-animation: var(--anim-duration) var(--anim-props) var(--anim-delay) folding;
          animation: var(--anim-duration) var(--anim-props) var(--anim-delay) folding;
}

@-webkit-keyframes folding {
  0%, 100% {
    transform: rotatey(0);
  }
  20%, 80% {
    transform: var(--transform);
  }
}

@keyframes folding {
  0%, 100% {
    transform: rotatey(0);
  }
  20%, 80% {
    transform: var(--transform);
  }
}
@-webkit-keyframes face-shadow {
  0%, 100% {
    background-image: linear-gradient(var(--grad), rgba(0, 0, 0, 0.75) 100%, rgba(0, 0, 0, 0));
  }
  20%, 80% {
    background-image: linear-gradient(var(--grad), rgba(0, 0, 0, 0.2) 20%, rgba(0, 0, 0, 0));
  }
}
@keyframes face-shadow {
  0%, 100% {
    background-image: linear-gradient(var(--grad), rgba(0, 0, 0, 0.75) 100%, rgba(0, 0, 0, 0));
  }
  20%, 80% {
    background-image: linear-gradient(var(--grad), rgba(0,.........完整代码请登录后点击上方下载按钮下载查看

网友评论0