如何在变换子元素时保留 3D 变换?

cssweb developmentfront end technology更新于 2024/5/25 5:00:17

作为一名 Web 开发者,深入理解 3D 变换以及如何将其应用于子元素至关重要。变换子元素可能有点棘手,因为我们需要确保父元素的变换得以保留。CSS 3D 变换利用透视在网页上创建深度和视觉上有趣的元素。

在本文中,我们将学习如何变换子元素并保留 3D 变换。我们将学习在 HTML 中变换子元素的不同方法。

变换子元素并保留 3D 变换的不同方法

要变换子元素并保留其 3D 变换,可以使用多种不同的方法。让我们看看一些常用的子元素变换方法。

方法 1:使用 Transform-style 属性

用于变换子元素以保留 3D 元素的第一种方法是使用 transform-style 属性。此属性指定当父元素应用 3D 变换时,子元素如何在 3D 空间中变换。它有两个可能的值:preserve-3d 和 flat。以下是语法和示例 -

语法

以下是使用 transform-style 属性变换任何子元素并保留 3D 变换的语法。

.parent {
   transform: rotateY(45deg);
   transform-style: preserve-3d;
}
.child-wrapper {
   transform: rotateY(-45deg);
   transform-style: preserve-3d;
}

在上面的语法中,我们定义了一个绕 Y 轴旋转 45 度的父元素。在这里,子元素也绕 Y 轴旋转 -45 度,并且 transform-styles 属性设置为 retain-3d,这样元素的子元素就会定位在 3D 空间中,或者相对于元素所在的平面展平。

示例

在给定的示例中,我们定义了一个旋转 45 度的父元素,并且子包装器元素旋转 -45 度以抵消父元素的旋转。子元素继承了父元素和子包装器元素的旋转,因此没有旋转。

<html>
<head>
   <style>
      .parent-element {
         width: 200px;
         height: 200px;
         background-color: green;
         transform: rotateY(45deg);
         transform-style: preserve-3d;
      }
      .child-wrapper-container {
         transform: rotateY(-45deg);
         transform-style: preserve-3d;
      }
      .child-element {
         width: 50px;
         height: 50px;
         background-color: blue;
      }
   </style>
</head>
<body>
   <h2>Transforming the Child Elements Using Transform-style Property</h2>
   <div class="parent-element">
      <div class="child-wrapper-container">
         <div class="child-element"></div>
      </div>
   </div>
</body>
</html>

方法二:使用绝对位置

第二种变换子元素并保留3D元素的方法是使用绝对位置。使用此方法,我们可以轻松地将子元素定位在父元素内,而不会影响父元素的变换。

以下是语法和示例 -

语法

以下是使用绝对位置变换任何子元素并保留3D变换的语法。

.parent {
   transform: rotateY(45deg);
   position: relative;
}
.child {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%) rotateY(-45deg);
}

在上面的语法中,我们定义了一个绕 Y 轴旋转 45 度的父元素。我们还定义了一个绝对定位在父元素内的子元素,并使用 left 和 top 属性将其位置调整为居中。在这里,应用了子元素自身的变换,即绕 Y 轴旋转 -45 度。

示例

在给定的示例中,我们定义了一个绕 Y 轴旋转 45 度的父元素,并且子元素绝对定位在父元素内,并使用 left 和 top 属性将其位置调整为居中。

在这里,应用了子元素自身的变换,即绕 Y 轴旋转 -45 度。

<html>
<head>
   <style>
      .parent-element {
         width: 150px;
         height: 150px;
         background-color: red;
         transform: rotateY(45deg);
         position: relative;
      }
      .child-element {
         width: 50px;
         height: 50px;
         background-color: green;
         position: absolute;
         left: 50%;
         top: 50%;
         transform: translate(-50%, -50%) rotateY(-45deg);
      }
   </style>
</head>
<body>
   <h2>Transforming the Child Elements Using Absolute Position</h2>
   <div class="parent-element">
      <div class="child-element"></div>
   </div>
</body>
</html>

方法三:使用 Backface-visibility

第三个变换子元素以保留 3D 元素的方法是使用 backface-visibility 属性。使用此属性,我们可以控制元素在 3D 空间中旋转时,其背面是否可见。如果将此属性设置为隐藏,则可以防止任何变换影响元素的背面。

语法

以下是使用 backface-visibility 属性变换任何子元素并保留 3D 变换的语法。

.parent {
   transform: rotateY(45deg);
}
.child {
   transform: rotateY(-45deg);
   backface-visibility: hidden;
}

在上面的语法中,我们定义了一个绕 Y 轴旋转 45 度的父元素。在这里,子元素也绕 Y 轴旋转 -45 度,并且将 backface-visibility 属性设置为 hidden,以防止任何变换影响元素的背面。

示例

在给定的示例中,我们定义了一个绕 Y 轴旋转 45 度的父元素,然后子元素也绕 Y 轴旋转 -45 度,但将 backface-visibility 属性设置为 hide,以防止任何变换影响元素的背面。

<html>
<head>
   <style>
      .parent-element {
         width: 500px;
         height: 100px;
         background-color: red;
         transform: rotateY(45deg);
      }
      .child-element {
         width: 405px;
         height: 95px;
         background-color: blue;
         transform: rotateY(-45deg);
         backface-visibility: hidden;
      }
   </style>
</head>
<body>
   <h2>Transforming the Child Elements Using backface-visibility Property</h2>
   <div class="parent-element">
      <div class="child-element"></div>
   </div>
</body>
</html>

结论

在保留 3D 变换的同时对子元素进行变换是 Web 开发者的一项必备技能。对子元素应用 3D 变换可能很复杂,确保父元素的变换得以保留至关重要。在本文中,我们探讨了三种在保留 3D 变换的同时对子元素进行变换的不同方法,包括使用 transform-style 属性、绝对位置和 backface-visibility 属性。每种方法都有其优缺点,开发者应该选择最适合其项目需求的方法。充分理解这些技术后,Web 开发者可以在其网页上创建视觉震撼、引人入胜的 3D 元素。


相关文章


有用资源