perspective属性是不可继承的

596 阅读1分钟

利用CSS3可以进行3D变形,在相关的属性中,perspective用于定义一个元素所有子元素共享的透视深度,即观察者到屏幕的距离。如果没有设置这个属性或者设置有误,则浏览器无法显示立体效果。

在设置perspective属性时需要注意该属性是不能继承的。我测试了Firefox、Chrome和360三种浏览器,其中只有Firefox严格遵守规范。例如,在一个figure元素中嵌套了一个div元素,而这个div元素又包含一个img图像元素。


<figure>
    <div><img src="https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/6/13/172acd27e0435837~tplv-t2oaga2asx-image.image" id="rotate-y" /></div>
    <figcaption>绕Y轴旋转</figcaption>
</figure>

用如下CSS代码为页面设置样式。这里的透视深度被设置在figure元素上,按照规范的要求,该设置是不会继承到img元素的。所以,浏览器显示的正确结果应该是没有立体效果。

* {
  margin: 0;
  padding: 0;
}

figure {
  width: 150px;
  margin: 20px;
  perspective: 400px;
}

figure div {
  height: 150px;
  background-color: lightgreen;
}

figure div img {
  width: 100%;
}

figure figcaption {
  margin-top: 10px;
  text-align: center;
}

#rotate-y:hover {
  transition: transform 2s;
  transform: rotateY(45deg);
}

在下面这两幅图中,左图是Firefox的显示结果,右图则是Chrome和360的显示结果。可见,Firefox遵守CSS规范的程度应该更严格一些。


对于上面CSS的编码错误,只要将perspective的属性设置移到嵌套的div中,就可以在所有浏览器中获得相同的显示效果。修改后的代码如下:

figure {
  width: 150px;
  margin: 20px;
  /* perspective: 400px; */
}

figure div {
  height: 150px;
  background-color: lightgreen;
  perspective: 400px;
}