vue+css实现万圣节三维南瓜头可旋转效果代码
代码语言:html
所属分类:三维
代码描述:vue+css实现万圣节三维南瓜头可旋转效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=Inconsolata&display=swap'> <style> body { height: 100vh; margin: 0; background: linear-gradient(#1c0033, #0d0e11 50%); overflow: hidden; font-family: Inconsolata, monospace, sans-serif; } body * { box-sizing: border-box; } body #app { height: 100vh; } body details { margin: 1em 0 0 1em; color: white; 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; } 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; bottom: 0; transform-origin: bottom left; 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; bottom: 0; transform-origin: bottom left; 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(circle, #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(circle, #000 5%, #0f05 20%); } body #view #scene #space .cuboid.test > *.back, body #view #scene #space .cuboid.plane.test.back, body #view #scene #space .plane.test > *.back, body #view #scene #space .plane.plane.test.back { background: radial-gradient(circle, #f00 5%, #0000 20%), linear-gradient(#f005, #00f5); } body #view #scene #space .cuboid.plane.overflow, body #view #scene #space .cuboid.overflow > *, body #view #scene #space .plane.plane.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.plane.color, body #view #scene #space .cuboid.color > *, body #view #scene #space .plane.plane.color, body #view #scene #space .plane.color > * { background-color: currentColor; } body #view #scene #space .cuboid > *, body #view #scene #space .plane > * { position: absolute; } 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.plane.front, body #view #scene #space .cuboid.shaded.plane.back, body #view #scene #space .cuboid.shaded > .front, body #view #scene #space .cuboid.shaded > .back, body #view #scene #space .plane.shaded.plane.front, body #view #scene #space .plane.shaded.plane.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.plane.left, body #view #scene #space .cuboid.shaded.plane.right, body #view #scene #space .cuboid.shaded > .left, body #view #scene #space .cuboid.shaded > .right, body #view #scene #space .plane.shaded.plane.left, body #view #scene #space .plane.shaded.plane.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.plane.top, body #view #scene #space .cuboid.shaded.plane.bottom, body #view #scene #space .cuboid.shaded > .top, body #view #scene #space .cuboid.shaded > .bottom, body #view #scene #space .plane.shaded.plane.top, body #view #scene #space .plane.shaded.plane.bottom, body #view #scene #space .plane.shaded > .top, body #view #scene #space .plane.shaded > .bottom { filter: brightness(0.7); } body #view #scene #space .frustum { position: absolute; bottom: 0; transform-origin: bottom left; 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 .frustum.test > * { border: solid 1px black; background: linear-gradient(#f005, #00f5); box-shadow: 0 0 0 1px #0005; } body #view #scene #space .frustum.test > *.top { background: radial-gradient(circle, #fff 5%, #f0f5 20%); } body #view #scene #space .frustum.test > *.bottom { background: radial-gradient(circle, #000 5%, #0f05 20%); } body #view #scene #space .frustum.test > *.back { background: radial-gradient(circle, #f00 5%, #0000 20%), linear-gradient(#f005, #00f5); } body #view #scene #space .frustum.overflow > * { box-shadow: 0 0 0 0.5px currentColor; } body #view #scene #space .frustum.overflow > *.left { -webkit-clip-path: polygon(calc(var(--lrTopL) - 1px) calc(0% - 1px), calc(var(--lrTopR) + 1px) calc(0% - 1px), calc(var(--lrBotR) + 1px) calc(100% + 1px), calc(var(--lrBotL) - 1px) calc(100% + 1px)); clip-path: polygon(calc(var(--lrTopL) - 1px) calc(0% - 1px), calc(var(--lrTopR) + 1px) calc(0% - 1px), calc(var(--lrBotR) + 1px) calc(100% + 1px), calc(var(--lrBotL) - 1px) calc(100% + 1px)); } body #view #scene #space .frustum.overflow > *.right { -webkit-clip-path: polygon(calc(var(--lrTopL) - 1px) calc(0% - 1px), calc(var(--lrTopR) + 1px) calc(0% - 1px), calc(var(--lrBotR) + 1px) calc(100% + 1px), calc(var(--lrBotL) - 1px) calc(100% + 1px)); clip-path: polygon(calc(var(--lrTopL) - 1px) calc(0% - 1px), calc(var(--lrTopR) + 1px) calc(0% - 1px), calc(var(--lrBotR) + 1px) calc(100% + 1px), calc(var(--lrBotL) - 1px) calc(100% + 1px)); } body #view #scene #space .frustum.overflow > *.front { -webkit-clip-path: polygon(calc(var(--fbTopL) - 1px) calc(0% - 1px), calc(var(--fbTopR) + 1px) calc(0% - 1px), calc(var(--fbBotR) + 1px) calc(100% + 1px), calc(var(--fbBotL) - 1px) calc(100% + 1px)); clip-path: polygon(calc(var(--fbTopL) - 1px) calc(0% - 1px), calc(var(--fbTopR) + 1px) calc(0% - 1px), calc(var(--fbBotR) + 1px) calc(100% + 1px), calc(var(--fbBotL) - 1px) calc(100% + 1px)); } body #view #scene #space .frustum.overflow > *.back { -webkit-clip-path: polygon(calc(var(--fbTopL) - 1px) calc(0% - 1px), calc(var(--fbTopR) + 1px) calc(0% - 1px), calc(var(--fbBotR) + 1px) calc(100% + 1px), calc(var(--fbBotL) - 1px) calc(100% + 1px)); clip-path: polygon(calc(var(--fbTopL) - 1px) calc(0% - 1px), calc(var(--fbTopR) + 1px) calc(0% - 1px), .........完整代码请登录后点击上方下载按钮下载查看
网友评论0