你知道chrome这样做的原因是什么吗?有补救办法吗?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body style="perspective:500px">
<div style="
width:40px;
height:40px;
background: green;
padding: 30px;
transform: rotateY(50deg);
transform-style: preserve-3d">
<div style="
transform: translateZ(60px)">
content
</div>
</div>
<hr style="margin: 40px 0">
<div style="
opacity: .5;
width:40px;
height:40px;
background: green;
padding: 30px;
transform: rotateY(50deg);
transform-style: preserve-3d">
<div style="
transform: translateZ(60px)">
content
</div>
</div>
</body>
</html>
使用不等于1的不透明度会将元素放置在新的 堆叠上下文。
这导致浏览器在遵循新规范的情况下扁平化。
我们可以使用一个包装元素来设置opcaity(根据我们的需要,这个元素也可以是具有主透视图属性的元素):
<div style="perspective:500px">
<div style="perspective:inherit;opacity:.5">
<div style="
width:40px;
height:40px;
background: green;
padding: 30px;
transform: rotateY(50deg);
transform-style: preserve-3d
">
<div style="transform: translateZ(60px)">
content
</div>
</div>
</div>
</div>
我认为这是按照标准应该发生的事情:
变换样式的preserve-3d值建立堆叠上下文。
下列CSS属性值要求用户代理创建一个 子代元素的扁平化表示 已应用,因此会覆盖转换样式的行为: 保留三维:
溢出:除“visible”以外的任何值
不透明度:1以外的任何值。
过滤器:除“无”以外的任何值。
w3c规范