跳转至内容
  • 版块
  • 最新
  • 热门
  • 标签
  • 积分榜
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

百得社区

  1. 主页
  2. 技术分享
  3. 如何利用css绘制一个长方体

如何利用css绘制一个长方体

已定时 已固定 已锁定 已移动 技术分享
web前端开发
1 帖子 1 发布者 76 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 重复过往重 离线
    重复过往重 离线
    重复过往
    写于 最后由 重复过往 编辑
    #1

    WX20241015-173209.png

    
    <template>
      <div :class="['cube-wrapper', type]" :style="{ height }">
        <div class="cube-box">
         <!-- 只需要显示三个面 隐藏其余的面 -->
          <!-- <div class="cube1 cube"></div> -->
          <div class="cube2 cube"></div>
          <!-- <div class="cube3 cube"></div> -->
          <div class="cube4 cube"></div>
          <div class="cube5 cube"></div>
          <!-- <div class="cube6 cube"></div> -->
        </div>
      </div>
    </template>
    
    <script>
    export default {
      props: {
        height: {
          type: String,
          default: "60px",
        },
        width: {
          type: String,
          default: "21px",
        },
        // 传空或者green 这里根据业务需要 不同的类型展示不同的颜色 可以自行更改
        type: {
          type: String,
          default: "",
        },
      },
    };
    </script>
    
    <style lang="less" scoped>
    /* 外层容器 */
    .cube-wrapper {
      position: relative;
      width: 21px; /* 可以根据实际需求调整 */
      height: 100px; /* 同上 */
      perspective: 1000px; /* 透视距离,影响3D效果 */
    
      &.green {
        .cube2 {
          background: linear-gradient(#99e2cb, #b2ecb2);
        }
        .cube4 {
          background: linear-gradient(#42d1ca, #aeebb3);
        }
        .cube5 {
          background: #d2fdc0;
        }
      }
    }
    
    /* 内层容器 */
    .cube-box {
      position: absolute;
      width: 21px;
      height: 100%;
      transform: rotateX(-30deg) rotateY(45deg);
      transform-style: preserve-3d;
    }
    
    /* 基础样式 */
    .cube {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
    }
    
    /* 第一个面 */
    // .cube1 {
    //   background: red;
    // }
    
    /* 第二个面 */
    .cube2 {
      transform: rotateY(-90deg);
      transform-origin: left top;
      background: linear-gradient(#18b2ff, #38cdff);
    }
    
    /* 第三个面 */
    // .cube3 {
    //   transform: rotateY(90deg);
    //   transform-origin: right top;
    //   background: blue;
    // }
    
    /* 第四个面 */
    .cube4 {
      transform: translateZ(21px); /* 假设宽度为100px,则一半为50px */
      transform-origin: center;
      background: linear-gradient(#3f6ef9, #4c9dff);
    }
    
    /* 第五个面 */
    .cube5 {
      height: 21px;
      padding-top: 100%;
      transform: rotateX(90deg) translateZ(0);
      transform-origin: left top;
      background: #46cfff;
    }
    
    /* 第六个面 */
    // .cube6 {
    //   top: auto;
    //   bottom: 0;
    //   height: 21px;
    //   padding-top: 100%;
    //   transform: rotateX(-90deg) translateZ(0);
    //   transform-origin: left bottom;
    //   background: black;
    // }
    </style>
    

    这次不得不冲了!

    1 条回复 最后回复
    3

    Powered by NodeBB | Contributors
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 热门
    • 标签
    • 积分榜
    • 用户
    • 群组