css - 使用 scaleZ 挤出效果

标签 css transform css-shapes

是否可以使用 scaleZ() 有效地创建 3D 框?

这是我尝试过的方法,但显然它根本没有缩放:

.box {
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  -ms-transform-style: preserve-3d;
  -o-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -webkit-transform: scaleZ(10);
  -moz-transform: scaleZ(10);
  -ms-transform: scaleZ(10);
  -o-transform: scaleZ(10);
  transform: scaleZ(10);
  width: 100px;
  height: 100px;
  display: block;
  background:red;
}

还有其他方法可以解决这个问题吗?即使我必须使用 Javascript?

演示:http://jsfiddle.net/3r1gus9f/

最佳答案

ScaleZ() 不会“挤出”,它要求元素具有它们没有的厚度。

ScaleZ 的特殊之处在于在大多数情况下它不会有任何可见效果(如您的示例)并且需要其他 3d 变换可见,示例:

.w{
  display:inline-block;
  perspective:500px;
  border:1px solid red;
}
.b{
  width:150px;
  height:150px;
  transform-origin:0 0;
  transform: rotatey(45deg);
  background:pink;
}
.b2{
  transform: scaleZ(10) rotatey(45deg);
}
<div class="w">
  no scaleZ()
  <div class="b"></div>
</div>
<div class="w">
  scaleZ(10)
  <div class="b b2"></div>
</div>

有关其背后计算的解释,请参阅 What does the scaleZ() CSS transform function do? .


用 CSS 制作 3d 立方体的常用方法是使用 6 个表面并将它们转换为立方体的 6 个平面,您可以这样做:

#cube {
  position: relative;
  width: 200px; height:200px;
  margin: 100px auto;
  perspective: 500px;
  perspective-origin: 50% 10%;
}
#cube div {
  font-size: 2rem;
  position: absolute;
  width: 200px; height: 200px;
  background: rgba(0, 0, 0, 0.2);
  border: 1px solid #000;
}
.back {
  transform: translateZ(-100px) rotateY(180deg);
}
.right {
  transform: rotateY(-270deg) translateX(100px);
  transform-origin: top right;
}
.left {
  transform: rotateY(270deg) translateX(-100px);
  transform-origin: center left;
}
.top {
  transform: rotateX(-90deg) translateY(-100px);
  transform-origin: top center;
}
.bottom {
  transform: rotateX(90deg) translateY(100px);
  transform-origin: bottom center;
}
.front {
  transform: translateZ(100px);
}
<div id="cube">
  <div class="front">front</div>
  <div class="back">back</div>
  <div class="top">top</div>
  <div class="bottom">bottom</div>
  <div class="left">left</div>
  <div class="right">right</div>
</div>

关于css - 使用 scaleZ 挤出效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30204195/

相关文章:

python - PIL : enlarge an image

css - Google Chrome CSS 过渡错误 - 透视表现异常

css - 三 Angular 形边框图像渐变图案

css - 如何使用 CSS 围绕内容制作一个圆圈?

javascript - 自举网格间距不正确

c# - 移动纸板

css - 如何仅在CSS中屏蔽具有多个形状的div框?

css - HTML 中的透明镂空或镂空形状

css - bootstrap 4 modal-header 试图让徽章右对齐

css - 如何根据大小在 Bootstrap 中设置不同顺序的行和列