js+css+svg实现立体分层3d ui设计稿手绘稿效果代码
代码语言:html
所属分类:其他
代码描述:js+css+svg实现立体分层3d ui设计稿手绘稿效果代码
代码标签: js css svg 立体 分层 3d ui 设计稿 手绘稿
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
@layer normalize, base, demo, structural, explode, shadows;
@layer shadows {
:root {
--power: linear(
0 0%, 0.2688 9.91%, 0.3859 15%,
0.4917 20.19%, 0.5865 25.5%,
0.6705 30.93%, 0.7441 36.51%,
0.8075 42.26%, 0.8593 47.98%,
0.9022 53.93%, 0.9366 60.13%,
0.963 66.67%, 0.9812 73.4%,
0.9929 80.76%, 0.9986 88.89%, 1 100%
);
}
.shadow {
transition: opacity 0.26s, transform 0.26s, scale 0.26s;
}
.shadow--main:has(+ .layer > .mover:hover),
.mover:has(+ .layer > .mover:hover) > .shadow,
.mover:has(+ .layer > .mover:hover) > .shadow-wrap .shadow {
opacity: 0.2;
div {
scale: 0.94;
}
}
.mover:hover > .shadow-wrap .shadow,
.mover:hover > .shadow {
opacity: 1;
scale: 0.98;
}
}
@layer explode {
main {
transform-style: preserve-3d;
* {
transform-style: preserve-3d;
}
}
.shadow {
scale: 0.999;
overflow: hidden;
}
[data-exploded='false'] {
.shadow {
opacity: 1;
transition: opacity 1s;
div {
transition: translate 1s, scale 0.26s;
}
}
main {
transform: translate3d(0, 0, 100vmin) rotateX(0deg) rotateY(0deg)
rotateX(0deg);
transition: transform 1s 1s var(--power);
/* .shadow--main div, */
.mover > :is(.content, .shadow) {
transition: transform 0.26s, opacity 1s;
}
.layer {
translate: 0 0 0;
transition: translate 1s var(--power);
}
}
}
[data-exploded='true'] {
.mover > .shadow {
opacity: 0.5;
scale: 0.96;
transition: opacity 1s 1s;
}
.mover > .shadow-wrap {
opacity: 1;
.shadow {
opacity: 0.5;
}
}
main {
transform: translate3d(0, 0, 100vmin) rotateX(calc(var(--x1, 340) * 1deg))
rotateY(calc(var(--y1, 30) * 1deg)) rotateX(calc(var(--x2, 40) * 1deg));
transition: transform 1s var(--power);
.mover > :is(.content, .shadow) {
transition: transform 0.26s;
}
.shadow--main div,
.shadow-wrap .shadow div,
.mover > .shadow div {
transition: translate 1s 1s, scale 0.26s;
}
.shadow--main div,
.mover > .shadow div {
translate: calc(var(--tx, 0.5) * 1rem) calc(var(--ty, -0.5) * 1rem);
}
.mover:hover > div {
transform: translate3d(0, 0, 1rem);
}
.layer {
translate:
calc(var(--tx, 0.5) * 1rem)
calc(var(--ty, -0.5) * 1rem)
calc(var(--step, 4) * 1rem)
;
transition: translate 1s 1s;
transition-timing-function: var(--power);
}
}
}
}
@layer structural {
:root {
--accent: light-dark(hsl(12 94% 60%), hsl(280 80% 80%));
--dialog-width: 140px;
--dialog-height: 112px;
--shadow: light-dark(hsl(0 0% 0% / 0.3), hsl(0 0% 0% / 0.7));
--heading-size: 44px;
--count: 4;
--content-size: calc(
(var(--count) - 1) * 0.5rem + (var(--count) * 1.25rem) + 1.5rem + 2px
);
}
.layer {
pointer-events: none;
position: relative;
}
main,
section.layer {
grid-area: 1 / 1;
display: grid;
grid-template: auto / auto;
}
section.layer {
width: clamp(300px, 50vw, 460px);
}
.shadow {
grid-area: 2 / 1;
z-index: 2;
opacity: 0.2;
pointer-events: none;
}
:root:has(dialog[open]) .shadow-wrap {
display: block;
opacity: 1;
.shadow div {
scale: 0.999;
translate: 0 0;
}
}
:root:has(dialog[open])[data-exploded='true'] .shadow-wrap {
.shadow div {
transition: translate 10s;
translate: calc(var(--tx, 0.5) * 1rem) calc(var(--ty, -0.5) * 1rem);
}
}
.shadow-wrap .shadow div {
transition-property: transition, scale, transform, translate;
transition-duration: 0.26s;
transform-origin: 50% 0;
scale: 0.9;
translate: 0 -12px;
}
.shadow-wrap {
display: none;
transition-property: display, opacity, transition, scale, transform;
transition-behavior: allow-discrete;
transition-duration: 0.26s;
opacity: 0;
/* transform-origin: 50% 0;
scale: 0.9;
translate: 0 -12px; */
}
@starting-style {
:root:has(dialog[open]) .shadow-wrap {
opacity: 0;
}
:root:has(dialog[open]) .shadow-wrap .shadow div {
scale: 0.9;
translate: 0 -12px;
}
}
.shadow--dialog {
width: 100%;
height: 100%;
position: relative;
overflow: hidden;
div {
position: absolute;
right: -1rem;
right: 0;
top: -2px;
width: var(--dialog-width);
height: var(--dialog-height);
background: var(--shadow);
border-radius: 6px;
}
}
.shadow--main {
position: relative;
z-index: -1;
div {
background: var(--shadow);
border-radius: 12px;
position: absolute;
inset: 0;
translate: 0 0;
}
}
.shadow--main {
grid-area: 1 / 1;
}
.content--main {
width: 100%;
}
.table--layer,
.shadow--table,
.content--main {
grid-area: 1 / 1;
display: grid;
grid-template-rows: var(--heading-size) calc(
var(--heading-size) + var(--content-size)
);
padding: 1rem;
padding-top: 0;
}
.shadow--status div,
.shadow--table div {
grid-area: 2 / 1;
background: var(--shadow);
border-radius: 6px;
}
.shadow--table,
.table--layer {
border: 1px solid #0000;
}
.layer--status,
.shadow--status,
.content--table {
display: grid;
grid-template-rows: var(--heading-size) 1fr;
grid-area: 2 / 1;
}
.layer--dialog,
.content--status {
grid-area: 2 / 1;
}
.mover {
pointer-events: all;
grid-area: 1 / 1;
display: grid;
grid-template: auto / auto;
> div {
grid-area: 1 / 1;
}
}
.mover--nested {
grid-area: 2 / .........完整代码请登录后点击上方下载按钮下载查看
















网友评论0