使用css制作3D盒子,目的是把盒子并列制作成3D货架

注意事项:这个正方体的其他面的角度很难调,因此如果想动态生成,需要很复杂的设置动态的角度,反正我是折腾了半天没继续搞下去,

  1. 首先看效果(第一个五颜六色的是透明多个面,第2-3都是只有3个面是我实际需要的,右边的有3个并列的正方体与3个并列的长方体):

长方体与正方体,所有代码:

html 复制代码
<!DOCTYPE html>
<html lang="zh-CH">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>

  <style>
    body {
       width: 100%;
      height: 100%;
    }
    .box {
	  float: left;    margin: 5%;  /*只是把两个div放一行,并相隔开*/
      width: 200px;
      height: 200px;
      background-color: skyblue;

      /* 在父元素中添加transform-style启用3d空间 */
      transform-style: preserve-3d;
      /* 在父元素中添加透视效果 */
      /* perspective: 200px; */

      transform: rotateX(353deg) rotateY(45deg);
    }
    .item {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
    }

    .top {
      background-color: rgba(255, 0, 0, 0.4);
      transform: rotateX(90deg) translateZ(100px);
    }

    .bottom {
      background-color: rgba(0, 255, 0, 0.4);
      transform: rotateX(-90deg) translateZ(100px);
    }

    .front {
      background-color: rgba(100, 100, 100, 0.4);
      transform: rotateY(0deg) translateZ(100px);
    }

    .back {
      background-color: rgba(100, 100, 100, 0.4);
      transform: rotateY(-180deg) translateZ(100px);
    }

    .left {
      background-color: rgb(54 72 211 / 78%);
      transform: rotateY(-90deg) translateZ(100px);
    }
	
    .right {
      background-color: rgba(255, 255, 0, 0.4);
      transform: rotateY(90deg) translateZ(100px);
    }
	

	.top2 {background-color: #081b61;transform: rotateX(90deg) translateZ(100px) rotatez(58deg); }
	.left2 {background-color: #2949bf; transform: rotateY(303deg) translateZ(100px);}
	.right2 { background-color: #949aad; transform: rotateY(33deg) translateZ(100px); }
	
	.box1 {
		float: left;
		margin: 5px;
		width: 50px;
		height: 50px;
		transform-style: preserve-3d;
		transform: rotateX(353deg) rotateY(45deg);
	}
	
	/*小正方体*/
	.top3 {
		background-color: #4b598d;
		transform: rotateX(90deg) translateZ(23px) rotatez(154deg) rotatey(2deg);
	}
	.left3 {
		background-color: #2949bf;
		transform: rotateY(304deg) translateZ(30px);
	}
	.right3 {
		background-color: #5f71a9;
		transform: rotateY(23deg) translateZ(27px);
	}

  </style>
</head>
<body>
  

  <div class="box">
    父元素
    <div class="item top">top</div>
    <div class="item bottom">bottom</div>
    <div class="item front">front</div>
    <div class="item back">back</div>
    <div class="item left">left</div>
    <div class="item right">right</div>
  </div>
  
    <div class="box">
    父元素
    <div class="item top2"></div>
    <div class="item left2"></div>
    <div class="item right2"></div>
  </div>
  
   <div class="box">
    父元素
    <div class="item" style="background-color: #081b61;transform: rotateX(90deg) translateZ(100px) rotatez(49deg);"></div>
    <div class="item" style="background-color: #2949bf; transform: rotateY(311deg) translateZ(100px);"></div>
    <div class="item" style="background-color: #949aad;transform: rotateY(40deg) translateZ(100px);"></div>
  </div>
  
   <div>
	  <div style="float: left; margin: 5px; width: 50px; height: 50px; transform-style: preserve-3d;transform: rotateX(353deg) rotateY(45deg);">  
		<div class="item top3"></div>
		<div class="item left3"></div>
		<div class="item right3"></div>
	  </div>
	  <div class="box1">   
		<div class="item top3"></div>
		<div class="item left3"></div>
		<div class="item right3"></div>
	  </div>
	  <div class="box1">
		<div class="item top3"></div>
		<div class="item left3"></div>
		<div class="item right3"></div>
	  </div>
  </div>
<br><br><br>

 <div>
	  <div style="width:80px;float: left; margin: 5px;height: 50px; transform-style: preserve-3d;transform: rotateX(353deg) rotateY(45deg);">  
		<div class="item" style="background-color: #414349;transform:rotateX(94deg) translateZ(26px)  translatex(8px) translatey(18px) rotatez(81deg) rotatey(0deg)"></div>
		<div class="item" style="background-color: #5275f5;transform:rotateY(313deg) translateZ(2px)"></div>
		<div class="item" style="background-color: #2e4495;transform:rotateY(26deg) rotateZ(4deg) translateZ(55px) translateY(-4px)"></div>
	  </div>
	  <div style="width:80px;float: left; margin: 5px;  height: 50px; transform-style: preserve-3d;transform: rotateX(353deg) rotateY(45deg);">  
		<div class="item" style="background-color: #414349;transform:rotateX(94deg) translateZ(26px)  translatex(8px) translatey(18px) rotatez(81deg) rotatey(0deg)"></div>
		<div class="item" style="background-color: #5275f5;transform:rotateY(313deg) translateZ(2px)"></div>
		<div class="item" style="background-color: #2e4495;transform:rotateY(26deg) rotateZ(4deg) translateZ(55px) translateY(-4px)"></div>
	  </div> 
	  <div style="width:80px;float: left; margin: 5px; height: 50px; transform-style: preserve-3d;transform: rotateX(353deg) rotateY(45deg);">  
		<div class="item" style="background-color: #414349;transform:rotateX(94deg) translateZ(26px)  translatex(8px) translatey(18px) rotatez(81deg) rotatey(0deg)"></div>
		<div class="item" style="background-color: #5275f5;transform:rotateY(313deg) translateZ(2px)"></div>
		<div class="item" style="background-color: #2e4495;transform:rotateY(26deg) rotateZ(4deg) translateZ(55px) translateY(-4px)"></div>
	  </div>
  </div> 
</body>
</html>
相关推荐
珍珠奶茶爱好者9 小时前
vue二次封装ant-design-vue的table,识别columns中的自定义插槽
前端·javascript·vue.js
target酱9 小时前
Docker部署全流程
前端·docker
hj5914_前端新手9 小时前
React 基础 - 状态管理
前端·react.js
秃顶老男孩.9 小时前
异步处理(前端面试)
前端·面试·职场和发展
三脚猫的喵9 小时前
微信小程序中实现AI对话、生成3D图像并使用xr-frame演示
前端·javascript·ai作画·微信小程序
文心快码BaiduComate10 小时前
文心快码3.5S全新升级,体验多智能体协同开发,最高赢无人机!
前端·后端·程序员
安卓开发者10 小时前
鸿蒙Next ArkWeb进程解析:多进程架构如何提升Web体验
前端·架构·harmonyos
炒毛豆10 小时前
移动端响应式px转换插件PostCSS的使用~
前端·javascript·postcss
恋猫de小郭10 小时前
Flutter Riverpod 3.0 发布,大规模重构下的全新状态管理框架
android·前端·flutter
wordbaby10 小时前
用 window.matchMedia 实现高级响应式开发:API 全面解析与实战技巧
前端·javascript