我有以下代码来绘制“3d”等轴测框:
body {
display: flex;
justify-content: center;
align-items: center;
}
.plane {
position: relative;
width: 600px;
height: 600px;
}
.container {
position: absolute;
width: 0;
height: 0;
}
.left {
background-color: #3e8fe1;
height: var(--width);
width: var(--height);
transform-origin: 0 0;
transform: rotate(90deg) skewX(-30deg) scaleY(0.864);
}
.right {
position: relative;
background-color: #2870bd;
height: var(--height);
width: var(--length);
transform-origin: 0 0;
transform: rotate(-30deg) skewX(-30deg) scaleY(0.864);
bottom: var(--width);
}
.top {
position: relative;
background-color: #80bdfe;
height: var(--length);
width: var(--width);
transform-origin: 0 0;
transform: rotate(210deg) skew(-30deg) scaleY(0.864);
bottom: calc(var(--width) + var(--height));
}
<body>
<div class="plane">
<div class="container" style="--width: 50px; --length: 200px; --height: 100px; left: 150px; top: 150px;">
<div class="left"></div>
<div class="right"></div>
<div class="top"></div>
</div>
</div>
</body>
这是可行的,但是有没有什么方法可以让增加
--width
、--length
和 --height
CSS 变量将使盒子沿与当前增长方向相反的方向增长?
也就是说,
--width
当前正在从前到后生长,但应该从后到前生长(这样增加它会使其向您伸出而不是远离您)
同样,增加
--height
应该让它变大,而不是变小。
最后,增加
--length
应该使其朝向“相机”生长,而不是像目前那样远离它。
有什么好的方法吗?这将使排列事情变得更加容易。
body {
background-color: #000;
box-shadow: inset 0 0 1em #000;
}
#plane {
width: 10em;
height: 10em;
margin: 0 auto;
position: relative;
top: 5em;
transform: rotateX(45deg) rotateZ(45deg) translateZ(-1em);
transform-style: preserve-3d;
}
#plane div {
float: left;
transform-origin: 97% 97%;
position: relative;
}
.tall {
background: #fff;
transform: translateZ(var(--height));
transform-style: preserve-3d;
width: var(--width);
height: var(--length);
}
.tall:before, .tall:after {
content: "";
background: #2e6b8f;
position: absolute;
transform-origin: 100% 100%;
}
.tall:before {
transform: translateY(calc(var(--length) - 1em - var(--height) + 1em)) rotateX(90deg);
box-shadow: inset 0em -.125em .25em rgba(0, 0, 0, .1);
width: var(--width);
height: var(--height);
}
.tall:after {
transform: translateX(calc(var(--width) - 1em - var(--length) + 1em)) translateY(calc(var(--length) - 1em)) rotateX(90deg) rotateY(90deg) translateX(calc(var(--height) * -1 + 1em));
box-shadow: inset -.125em 0em .25em rgba(0, 0, 0, .1);
width: var(--length);
height: var(--height);
}
<div id="plane">
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
<div class="tall" style="--width: 1em; --length: 1em; --height: 1em"></div>
</div>
我在
transform
线中使用了平移,这使我能够创建反向运动并重新对齐立方体的面。我还注意到您在示例中使用了 3 个单独的 div,因此我用 before 和 after 伪元素替换了其中 2 个。我希望这有帮助!