svg实现就职贺卡点开悬浮动画效果代码
代码语言:html
所属分类:悬停
代码描述:svg实现就职贺卡点开悬浮动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> @import url("https://fonts.googleapis.com/css2?family=Fredoka+One&display=swap"); * { box-sizing: border-box; } :root { --bg: #2a3d51; --body: #cddffe; --stripes: #012665; --flame-1: #eb9947; --flame-2: #fae39e; --paper: #bad9f7; --paper-2: #e8f2fc; --paper-3: #eb6347; --card: #f5f9ff; --insert: #f1f2f4; --bottom-frosting: #f5b1a3; --mid-frosting: #a3f5f5; --top-frosting: #ccf5a3; --balloon-3: 10; --balloon-2: 180; --balloon-1: 90; --size: 35vmin; --height: var(--size); --width: calc(var(--size) * 1.4); --read: 0; --transition: 0.2s; } body { background: var(--bg); min-height: 100vh; perspective: 1000px; transform-style: preserve-3d; overflow: hidden; } input { opacity: 0; position: fixed; right: 100%; } label { height: 100vh; width: 100vw; position: fixed; top: 0; left: 0; z-index: 2; transform-style: preserve-3d; transform: translate3d(0, 0, 100px); } :checked ~ .scene { --read: 1; } :checked ~ .scene .hide-back { -webkit-backface-visibility: hidden; backface-visibility: hidden; } :checked ~ .scene .cake__candle { transform: translate(0, 0); } .stamp { height: 8vmin; position: absolute; top: 50%; left: 50%; transform: translate3d(-50%, -50%, 1px); filter: saturate(0.5); } .barcode { height: 6vmin; width: 8vmin; position: absolute; bottom: 2vmin; right: 2vmin; transform: translate3d(0, 0, 1px); --l: #808080; background: repeating-linear-gradient(90deg, var(--l) 0 1%, transparent 1% 2%, var(--l) 2% 4%, transparent 4% 5%, var(--l) 5% 10%); } .scene { display: flex; align-items: center; justify-content: center; transform: rotateY(calc(var(--x, 0) * 1deg)) rotateX(calc(var(--y, 0) * 1deg)); height: 100vh; width: 100vw; transform-style: preserve-3d; } .card { height: calc(var(--height)); position: relative; width: var(--width); transform-style: preserve-3d; transform: translate(0, calc(var(--read, 0) * 25%)) rotateX(calc(var(--read, 0) * 90deg)); transition: transform var(--transition); } .card__confetti { --size: calc(var(--s) * 1vmin); height: var(--size); width: var(--size); position: absolute; top: 0%; left: 50%; transition: transform calc(var(--read) * var(--transition)) calc(var(--read) * var(--transition)), opacity calc(var(--read) * var(--transition)) calc((var(--read) * var(--transition)) * 2); transform: scale(var(--read)) translate(-50%, 10%) rotate(calc(var(--r) * 1deg)) rotateX(calc(var(--a) * 1deg)) skew(calc(var(--sk) * 1deg)) translate(0, calc(var(--height) * (var(--read, 0) * 1.5))); opacity: calc(1 - var(--read)); } .card__confetti:after { background: hsl(var(--hue), 80%, 80%); content: ''; position: absolute; height: 100%; width: 100%; transition: transform calc(var(--read) * var(--transition)) calc(var(--read) * var(--transition)); transform: rotateX(calc((var(--rx) * var(--read)) * 1deg)) rotateY(calc((var(--ry) * var(--read)) * 1deg)); } .card__content { transform-style: preserve-3d; height: 100%; width: 100%; } .card__content--bottom:before { content: ""; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background: var(--insert); -webkit-clip-path: polygon(0 0, 15% 0, 15% 30%, 85% 30%, 85% 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 15% 0, 15% 30%, 85% 30%, 85% 0, 100% 0, 100% 100%, 0 100%); } .card__content--top:before { content: ""; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background: var(--insert); -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 85% 100%, 85% 70%, 78% 70%, 78% 46%, 72.4% 46%, 72.4% 26.8%, 27.6% 26.8%, 27.6% 46%, 22% 46%, 22% 70%, 15% 70%, 15% 100%, 0 100%); clip-path: polygon(0 0, 100% 0, 100% 100%, 85% 100%, 85% 70%, 78% 70%, 78% 46%, 72.4% 46%, 72.4% 26.8%, 27.6% 26.8%, 27.6% 46%, 22% 46%, 22% 70%, 15% 70%, 15% 100%, 0 100%); } .card__message { position: absolute; padding: 1rem; font-family: sans-serif; bottom: 0; left: 50%; transform: translate(-50%, 0); } .card__part { height: var(--h, 100%); width: var(--w, 100%); position: absolute; top: 0%; left: 50%; transform: translate(-50%, 0); transform-style: preserve-3d; } .card__inner { --h: 96%; --w: 95%; transform: translate3d(-50%, 0, calc(var(--height) * 0)); } .card__sleeve { height: 100%; width: 100%; } .message { font-family: "Fredoka One", cursive; color: #1a1a1a; display: flex; flex-direction: column; position: absolute; top: 50%; left: 20%; transform: translate3d(0, -20%, 0); margin: 0; font-size: 4.5vmin; } .card__message { font-family: "Fredoka One", cursive; color: #1a1a1a; font-size: 4vmin; white-space: nowrap; position: absolute; top: 50%; left: 50%; transform: translate(-50%, 0); } .flip { transform-style: preserve-3d; } .flip__piece { height: 100%; position: absolute; width: 100%; transform-origin: 50% 0; transform-style: preserve-3d; transition: transform var(--transition); } .flip__piece--front { transform: rotateX(calc(var(--front) * 1deg)); } .flip__piece--back { transform: rotateX(calc(var(--rear) * 1deg)); } .card__inner { --rear: calc(-1.75 + (var(--read, 0) * 2)); --front: calc(1.75 + (var(--read, 0) * 88)); } .card__outer { --rear: calc(-2 + (var(--read, 0) * 2)); --front: calc(2 + (var(--read, 0) * 88)); } .card__content-container { transform-style: preserve-3d; height: 100%; width: 100%; top: 0; left: 0; position: absolute; } .card__content-container--inner-top { transform: rotate(180deg) translate3d(0, 0, 0); } .card__content-container--inner-bottom { transform: translate3d(0, 0, 0); } .cover__content { height: 100%; width: 100%; background: var(--card); position: absolute; font-size: 2vmin; transform-style: preserve-3d; } .cover__content--front, .cover__content--rear { transform: translate3d(0, 0, 1px); } .front-cover__front, .rear-cover__front { background: var(--card); } .front-cover__front:after, .rear-cover__front:after { content: ''; position: absolute; top: 0%; left: 50%; transform: translate3d(-50%, 0, 0px); background: var(--paper-3); height: 95%; width: 95%; } .rear-cover__front:after { transform: translate(-50%, 0, 2px); } .cake__section { position: absolute; transform-style: preserve-3d; transition: var(--transition); } .cake__section--top { height: 80%; width: 80%; left: 50%; bottom: 0; } .cake__section--top-top { transform: translate(-50%, 0) rotateX(calc(var(--read, 0) * 90deg)) translate3d(0, -100%, calc(var(--read, 0) * 0px)) rotateX(calc(var(--read, 0) * -90deg)); transform-origin: 50% 100%; background: var(--paper); } .cake__section--top-front { background: var(--paper-2); transform-origin: 50% 100%; transform: translate(-50%, -100%) rotateX(calc(var(--read, 0) * 90deg)); } .cake__section--mid { height: 80%; width: 80%; left: 50%; } .cake__section--mid-front { bottom: 0; transform-origin: 50% 0; transform: translate3d(-50%, 0, 0) rotateX(calc((180 - (var(--read, 0) * -90)) * 1deg)); background: var(--paper-2); } .cake__section--mid-top { background: transparent; bottom: 0; transform-origin: 50% 100%; transform: translate(-50%, 0) rotateX(calc(var(--read, 0) * 90deg)) translate3d(0, -100%, calc(var(--read, 0) * 0px)) rotateX(calc(var(--read, 0) * -90deg)); } .cake__section--mid-top:before { content: ''; position: absolute; height: 100%; width: 100%; -webkit-clip-path: polygon(0 0, 10% 0, 10% 80%, 90% 80%, 90% 0, 100% 0, 100% 100%, 0 100%); clip-path: polygon(0 0, 10% 0, 10% 80%, 90% 80%, 90% 0, 100% 0, 100% 100%, 0 100%); transform: rotate(180deg); background: var(--paper); } .cake__section--bottom { height: 30%; width: 70%; left: 50%; transition: var(--transition); } .cake__section--bottom-top { background: transparent; transform-origin: 50% 100%; bottom: 0; transform: translate(-50%, -100%) rotateX(calc(var(--read, 0) * -90deg)); } .cake__section--bottom-top:before { content: ''; position: .........完整代码请登录后点击上方下载按钮下载查看
网友评论0