首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSS中透视图和transform透视图属性的区别是什么?

CSS中透视图和transform透视图属性的区别是什么?
EN

Stack Overflow用户
提问于 2014-09-18 11:03:06
回答 4查看 5.2K关注 0票数 19

在我们的应用程序中,我们使用临时css转换作为页面转换。

随着最新版本的谷歌铬(37),这是停止工作。这种转变已不再是一种视角。

通过修改父元素上透视图的定义,我能够恢复正确的行为。

代码语言:javascript
复制
perspective: 2000px;

代码语言:javascript
复制
transform: perspective(2000px);

我的问题是:我们现有的声明(使用perspec格属性)有什么问题吗?还是这是google chrome中的一个bug?

我试图在下面重新创建这个问题,但在简化的示例中,我看到了相反的效果,即透视图现在起作用并进行转换:透视图无效。

有什么想法吗?

代码语言:javascript
复制
.perspective-Parent {
    /*-moz-transform: perspective(2000px);
    -ms-transform: perspective(2000px);
    -o-transform: perspective(2000px);
    -webkit-transform: perspective(2000px);
    transform: perspective(2000px);*/
  
    -moz-perspective: 2000px;
    -ms-perspective: 2000px;
    -webkit-perspective: 2000px;
    perspective: 2000px; 
  
    -moz-perspective-origin: 50% 50%;
    -ms-perspective-origin: 50% 50%;
    -webkit-perspective-origin: 50% 50%;
    perspective-origin: 50% 50%; 
 }

.page {
  	background-color: red;
    
  	-moz-transform-origin: right center;
  	-ms-transform-origin: right center;
  	-o-transform-origin: right center;
	-webkit-transform-origin: right center;
  	transform-origin: right center;
  	
  	-ms-transform: rotateY(75deg);
  	-moz-transform: rotateY(75deg);
  	-o-transform: rotateY(75deg);
  	-webkit-transform: rotateY(75deg);
    transform: rotateY(75deg);
  
    width: 200px;
    height: 100px;
}
代码语言:javascript
复制
<p>
<div class="perspective-Parent">
  <div class="page">
  </div>
</div>

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-28 01:45:53

我对透视和transform透视图的基本理解是,普通透视图属性通常用于父元素,为多个子元素提供相同的透视图,而transform透视图则用于子元素或单个元素,为其提供自己的透视图。

当您将这些效果应用于多个元素时,这是最容易看到的:

父元素上的perspective: ;

代码语言:javascript
复制
.perspective-Parent {
  -moz-perspective: 2000px;
  -ms-perspective: 2000px;
  -webkit-perspective: 2000px;
  perspective: 2000px;
  -moz-perspective-origin: 50% 50%;
  -ms-perspective-origin: 50% 50%;
  -webkit-perspective-origin: 50% 50%;
  perspective-origin: 50% 50%;
}
.page {
  background-color: red;
  -moz-transform-origin: right center;
  -ms-transform-origin: right center;
  -o-transform-origin: right center;
  -webkit-transform-origin: right center;
  transform-origin: right center;
  -ms-transform: rotateY(75deg);
  -moz-transform: rotateY(75deg);
  -o-transform: rotateY(75deg);
  -webkit-transform: rotateY(75deg);
  transform: rotateY(75deg);
  width: 200px;
  height: 100px;
  margin: 10px; /* added to make difference more visible */ 
}
代码语言:javascript
复制
<div class="perspective-Parent">
  <div class="page"></div>
  <div class="page"></div>
  <div class="page"></div>
</div>

请注意,上面示例中的所有三个“页面”都是从一个共同的角度来查看的。

关于单个元素的transform: perspective();

代码语言:javascript
复制
.page {
  background-color: red;
  -moz-transform-origin: right center;
  -ms-transform-origin: right center;
  -o-transform-origin: right center;
  -webkit-transform-origin: right center;
  transform-origin: right center;
  -ms-transform: perspective(2000px) rotateY(75deg);
  -moz-transform: perspective(2000px) rotateY(75deg);
  -o-transform: perspective(2000px) rotateY(75deg);
  -webkit-transform: perspective(2000px) rotateY(75deg);
  transform: perspective(2000px) rotateY(75deg);
  width: 200px;
  height: 100px;
  margin: 10px; /* added to make difference more visible */ 
}
代码语言:javascript
复制
<div class="perspective-Parent">
  <div class="page"></div>
  <div class="page"></div>
  <div class="page"></div>
</div>

请注意,在这个示例中,三个“页面”各有其各自的透视图。

现在这一切都不可能了..。

这两种方法都是不正确的,它们只是提供不同的视觉效果,只需选择一个你喜欢的。

票数 14
EN

Stack Overflow用户

发布于 2017-07-26 10:06:47

这里接受的答案是不正确的。

您确实可以对父元素进行透视图转换。要使其工作,您需要在父服务器上设置transform样式:保存-3d;。

代码语言:javascript
复制
.perspective-Parent{
  transform: perspective(2000px);
  transform-style: preserve-3d;
}

.page {
  background-color: red;
  transform-origin: right center;
  transform: rotateY(75deg);
  width: 200px;
  height: 100px;
  margin: 10px;
}
代码语言:javascript
复制
<div class="perspective-Parent">
<div class="page">
</div>
<div class="page">
</div><div class="page">
</div>
</div>

当我在chrome中测试不同的透视图时,透视图属性会产生一些奇怪的扭曲。

代码语言:javascript
复制
.box{
  width: 100px; 
  height: 100px;
  margin-left: 100px;
}

.no-perspective-box{ 
  transform-style: preserve-3d;
  transform: rotateX(-15deg) rotateY(15deg);
}

.perspective-prop-box{
  perspective: 7.5cm;
  transform-style: preserve-3d; /*This is required here too*/
  transform: rotateX(-15deg) rotateY(15deg);
}

.perspective-box{ 
  transform-style: preserve-3d;
  transform: perspective(7.5cm) rotateX(-15deg) rotateY(15deg);
}

.face{
  position: absolute;
  width: 100px;
  height: 100px;
  line-height: 100px;
  font-size: 100px;
  text-align: center;
}

.top{
  background-color: blue;
  transform: rotateX(90deg) translate3d(0, 0, 50px);
}

.left{
  background-color: red;
  transform: rotateY(-90deg) translate3d(0, 0, 50px);
}

.front{
  background-color: green;
  transform: translate3d(0, 0, 50px);
}
代码语言:javascript
复制
<p>Without Perspective:</p>
<div class="box no-perspective-box">
  <div class="face front">A</div>
  <div class="face top">B</div>
  <div class="face left">C</div>
</div>
<br /><br />
<p>With Perspective Property:</p>
<div class="box perspective-prop-box">
  <div class="face front">A</div>
  <div class="face top">B</div>
  <div class="face left">C</div>
</div>
<br /><br />
<p>With Perspective Function:</p>
<div class="box perspective-box">
  <div class="face front">A</div>
  <div class="face top">B</div>
  <div class="face left">C</div>
</div>
<br /><br />

票数 2
EN

Stack Overflow用户

发布于 2017-01-09 20:36:43

在声明属性和函数时,顺序很重要,“透视”函数必须紧跟在"transform“属性之后!

错误代码

代码语言:javascript
复制
transform:rotateX(45deg) perspective(100px);

正确码

代码语言:javascript
复制
transform:perspective(100px) rotate(45deg);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25910933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档