您的位置:首页> 前端教程> CSS3教程
文章导航

CSS3 scale3d(x,y,z)

2018-9-4 14:50| 作者: admin| 查看: 1052| 评论: 0|来自: 蚂蚁部落

关于transform变换更多内容可以参阅CSS3 2D/3D转换一章节。

此方法用来规定元素在三维空间中的缩放功能。

与二维空间的缩放相比,多了Z轴的缩放,具体可以参阅CSS3 scale(x,y)一章节。

语法结构:

[CSS] 纯文本查看 复制代码
scale3d(x,y,z)

参数解析:

(1).x:表示在x轴方向的缩放倍数。

(2).y:表示在y轴方向的缩放倍数。

(3).z:表示在z轴方向的缩放倍数。

代码实例:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>  
<html>  
<head>  
<meta charset=" utf-8">  
<meta name="author" content="http://www.softwhy.com/" />  
<title>蚂蚁部落</title>  
<style>
#box{
  position:relative;
  height:150px;
  width:150px;
  margin-left:450px;
  margin-top:250px;
  padding:10px;
  border:1px solid black;     
  perspective:1200px; 
}
#ant{
  width:100px; 
  height:100px; 
  text-align:center; 
  line-height:100px; 
  font-size:12px; 
  position:absolute; 
  border:1px solid black; 
  background-color:yellow; 
       
  transform:scale3d(1,1,1);
}
table{   
  font-size:12px;   
  width:500px;   
  margin-left:220px; 
  text-align:left; 
}   
.left{
  text-align:right;
  width:150px;
}
</style>
<script type="text/javascript">  
function change(x,y,z){  
  var odiv = document.getElementById("ant");
  var oshow = document.getElementById("show");
     
  odiv.style.transform = "scale3d(" + x + "," + y + "," + z + ")";
  oshow.innerHTML = x_range.value + "/" + y_range.value + "/" + z_range.value;
} 
window.onload=function(){ 
  var x_range = document.getElementById("x_range");
  var y_range = document.getElementById("y_range");
  var z_range = document.getElementById("z_range");
  x_range.onmousemove = function () {
    change(x_range.value, y_range.value, z_range.value);
  }
  y_range.onmousemove = function () {
    change(x_range.value, y_range.value, z_range.value);
  }
  z_range.onmousemove = function () {
    change(x_range.value, y_range.value, z_range.value);
  }
} 
</script> 
</head>
<body>
<div id="box">
  <div id="ant">蚂蚁部落</div>
</div>
<table>  
  <tr>  
    <td class="left">x轴放大:</td>  
    <td><input type="range" min="0" step="1" max="10" id="x_range" value="1"/></td>  
  </tr>  
  <tr>
    <td class="left">y轴放大:</td>
    <td><input type="range" min="0" step="1" max="10" id="y_range" value="1" /></td>
  </tr>  
  <tr>
    <td class="left">z轴放大:</td>
    <td><input type="range" min="0" step="1" max="10" id="z_range" value="1" /></td>
  </tr> 
  <tr>  
    <td class="left">x/y/z:</td>  
    <td>(<span id="show">1/1/1</span>)</td>  
  </tr>  
</table>  
</body>  
</html>

上面的代码演示了缩放效果;x和y轴比较明显,z轴有点难于观察,代码修改如下:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>  
<html>  
<head>  
<meta charset=" utf-8">  
<meta name="author" content="http://www.softwhy.com/" />  
<title>蚂蚁部落</title>  
<style>
#box{
  position:relative;
  height:150px;
  width:150px;
  margin-left:450px;
  margin-top:250px;
  padding:10px;
  border:1px solid black;  
  perspective:1200px; 
}
#ant{
  width:100px; 
  height:100px; 
  text-align:center; 
  line-height:100px; 
  font-size:12px; 
  position:absolute; 
  border:1px solid black; 
  background-color:yellow; 
      
  transform:scale3d(1,1,1) rotateX(45deg);   
}
table{   
  font-size:12px;   
  width:500px;   
  margin-left:220px; 
  text-align:left; 
}   
.left{
  text-align:right;
  width:150px;
}
</style>
<script type="text/javascript">  
function change(x,y,z){  
  var odiv = document.getElementById("ant");
  var oshow = document.getElementById("show");
    
  odiv.style.transform = "scale3d(" + x + "," + y + "," + z + ") " + "rotateX(45deg)";;
  oshow.innerHTML = x_range.value + "/" + y_range.value + "/" + z_range.value;
} 
window.onload=function(){ 
  var x_range = document.getElementById("x_range");
  var y_range = document.getElementById("y_range");
  var z_range = document.getElementById("z_range");
  x_range.onmousemove = function () {
    change(x_range.value, y_range.value, z_range.value);
  }
  y_range.onmousemove = function () {
    change(x_range.value, y_range.value, z_range.value);
  }
  z_range.onmousemove = function () {
    change(x_range.value, y_range.value, z_range.value);
  }
} 
</script> 
</head>
<body>
<div id="box">
  <div id="ant">蚂蚁部落</div>
</div>
<table>  
  <tr>  
    <td class="left">x轴放大:</td>  
    <td><input type="range" min="0" step="1" max="10" id="x_range" value="1"/></td>  
  </tr>  
  <tr>
    <td class="left">y轴放大:</td>
    <td><input type="range" min="0" step="1" max="10" id="y_range" value="1" /></td>
  </tr>  
  <tr>
    <td class="left">z轴放大:</td>
    <td><input type="range" min="0" step="1" max="10" id="z_range" value="1" /></td>
  </tr> 
  <tr>  
    <td class="left">x/y/z:</td>  
    <td>(<span id="show">1/1/1</span>)</td>  
  </tr>  
</table>  
</body>  
</html>

让元素旋转一定的角度,这样在z轴的演示就比较明显了。

特别说明:如果不使用perspective属性,将看不到z轴演示效果,因为3D场景就不会有景深的Z轴,关于perspective属性可以参阅CSS3 perspective一章节。 

在z轴上的缩放理解起来可能会有一点点的困难,下面再简要介绍一下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/04/145133vwqtx3e36aatp099.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

一个三维空间效果图,就像一个墙角,那么在z轴方向缩放从侧面看的话,可以用如下图示表示:

a:3:{s:3:\"pic\";s:43:\"portal/201809/04/145138cfbrfn7n76vgzhn6.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

蓝色的为z轴,这是从侧面看的效果,红色斜线表示被缩放的div块侧边,两个竖向红色线可以想象为两堵墙,那么div在轴的缩放可以理解为两堵墙挤压和拉伸,是不是这样就很明显了。

scale3d()函数也可以拆分单独写:

[CSS] 纯文本查看 复制代码
transform:scaleX(1); 
transform:scaleY(2); 
transform:scaleZ(3);
1

鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

上一篇:CSS3 clip下一篇:CSS3 @keyframes

最新评论

返回顶部