vue+css实现一个三维法师人物代码
代码语言:html
所属分类:三维
代码描述:vue+css实现一个三维法师人物代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
body {
height: 100vh;
margin: 0;
background-color: #555;
overflow: hidden;
background-image: linear-gradient(#5b86ea, #fff);
}
body * {
box-sizing: border-box;
}
body #app {
height: 100vh;
}
body details {
margin: 1em 0 0 1em;
color: white;
font-family: monospace, sans-serif;
z-index: 2;
position: relative;
cursor: pointer;
position: absolute;
}
body #view {
overflow: hidden;
height: 100vh;
width: 100vw;
display: flex;
align-items: center;
justify-content: center;
perspective: 500px;
border: 0;
outline: 0;
opacity: 0;
}
body #view * {
transform-style: preserve-3d;
}
body #view #scene #space {
position: relative;
display: grid;
grid-template-areas: "overlap";
transform-style: preserve-3d;
justify-content: center;
align-items: flex-end;
transform: rotateX(-20deg) rotateY(20deg);
font-size: calc(5vh + 1vw);
transform-origin: center 90%;
-pointer-events: none;
}
body #view #scene #space > * {
grid-area: overlap;
}
body #view #scene #space .absolute {
position: absolute;
}
body #view #scene #space .reference {
transform-style: preserve-3d;
display: grid;
grid-template-areas: "overlap";
}
body #view #scene #space .reference > * {
grid-area: overlap;
transform-origin: top left;
align-items: end;
}
body #view #scene #space .group {
position: absolute;
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(var(--posZ)) rotateX(var(--rotX)) rotateY(var(--rotY)) rotateZ(var(--rotZ));
}
body #view #scene #space .group > .reference {
align-items: end;
}
body #view #scene #space .group.shaded > .reference .cuboid > .front, body #view #scene #space .group.shaded > .reference .cuboid > .back {
filter: brightness(0.9);
}
body #view #scene #space .group.shaded > .reference .cuboid > .left, body #view #scene #space .group.shaded > .reference .cuboid > .right {
filter: brightness(0.8);
}
body #view #scene #space .group.shaded > .reference .cuboid > .bottom {
filter: brightness(0.7);
}
body #view #scene #space .cuboid,
body #view #scene #space .plane {
position: absolute;
width: var(--sizeX);
height: var(--sizeY);
transform: translateX(var(--posX)) translateY(calc(var(--posY) * -1)) translateZ(var(--posZ)) rotateX(var(--rotX)) rotateY(var(--rotY)) rotateZ(var(--rotZ));
align-items: start;
}
body #view #scene #space .cuboid.test > *, body #view #scene #space .cuboid.plane.test,
body #view #scene #space .plane.test > *,
body #view #scene #space .plane.plane.test {
border: solid 1px black;
background: linear-gradient(#f005, #00f5);
box-shadow: 0 0 0 1px #0005;
}
body #view #scene #space .cuboid.test > *.top, body #view #scene #space .cuboid.plane.test.top,
body #view #scene #space .plane.test > *.top,
body #view #scene #space .plane.plane.test.top {
background: radial-gradient(#fff 5%, #f0f5 20%);
}
body #view #scene #space .cuboid.test > *.bottom, body #view #scene #space .cuboid.plane.test.bottom,
body #view #scene #space .plane.test > *.bottom,
body #view #scene #space .plane.plane.test.bottom {
background: radial-gradient(#000 5%, #0f05 20%);
}
body #view #scene #space .cuboid.overflow > *,
body #view #scene #space .plane.overflow > * {
box-shadow: 0 0 0 0.5px currentColor;
}
body #view #scene #space .cuboid._top > .top, body #view #scene #space .cuboid._bottom > .bottom, body #view #scene #space .cuboid._right > .right, body #view #scene #space .cuboid._left > .left, body #view #scene #space .cuboid._front > .front, body #view #scene #space .cuboid._back > .back,
body #view #scene #space .plane._top > .top,
body #view #scene #space .plane._bottom > .bottom,
body #view #scene #space .plane._right > .right,
body #view #scene #space .plane._left > .left,
body #view #scene #space .plane._front > .front,
body #view #scene #space .plane._back > .back {
display: none;
}
body #view #scene #space .cuboid.color > *,
body #view #scene #space .plane.color > * {
background-color: currentColor;
}
body #view #scene #space .cuboid .top,
body #view #scene #space .plane .top {
height: var(--sizeZ);
width: var(--sizeX);
transform: rotateX(90deg);
}
body #view #scene #space .cuboid .bottom,
body #view #scene #space .plane .bottom {
height: var(--sizeZ);
width: var(--sizeX);
transform: translateY(var(--sizeY)) rotateX(90deg);
}
body #view #scene #space .cuboid .left,
body #view #scene #space .plane .left {
height: var(--sizeY);
width: var(--sizeZ);
transform: rotateY(-90deg);
}
body #view #scene #space .cuboid .right,
body #view #scene #space .plane .right {
height: var(--sizeY);
width: var(--sizeZ);
transform: translateX(var(--sizeX)) rotateY(-90deg);
}
body #view #scene #space .cuboid .front,
body #view #scene #space .plane .front {
width: var(--sizeX);
height: var(--sizeY);
transform: translateZ(var(--sizeZ));
}
body #view #scene #space .cuboid .back,
body #view #scene #space .plane .back {
width: var(--sizeX);
height: var(--sizeY);
}
body #view #scene #space .cuboid.shaded > .front, body #view #scene #space .cuboid.shaded > .back,
body #view #scene #space .plane.shaded > .front,
body #view #scene #space .plane.shaded > .back {
filter: brightness(0.9);
}
body #view #scene #space .cuboid.shaded > .left, body #view #scene #space .cuboid.shaded > .right,
body #view #scene #space .plane.shaded > .left,
body #view #scene #space .plane.shaded > .right {
filter: brightness(0.8);
}
body #view #scene #space .cuboid.shaded > .top, body #view #scene #space .cuboid.shaded > .bottom,
body #view #scene #space .plane.shaded > .top,
body #view #scene #space .plane.shaded > .bottom {
filter: brightness(0.7);
}
body #view #scene #space .cylinder {
position: absolute;
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(calc(var(--posZ) + var(--radius))) rotateX(var(--rotX)) rotateY(var(--rotY)) rotateZ(var(--rotZ));
height: var(--height);
width: var(--diameter);
}
body #view #scene #space .cylinder.test > .cylinder_face {
border: solid 1px black;
background: linear-gradient(#f005, #00f5);
}
body #view #scene #space .cylinder.color > * {
background-color: currentColor;
}
body #view #scene #space .cylinder > .cylinder_face {
height: var(--height);
width: var(--faceWidth);
transform: translateX(calc(var(--radius) - var(--faceWidth) / 2)) rotateY(calc(var(--pos) * (360deg / var(--detailLevel)))) translateZ(var(--dist));
transform-origin: center top;
}
body #view #scene #space .cone {
position: absolute;
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(calc(var(--posZ) + var(--radius))) rotateX(var(--rotX)) rotateY(var(--rotY)) rotateZ(var(--rotZ));
height: var(--height);
width: var(--diameter);
}
body #view #scene #space .cone.test > .cone_face {
border: solid 1px black;
background: linear-gradient(#f005, #00f5);
}
body #view #scene #space .cone > .cone_face {
height: var(--faceHeight);
width: var(--faceWidth);
transform: translateX(calc(var(--radius) - var(--faceWidth) / 2)) rotateY(calc(var(--pos) * (360deg / var(--detailLevel)))) translateZ(var(--dist)) rotateX(var(--coneAngle));
transform-origin: center bottom;
-webkit-clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
body #view #scene #space .cone.shaded > *:first-child, body #view #scene #space .cone.shaded > *:nth-child(odd) {
filter: brightness(0.8);
}
body #view #scene #space .cone.shaded > *:nth-child(even) {
filter: brightness(0.9);
}
body #view #scene #space .cone.color > * {
background-color: currentColor;
}
body #view #scene #space .cone.overflow > * {
-webkit-clip-path: polygon(50% -2px, -2px calc(100% + 1px), calc(100% + 1px) calc(100% + 1px));
clip-path: polygon(50% -2px, -2px calc(100% + 1px), calc(100% + 1px) calc(100% + 1px));
box-shadow: 0 0 0 1px currentColor;
}
#floor .rocks > * {
color: #666;
}
#floor .rocks > :not(.bottom, .top) {
background-image: linear-gradient(currentColor calc(100% - 2em), #0000);
background-color: unset !important;
-webkit-clip-path: polygon(-10% -10%, 110% -10%, 110% calc(100% - 2em), 100% calc(100% - 2em), 100% 100%, 0% 100%, 0% calc(100% - 2em), -10% calc(100% - 2em));
clip-path: polygon(-10% -10%, 110% -10%, 110% calc(100% - 2em), 100% calc(100% - 2em), 100% 100%, 0% 100%, 0% calc(100% - 2em), -10% calc(100% - 2em));
}
.wizzo .hair,
.wizzo .beard {
color: #462413;
}
.wizzo .hair.contrast,
.wizzo .beard.contrast {
color: #381d0f;
}
.wizzo .skin > * {
color: #b37465;
}
.wizzo .hat > *,
.wizzo .coat > * {
color: #8f3838;
}
.wizzo .pants > * {
color: #642b2b;
}
.wizzo .staff.shaft {
color: #4c2415;
}
.wizzo .staff.shaft > *::before {
content: "";
position: absolute;
top: -1px;
bottom: -1px;
left: -1px;
right: -1px;
background: top left/0.2em 100em var(--noise);
}
.wizzo .staff.metal > * {
background-image: radial-gradient(#ddd, #888);
}
.wizzo .staff.crimps > * {
background-image: radial-gradient(#ddd, #888);
}
.wizzo .staff.crimps > *:not(.top, .bottom) {
background-image: linear-gradient(90deg, #888, #ddd, #888);
}
.wizzo .crystal > * {
color: #f07013ab;
background-image: conic-gradient(at 50% 0%, #fff3 160deg, #0000 180deg, #fff3 200deg), linear-gradient(#0000 90%, #fff3);
background-color: currentColor;
}
.wizzo .gold > * {
background: linear-gradient(#bc9034, #0000 20% 80%, #bc9034), linear-gradient(90deg, #bc9034, #0000 20% 80%, #bc9034), #ffe3a9;
}
.wizzo .leather > *::before {
content: "";
display: block;
position: absolute;
top: -1px;
bottom: -1px;
left: -1px;
right: -1px;
background: var(--noise), #241203;
}
.wizzo #belt > .front::after {
content: "";
display: block;
position: absolute;
height: 0.3em;
width: 0.3em;
right: 50%;
top: -0.05em;
transform: translateX(50%);
background: linear-gradient(90deg, #bc9034 0.05em, #0000 0.05em), linear-gradient(-90deg, #bc9034 0.05em, #0000 0.05em), linear-gradient(180deg, #bc9034 0.05em, #0000 0.05em), linear-gradient(0deg, #bc9034 0.05em, #0000 0.05em), center left/0.15em 0.05em linear-gradient(90deg, #bc9034, #775b1f) no-repeat;
}
.wizzo .shine > * {
-webkit-mask: linear-gradient(#000 80%, #0000);
mask: linear-gradient(#000 80%, #0000);
}
.wizzo .pants > * {
background: center/0.1em 100% linear-gradient(90deg, #0002 50%, #0000 50%), currentColor;
}
.wizzo .vial.glass > * {
color: #fff2;
background-image: linear-gradient(0deg, currentColor, #0000 0.05em calc(100% - 0.05em), currentColor), linear-gradient(90deg, currentColor, #0000 0.05em);
}
.wizzo .vial.liquid {
color: #0f88;
}
.wizzo .vial.liquid.vial2 {
color: #0af8;
}
.wizzo .cork {
color: #412d1f;
}
.wizzo #brows {
filter: drop-shadow(0 0 0.02em #000a);
}
.wizzo #brows::before, .wizzo #brows::after {
content: "";
display: block;
position: absolute;
height: 0.15em;
width: 0.4em;
background-color: #381d0f;
top: 20%;
}
.wizzo #brows::before {
left: 13%;
transform-origin: center center;
transform: rotate(-5deg);
}
.wizzo #brows::after {
right: 13%;
transform-origin: center center;
transform: rotate(5deg);
}
.wizzo #mouth::before {
content: "";
display: block;
position: absolute;
top: 70%;
left: 50%;
height: 0.38em;
width: 0.4em;
background-color: #111;
-webkit-clip-path: polygon(0 50%, 100% 50%, 100% 100%, 0% 100%);
clip-path: polygon(0 50%, 100% 50%, 100% 100%, 0% 100%);
border-radius: 50%;
transform: translateX(-50%) translateY(-50%);
}
.wizzo #eyes {
position: relative;
background: circular-gradient(circle at 20% 13%, red 0.2em, blue 0.2em), circular-gradient(circle at 20% 87%, red 0.2em, blue 0.2em);
--eyeDist: 23%;
}
.wizzo #eyes::before, .wizzo #eyes::after {
content: "";
display: block;
position: absolute;
top: 26%;
width: 0.2em;
height: 0.2em;
background-color: #000;
left: var(--eyeDist);
border-radius: 100%;
-webkit-animation: 5s blink linear infinite alternate;
animation: 5s blink linear infinite alternate;
}
.wizzo #eyes::after {
left: unset;
right: var(--eyeDist);
}
.wizzo #nose > .front {
filter: brightness(0.86) !important;
}
.wizzo #staff #crystalPower {
-webkit-animation: 10s linear powerRot infinite;
animation: 10s linear powerRot infinite;
}
.wizzo #staff #crystalPower .shine {
-webkit-animation: shineBlink 10s infinite;
animation: shineBlink 10s infinite;
}
.wizzo #staff #crystalPower .shine.shine_small {
-webkit-animation-delay: -4.3s;
animation-delay: -4.3s;
}
.wizzo #staff #crystalPower .shine.shine_small.shine_2 {
-webkit-animation-delay: -6.1s;
animation-delay: -6.1s;
}
.wizzo #staff #crystalPower .shine.shine_2 {
-webkit-animation-delay: -2.15s;
animation-delay: -2.15s;
}
@-webkit-keyframes shineBlink {
0%, 50%, 100% {
color: #fff2;
}
25% {
color: #ff600014;
}
75% {
color: #ffca0026;
}
}
@keyframes shineBlink {
0%, 50%, 100% {
color: #fff2;
}
25% {
color: #ff600014;
}
75% {
color: #ffca0026;
}
}
@-webkit-keyframes powerRot {
0% {
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(var(--posZ)) rotateX(var(--rotX)) rotateY(var(--rotY)) rotateZ(var(--rotZ));
}
100% {
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(var(--posZ)) rotateX(var(--rotX)) rotateY(calc(var(--rotY) + 360deg)) rotateZ(var(--rotZ));
}
}
@keyframes powerRot {
0% {
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(var(--posZ)) rotateX(var(--rotX)) rotateY(var(--rotY)) rotateZ(var(--rotZ));
}
100% {
transform: translateX(calc(var(--posX))) translateY(calc(var(--posY) * -1)) translateZ(var(--posZ)) rotateX(var(--rotX)) rotateY(calc(var(--rotY) + 360deg)) rotateZ(var(--rotZ));
}
}
@-webkit-keyframes blink {
0%, 90% {
-webkit-clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
}
92% {
-webkit-clip-path: polygon(-10% 56%, 110% 56%, 110% 60%, -10% 60%);
clip-path: polygon(-10% 56%, 110% 56%, 110% 60%, -10% 60%);
}
94% {
-webkit-clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
}
}
@keyframes blink {
0%, 90% {
-webkit-clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
}
92% {
-webkit-clip-path: polygon(-10% 56%, 110% 56%, 110% 60%, -10% 60%);
clip-path: polygon(-10% 56%, 110% 56%, 110% 60%, -10% 60%);
}
94% {
-webkit-clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
clip-path: polygon(-10% -10%, 110% -10%, 110% 110%, -10% 110%);
}
}
:root {
--noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='300' height='300'%3E%3Cfilter id='n' x='0' y='0'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.805' numOctaves='10' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.1'/%3E%3C/svg%3E");
--strongNoise: url("data:image/svg+xml,%3Csvg.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0