当前位置: 首页 > news >正文

css记录:三维变化之transform-style

transform-style 是 CSS 3D 转换中的一个重要属性,它定义了嵌套元素如何在 3D 空间中呈现。当你对一个元素应用 3D 转换(如 rotateX(), rotateY(), rotateZ(), translateZ() 等)时,这个元素的子元素默认会在 2D 平面上进行转换,而不是在 3D 空间中。transform-style 属性允许我们改变这种行为,使得子元素也能在 3D 空间中进行转换。

语法

transform-style: flat | preserve-3d;
  • flat:默认值。表示子元素不会保留其 3D 位置,而是在 2D 平面上进行渲染。
  • preserve-3d:表示子元素将在 3D 空间中进行渲染,并保留其 3D 转换。

深入解析

  1. 2D 与 3D 渲染的区别
    transform-style 设置为 flat 时,子元素在 3D 转换中会被“压平”到其父元素的 2D 平面上进行渲染。这意味着子元素的 Z 轴位置(即深度)会被忽略,所有子元素都会显示在同一平面上。而当 transform-style 设置为 preserve-3d 时,子元素会保留其在 3D 空间中的位置,形成真正的 3D 效果。

  2. 应用场景

    • preserve-3d 在创建复杂的 3D 场景时非常有用,比如 3D 导航菜单、3D 立方体、3D 画廊等。在这些场景中,我们通常需要多个元素在 3D 空间中相互堆叠、旋转和移动。
    • 当你只需要简单的 2D 转换时,可以使用 flat 值,但大多数情况下,为了创建更逼真的 3D 效果,我们会选择 preserve-3d
  3. 如何使用
    通常,transform-style 会应用于包含多个需要进行 3D 转换的子元素的父元素。例如,要创建一个可以翻转的 3D 卡片,你需要将 transform-style 设置为 preserve-3d,并在卡片的正面和背面分别应用 3D 转换。

    .card {perspective: 1000px;transform-style: preserve-3d;transition: transform 0.5s;
    }.front, .back {position: absolute;width: 100%;height: 100%;backface-visibility: hidden;
    }.front {background: red;z-index: 2;
    }.back {background: blue;transform: rotateY(180deg);
    }.card.flipped {transform: rotateY(180deg);
    }
    

    在这个示例中,.card 是父元素,它的 transform-style 设置为 preserve-3d,以便在翻转时保持子元素(.front.back)的 3D 位置。.front.back 分别表示卡片的正面和背面,它们都有各自的 3D 转换(虽然 .front 在这个例子中并没有显式的 3D 转换,但它仍然是一个 3D 元素)。

  4. 注意事项

    • transform-style 属性仅对设置了 3D 转换的元素有效。如果元素没有应用 3D 转换,则该属性将无效。
    • 在某些旧版浏览器中,transform-style 可能不受支持或存在兼容性问题。因此,在使用该属性时,最好检查目标浏览器的兼容性情况。
    • transform-styleperspective 通常一起使用,以创建具有透视效果的 3D 场景。perspective 定义了观察者距离 Z=0 平面的距离,而 transform-style 决定了子元素是否保留 3D 位置。

相关文章:

  • python数据分析-连云港石化基地2023年用电量分析
  • JAVA反射代码
  • go匿名函数
  • ES8新特性:async函数
  • [python学习]--模块管理
  • 面向龙芯LoongArch平台的AMD GPU补丁解决了一个“巨大平台错误“
  • 厂里资讯之异步通知文章上下架
  • state和store的使用场景
  • 公有云_私有云_云平台_服务器安全组_按量付费_vpc私有网络/专有网络原理---分布式云原生部署架构搭建005
  • wifi MLME
  • C++ 65 之 模版的局限性
  • 力扣1206--跳表
  • 笔记-python里面的xlrd模块详解
  • linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本
  • Linux中git无法提交,出现不知道身份时的错误,无法检测到有效的电子邮件地址以关联代码的提交
  • 时间复杂度分析经典问题——最大子序列和
  • #Java异常处理
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 230. Kth Smallest Element in a BST
  • Git 使用集
  • Iterator 和 for...of 循环
  • Laravel核心解读--Facades
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Promise初体验
  • python 装饰器(一)
  • Python中eval与exec的使用及区别
  • Vue小说阅读器(仿追书神器)
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于组件的设计工作流与界面抽象
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 小程序开发中的那些坑
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 正则表达式
  • nb
  • 函数计算新功能-----支持C#函数
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​比特币大跌的 2 个原因
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • ‌移动管家手机智能控制汽车系统
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #前后端分离# 头条发布系统
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)windows配置JDK环境
  • (二)斐波那契Fabonacci函数
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)springboot教学评价 毕业设计 641310
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四)软件性能测试
  • .NET C# 操作Neo4j图数据库
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET大文件上传知识整理
  • .Net中ListT 泛型转成DataTable、DataSet
  • .net专家(高海东的专栏)
  • 。。。。。