The CSS `transform-style` property specifies whether the children of an element are affected by 3D transformations, with `flat` rendering them on a 2D plane and `preserve-3d` rendering them within a 3D space.
CSSの transform-styleプロパティは、要素の3D変換を適用する際に、その子要素の変換が親要素の変換空間に入るかどうかを指定します。このプロパティは、3D空間での子要素の描画方法を制御します。
transform-styleプロパティには以下の2つの値があります。
使用例
CSS
.parent {
transform: rotateY(30deg);
transform-style: preserve-3d;
}
.child {
transform: translateZ(100px);
}
上記の例では、親要素に対してY軸回転を適用し、その変換スタイルを preserve-3dに設定しています。これにより、子要素の translateZ(100px)が3D空間内で適用され、立体的な配置が実現されます。
実際の効果
これにより、3D変換を駆使した複雑なアニメーションやインタラクティブなデザインが可能になります。
HTML
<div class="container">
<div class="parent flat">
<div class="child">Flat</div>
</div>
<div class="parent preserve-3d">
<div class="child">Preserve-3D</div>
</div>
</div>
CSS
.container {
display: flex;
gap: 1em;
justify-content: space-around;
margin: 30px auto;
}
.parent {
animation: parent-rotate 5s infinite;
border: 1px solid gray;
height: 200px;
perspective: 800px;
width: 200px;
}
.child {
background-color: lightblue;
height: 100px;
margin: auto;
transform: translateZ(50px);
width: 100px;
}
.flat {
transform-style: flat;
}
.preserve-3d {
transform-style: preserve-3d;
}
@keyframes parent-rotate {
0% {
transform: rotateY(0deg);
}
50% {
transform: rotateY(180deg);
}
100% {
transform: rotateY(360deg);
}
}
説明
結果
このサンプルにより、flatと preserve-3dの違いが明確に視覚的に確認できると思います。