3D css实现公园街道透视效果
代码语言:html
所属分类:三维
代码描述:3D css实现公园街道透视效果
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
@charset "UTF-8";
@font-face {
font-family: 'VenturisSansADFLt-Bold';
src: url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/25387/VenturisSansADFLt-Bold.ttf.woff") format("woff"), url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/25387/VenturisSansADFLt-Bold.ttf.svg#VenturisSansADFLt-Bold") format("svg"), url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/25387/VenturisSansADFLt-Bold.ttf.eot"), url("https://s3-us-west-2.amazonaws.com/s.cdpn.io/25387/VenturisSansADFLt-Bold.ttf.eot?#iefix") format("embedded-opentype");
font-weight: normal;
font-style: normal;
}
:root {
--zoom: 1;
--zoom-square: calc( var(--zoom) * var(--zoom) );
--camera-x: 0;
--camera-y: 0;
--row-count: 0;
--col-count: 0;
--tile-width: 1em;
--gap-width: calc(var(--tile-width) * 5 / 100);
--total-tile-width: calc(1em + var(--gap-width));
--gap-color: #666;
}
body {
height: 100vh;
display: grid;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
overflow: hidden;
font-size: 7vmin;
-webkit-perspective: 150vmin;
perspective: 150vmin;
background: #cfe2e3;
}
.loading-overlay {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
background: rgba(255, 255, 255, 0.85);
}
.has-loaded .loading-overlay {
display: none;
}
.loading-message {
font-size: 3rem;
}
.loading-message::after {
content: "✨";
-webkit-animation: loading-message .5s infinite;
animation: loading-message .5s infinite;
}
@-webkit-keyframes loading-message {
from, to {
content: "Loading ✨";
}
33% {
content: "Loading 🍓";
}
66% {
content: "Loading ⚡️";
}
}
@keyframes loading-message {
from, to {
content: "Loading ✨";
}
33% {
content: "Loading 🍓";
}
66% {
content: "Loading ⚡️";
}
}
.tile {
width: calc(1 * var(--tile-width));
height: calc(1 * var(--tile-width));
display: grid;
gap: var(--gap-width);
background: var(--gap-color);
}
.enable-shadows .tile span {
box-shadow: inset calc(0.02 * var(--tile-width)) calc(0.02 * var(--tile-width)) calc(0.06 * var(--tile-width)) rgba(255, 200, 50, 0.25), inset calc(-0.02 * var(--tile-width)) calc(-0.02 * var(--tile-width)) calc(0.08 * var(--tile-width)) rgba(30, 10, 0, 0.5);
}
.tile.half-vertical {
width: calc(0.3 * var(--tile-width));
height: calc(0.4 * var(--tile-width));
}
.tile.masonry-vertical {
grid-template: .6fr 1.4fr / 1fr;
width: calc(0.3 * var(--tile-width));
}
.tile.masonry-vertical.odd {
grid-template: 1.4fr .6fr / 1fr;
}
.tile.half-horizontal {
width: calc(0.475 * var(--tile-width));
height: calc(0.33 * var(--tile-width));
}
.tile.single-horizontal {
height: calc(0.33 * var(--tile-width));
}
.tile.vertical {
grid-template: 1fr/repeat(3, 1fr);
}
.tile.horizontal {
grid-template: repeat(3, 1fr)/1fr 1fr;
}
.tile.horizontal :first-child {
grid-area: 1 / span 2;
}
.tile.horizontal :last-child {
grid-area: 3 / span 2;
}
.wall {
position: relative;
background: var(--gap-color);
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-transform: rotateX(calc(var(--camera-y) * -15deg)) rotateY(calc(var(--camera-x) * 15deg)) scale(calc(var(--zoom)));
transform: rotateX(calc(var(--camera-y) * -15deg)) rotateY(calc(var(--camera-x) * 15deg)) scale(calc(var(--zoom)));
}
.wall-rain-shield {
position: absolute;
top: calc(-0.26 * var(--tile-width));
left: 0;
z-index: 5;
width: 100%;
height: calc(0.4 * var(--tile-width));
background: #bbb;
}
.enable-3d-transformations .wall-rain-shield {
-webkit-transform-origin: top center;
transform-origin: top center;
-webkit-transform: translateZ(calc(0.6 * var(--tile-width))) rotateX(30deg);
transform: translateZ(calc(0.6 * var(--tile-width))) rotateX(30deg);
}
#wall-half-vertical-tiles {
position: relative;
z-index: 4;
display: grid;
gap: var(--gap-width);
grid-template: 1fr/repeat(calc(3 * var(--col-count)), 1fr);
background: var(--gap-color);
}
.enable-shadows #wall-half-vertical-tiles {
box-shadow: 0 calc(0.25 * var(--tile-width)) calc(0.1 * var(--tile-width)) rgba(0, 0, 0, 0.5);
}
.enable-shadows #wall-half-vertical-tiles::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: inset 0 calc(0.2 * var(--tile-width)) calc(0.1 * var(--tile-width)) rgba(0, 0, 0, 0.5);
}
.enable-3d-transformations #wall-half-vertical-tiles {
-webkit-transform: translateZ(calc(0.6 * var(--tile-width)));
transform: translateZ(calc(0.6 * var(--tile-width)));
}
#wall-masonry-vertical-tiles {
position: relative;
z-index: 3;
display: grid;
gap: var(--gap-width);
grid-template: 1fr/repeat(calc(3 * var(--col-count)), 1fr);
}
.enable-shadows #wall-masonry-vertical-tiles {
box-shadow: 0 calc(0.25 * var(--tile-width)) calc(0.1 * var(--tile-width)) rgba(0, 0, 0, 0.5);
}
.enable-3d-transformations #wall-masonry-vertical-tiles {
-webkit-transform: translateZ(calc(0.45 * var(--tile-width)));
transform: translateZ(calc(0.45 * var(--tile-width)));
}
#wall-half-horizontal-tiles {
position: relative;
z-index: 2;
display: grid;
gap: var(--gap-width);
grid-template: 1fr/repeat(calc(2 * var(--col-count)), 1fr);
}
.enable-shadows #wall-half-horizontal-tiles {
box-shadow: 0 calc(0.25 * var(--tile-width)) calc(0.1 * var(--tile-width)) rgba(0, 0, 0, 0.5);
}
.enable-3d-transformations #wall-half-horizontal-tiles {
-webkit-transform: translateZ(calc(0.3 * var(--tile-width)));
transform: translateZ(calc(0.3 * var(--tile-width)));
}
#wall-single-horizontal-tiles {
position: relative;
z-index: 1;
display: grid;
gap: var(--gap-width);
grid-template: 1fr/repeat(var(--col-count), 1fr);
}
.enable-shadows #wall-single-horizontal-tiles {
box-shadow: 0 calc(0.25 * var(--tile-width)) calc(0.1 * var(--tile-width)) rgba(0, 0, 0, 0.5);
}
.enable-3d-transformations #wall-single-horizontal-tiles {
-webkit-transform: translateZ(calc(0.15 * var(--tile-width)));
transform: translateZ(calc(0.15 * var(--tile-width)));
}
#wall-front-tiles {
position: relative;
display: grid;
gap: var(--gap-width);
grid-template: repeat(var(--row-count), 1fr)/repeat(var(--col-count), 1fr);
}
.left-shadow {
display: none;
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 100%;
box-shadow: inset calc(1.65 * var(--tile-width)) 0 calc(0.08 * var(--tile-width)) rgba(0, 0, 0, 0.5);
-webkit-transform: translateZ(1px);
transform: translateZ(1px);
}
.enable-shadows .left-shadow {
display: block;
}
.window {
position: absolute;
top: 0;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
width: calc(5 * var(--total-tile-width));
height: calc(6 * var(--total-tile-width));
overflow: hidden;
background: rgba(22, 36, 42, 0.5);
-webkit-perspective: 150vmin;
perspective: 150vmin;
}
.window .left-shadow {
left: calc(-1.5 * var(--tile-width));
}
.room {
position: relative;
overflow: hidden;
width: 100%;
height: 100%;
}
.room-photo {
position: absolute;
top: calc(-2 * var(--tile-width));
left: calc(-3 * var(--tile-width));
max-width: 300%;
opacity: 1;
-webkit-transform: translate(calc(var(--camera-x) * -1% * var(--zoom-square)), calc(var(--camera-y) * -1% * var(--zoom-square))) scale(calc( 3 - var(--zoom) ));
transform: translate(calc(var(--camera-x) * -1% * var(--zoom-square)), calc(var(--camera-y) * -1% * var(--zoom-square))) scale(calc( 3 - var(--zoom) ));
}
.enable-win-reflection .room-photo {
opacity: calc(var(--zoom) / 2);
}
.window-reflection-container {
position: relative;
display: block;
width: 100%;
height: 100%;
}
.window-reflection {
display: none;
position: absolute;
top: calc(-8.5 * var(--tile-width));
right: calc(0 * var(--tile-width));
max-width: calc(600% - (150% * var(--zoom)));
mix-blend-mode: overl.........完整代码请登录后点击上方下载按钮下载查看
网友评论0