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