CSS firefox 下的透视错误
CSS perspective bug under firefox
我在使用 firefox 下的 css "transform" 属性 时遇到问题(最新版本 + 测试的其他版本)
这是应用的变换:
-moz-transform: perspective(2rem) rotateX(15deg) scaleY(1);
-o-transform: perspective(2rem) rotateX(15deg) scaleY(1);
-ms-transform: perspective(2rem) rotateX(15deg) scaleY(1);
-webkit-transform: perspective(2rem) rotateX(15deg) scaleY(1);
transform: perspective(2rem) rotateX(15deg) scaleY(1);
活动元素应该有
-moz-transform: perspective(0rem) rotateX(15deg) scaleY(1);
-o-transform: perspective(0rem) rotateX(15deg) scaleY(1);
-ms-transform: perspective(0rem) rotateX(15deg) scaleY(1);
-webkit-transform: perspective(0rem) rotateX(15deg) scaleY(1);
transform: perspective(0rem) rotateX(15deg) scaleY(1);
这是一个在 chrome 和 firefox 下测试的 JSfiddle。
"active" 元素在 chrome 及其他版本下确实发生了透视变化,而在 firefox 上,它没有被替换。
我搜索过类似的案例,但其他人似乎没有遇到过。
Firefox 似乎无法很好地为 transform: perspective(n)
规则设置 zero-value。对我有用的只是从 .active
规则中删除透视变换:
#owl-demo .owl-item.active > div{
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
}
Jump the the Edit section, the scenario below is incorrect, but still using it as a reference later
此外,我发现独立的 perspective
属性 在零值下也能正常工作。如果确保将值设置为零对您很重要,也许这就足够了:
#owl-demo .owl-item.active > div{
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-moz-perspective: 0em;
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
perspective: 0em;
}
编辑
事实证明第二种情况只是 "working" 因为它没有被正确使用。作为参考,perspective
是一个 属性 旨在提供 3D space 以将透视应用于所有 3D 转换的 child 元素。例如:
.owl-item {
perspective: 2em;
}
#owl-demo .owl-item > div {
margin: 0px 2px;
height:100px;
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
}
因为 owl-item
容器的 child divs
都应用了 3D 变换,这将对每个容器应用一个透视图。然而,这使得从单个 child(活动的 div)移除视角是不可能的,至少对于纯 CSS.
另一方面,transform: perspective(n)
会影响 div 中的每个 child 元素,因此可以通过应用活动 class 来移除视角:
#owl-demo .owl-item > div {
margin: 0px 2px;
height:100px;
background: #cccccc;
-moz-transform: perspective(2em) rotateX(15deg) scaleY(1);
-o-transform: perspective(2em) rotateX(15deg) scaleY(1);
-ms-transform: perspective(2em) rotateX(15deg) scaleY(1);
-webkit-transform: perspective(2em) rotateX(15deg) scaleY(1);
transform: perspective(2em) rotateX(15deg) scaleY(1);
transition: transform .5s;
}
#owl-demo .owl-item.active > div{
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
}
希望这有助于理解这两种透视方法。我知道它对我有帮助:)
很抱歉没有造成实际问题,但是:考虑到您正在使用 perspective
来塑造导航选项卡,这似乎在现实世界中行不通。 (是的,我知道,倾斜同构已经过时了,但仍然 - 想象一下你必须在纸上构建布局,比如 Google 的 material-thing,你不能像现在这样弯曲标签…
我在使用 firefox 下的 css "transform" 属性 时遇到问题(最新版本 + 测试的其他版本)
这是应用的变换:
-moz-transform: perspective(2rem) rotateX(15deg) scaleY(1);
-o-transform: perspective(2rem) rotateX(15deg) scaleY(1);
-ms-transform: perspective(2rem) rotateX(15deg) scaleY(1);
-webkit-transform: perspective(2rem) rotateX(15deg) scaleY(1);
transform: perspective(2rem) rotateX(15deg) scaleY(1);
活动元素应该有
-moz-transform: perspective(0rem) rotateX(15deg) scaleY(1);
-o-transform: perspective(0rem) rotateX(15deg) scaleY(1);
-ms-transform: perspective(0rem) rotateX(15deg) scaleY(1);
-webkit-transform: perspective(0rem) rotateX(15deg) scaleY(1);
transform: perspective(0rem) rotateX(15deg) scaleY(1);
这是一个在 chrome 和 firefox 下测试的 JSfiddle。 "active" 元素在 chrome 及其他版本下确实发生了透视变化,而在 firefox 上,它没有被替换。
我搜索过类似的案例,但其他人似乎没有遇到过。
Firefox 似乎无法很好地为 transform: perspective(n)
规则设置 zero-value。对我有用的只是从 .active
规则中删除透视变换:
#owl-demo .owl-item.active > div{
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
}
Jump the the Edit section, the scenario below is incorrect, but still using it as a reference later
此外,我发现独立的 perspective
属性 在零值下也能正常工作。如果确保将值设置为零对您很重要,也许这就足够了:
#owl-demo .owl-item.active > div{
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-moz-perspective: 0em;
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
perspective: 0em;
}
编辑
事实证明第二种情况只是 "working" 因为它没有被正确使用。作为参考,perspective
是一个 属性 旨在提供 3D space 以将透视应用于所有 3D 转换的 child 元素。例如:
.owl-item {
perspective: 2em;
}
#owl-demo .owl-item > div {
margin: 0px 2px;
height:100px;
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
}
因为 owl-item
容器的 child divs
都应用了 3D 变换,这将对每个容器应用一个透视图。然而,这使得从单个 child(活动的 div)移除视角是不可能的,至少对于纯 CSS.
transform: perspective(n)
会影响 div 中的每个 child 元素,因此可以通过应用活动 class 来移除视角:
#owl-demo .owl-item > div {
margin: 0px 2px;
height:100px;
background: #cccccc;
-moz-transform: perspective(2em) rotateX(15deg) scaleY(1);
-o-transform: perspective(2em) rotateX(15deg) scaleY(1);
-ms-transform: perspective(2em) rotateX(15deg) scaleY(1);
-webkit-transform: perspective(2em) rotateX(15deg) scaleY(1);
transform: perspective(2em) rotateX(15deg) scaleY(1);
transition: transform .5s;
}
#owl-demo .owl-item.active > div{
background: #6699ff;
-moz-transform: rotateX(15deg) scaleY(1);
-o-transform: rotateX(15deg) scaleY(1);
-ms-transform: rotateX(15deg) scaleY(1);
-webkit-transform: rotateX(15deg) scaleY(1);
transform: rotateX(15deg) scaleY(1);
}
希望这有助于理解这两种透视方法。我知道它对我有帮助:)
很抱歉没有造成实际问题,但是:考虑到您正在使用 perspective
来塑造导航选项卡,这似乎在现实世界中行不通。 (是的,我知道,倾斜同构已经过时了,但仍然 - 想象一下你必须在纸上构建布局,比如 Google 的 material-thing,你不能像现在这样弯曲标签…