CSS系列(9)-- Transform 变换详解
前端技术探索系列:CSS Transform 变换详解 🔄
致读者:探索 CSS 变换的魔力 👋
前端开发者们,
今天我们将深入探讨 CSS Transform,学习如何创建引人注目的 2D 和 3D 变换效果。
2D 变换基础 🚀
基础变换函数
/* 基础变换 */
.transform-2d {/* 平移 */transform: translate(50px, 30px);transform: translateX(50px);transform: translateY(30px);/* 缩放 */transform: scale(1.5);transform: scaleX(1.5);transform: scaleY(0.8);/* 旋转 */transform: rotate(45deg);/* 倾斜 */transform: skew(10deg, 20deg);transform: skewX(10deg);transform: skewY(20deg);
}/* 组合变换 */
.combined-transform {transform: translate(50px, 30px) rotate(45deg) scale(1.5);
}/* 变换原点 */
.transform-origin {transform-origin: left top;transform: rotate(45deg);
}
实用 2D 效果
/* 悬停效果 */
.hover-card {transition: transform 0.3s ease;
}.hover-card:hover {transform: translateY(-10px) scale(1.05);
}/* 翻转卡片 */
.flip-card {perspective: 1000px;
}.flip-card-inner {transition: transform 0.6s;transform-style: preserve-3d;
}.flip-card:hover .flip-card-inner {transform: rotateY(180deg);
}
3D 变换详解 🎯
3D 变换基础
/* 3D 变换设置 */
.transform-3d {/* 3D 平移 */transform: translate3d(x, y, z);transform: translateZ(50px);/* 3D 旋转 */transform: rotate3d(1, 1, 1, 45deg);transform: rotateX(45deg);transform: rotateY(45deg);transform: rotateZ(45deg);/* 3D 视角 */perspective: 1000px;perspective-origin: center center;
}/* 3D 空间 */
.space-3d {transform-style: preserve-3d;backface-visibility: hidden;
}
创意 3D 效果
/* 3D 翻书效果 */
.book {perspective: 1000px;
}.page {transform-origin: left center;transition: transform 0.6s;
}.page:hover {transform: rotateY(-180deg);
}/* 3D 立方体 */
.cube {width: 200px;height: 200px;position: relative;transform-style: preserve-3d;animation: rotate 10s infinite linear;
}.cube-face {position: absolute;width: 100%;height: 100%;backface-visibility: hidden;
}.front { transform: translateZ(100px); }
.back { transform: rotateY(180deg) translateZ(100px); }
.right { transform: rotateY(90deg) translateZ(100px); }
.left { transform: rotateY(-90deg) translateZ(100px); }
.top { transform: rotateX(90deg) translateZ(100px); }
.bottom { transform: rotateX(-90deg) translateZ(100px); }
实践项目:3D 转换器 🛠️
class Transform3DGenerator {constructor(options = {}) {this.options = {perspective: 1000,rotationSpeed: 0.5,easing: 'ease',...options};this.init();}init() {this.createStyles();this.setupControls();this.setupAnimations();}createStyles() {const style = document.createElement('style');style.textContent = this.generateStyles();document.head.appendChild(style);}generateStyles() {return `.transform-container {perspective: ${this.options.perspective}px;perspective-origin: 50% 50%;}.transform-element {transform-style: preserve-3d;transition: transform ${this.options.rotationSpeed}s ${this.options.easing};}.transform-face {position: absolute;backface-visibility: hidden;}${this.generateAnimationStyles()}`;}generateAnimationStyles() {return `@keyframes rotate3d {from {transform: rotate3d(1, 1, 1, 0deg);}to {transform: rotate3d(1, 1, 1, 360deg);}}.rotate-animation {animation: rotate3d 10s infinite linear;}`;}createTransform(element, transforms) {const matrix = this.calculateTransformMatrix(transforms);element.style.transform = `matrix3d(${matrix.join(',')})`;}calculateTransformMatrix(transforms) {// 计算3D变换矩阵let matrix = [1, 0, 0, 0,0, 1, 0, 0,0, 0, 1, 0,0, 0, 0, 1];transforms.forEach(transform => {matrix = this.multiplyMatrices(matrix, this.getTransformMatrix(transform));});return matrix;}getTransformMatrix({ type, value }) {// 根据变换类型返回对应的变换矩阵switch(type) {case 'rotate':return this.getRotationMatrix(value);case 'translate':return this.getTranslationMatrix(value);case 'scale':return this.getScaleMatrix(value);default:return this.getIdentityMatrix();}}setupAnimations() {document.querySelectorAll('.transform-element').forEach(element => {element.addEventListener('mouseover', () => {this.startAnimation(element);});element.addEventListener('mouseout', () => {this.stopAnimation(element);});});}startAnimation(element) {const animation = element.dataset.animation;if (animation) {element.style.animation = animation;}}stopAnimation(element) {element.style.animation = 'none';}
}
最佳实践建议 💡
-
变换使用
- 选择合适的变换方式
- 注意变换顺序
- 设置合适的视角
- 控制动画效果
-
性能优化
- 使用 transform 代替位置改变
- 开启硬件加速
- 避免频繁重排
- 优化动画性能
-
3D 效果
- 合理设置视角
- 注意背面可见性
- 维护 3D 空间
- 控制动画流畅度
写在最后 🌟
CSS Transform 为我们提供了强大的变换能力,合理运用这些特性可以创造出令人印象深刻的视觉效果。
进一步学习资源 📚
- 3D 变换进阶
- 动画优化指南
- 创意效果集合
- 性能优化技巧
如果你觉得这篇文章有帮助,欢迎点赞收藏,也期待在评论区看到你的想法和建议!👇
终身学习,共同成长。
咱们下一期见
💻
相关文章:
CSS系列(9)-- Transform 变换详解
前端技术探索系列:CSS Transform 变换详解 🔄 致读者:探索 CSS 变换的魔力 👋 前端开发者们, 今天我们将深入探讨 CSS Transform,学习如何创建引人注目的 2D 和 3D 变换效果。 2D 变换基础 Ὠ…...
一些浅显易懂的IP小定义
IP归属地(也叫IP地址,IP属地) 互联网协议地址,每个设备上的唯一的网络身份证明。用于确保网络数据能够精准传送到你的设备上。 基于IP数据云全球IP归属地解析,示例Python代码 curl -X POST https://route.showapi.co…...
C 语言动态爱心代码
C 语言动态爱心代码 代码 #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> float f(float x, float y, float z) {float a x * x 9.0f / 4.0f * y * y z * z - 1;return a * a * a - x * x * z * z * z - 9.0f / …...
【Figma_01】Figma软件初始与使用
Figma初识与学习准备 背景介绍软件使用1.1 切换主题1.2 官方社区 设计界面2.1 创建一个项目2.2 修改文件名2.3 四种模式2.4 新增界面2.5 图层2.6 工具栏2.7 属性栏section透明度和圆角改变多边形的边数渐变效果描边设置阴影等特效拖拽相同的图形 背景介绍 Ul设计:User Interfa…...
【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
文章目录 PyQt5 超详细入门级教程前言序篇:1-3部分:PyQt5基础与常用控件第1部分:初识 PyQt5 和安装1.1 什么是 PyQt5?1.2 在 PyCharm 中安装 PyQt51.3 在 PyCharm 中编写第一个 PyQt5 应用程序1.4 代码详细解释1.5 在 PyCharm 中运…...
day2 数据结构 结构体的应用
思维导图 小练习: 定义一个数组,用来存放从终端输入的5个学生的信息【学生的信息包含学生的姓名、年纪、性别、成绩】 1>封装函数 录入5个学生信息 2>封装函数 显示学生信息 3>封装函数 删除第几个学生信息,删除后调用显示学…...
CSS 进阶教程:从定位到动画与布局
文章目录 🌟 CSS 进阶教程:从定位到动画与布局🌟 目录🌟 1. 定位**Static(默认定位)****Relative(相对定位)****Absolute(绝对定位)****Fixed(固定…...
Nginx性能优化全方案:打造一个高效服务器
Nginx性能优化全方案:打造一个高效服务器 调整工作进程数和线程数调整工作进程数调整线程数 启用Gzip压缩安装Gzip模块配置Gzip压缩 配置缓存策略配置浏览器缓存时间配置代理服务器缓存时间 优化文件访问方式使用sendfile()函数发送文件数据启用sendfile_max_chunk和…...
详解Maven的setting配置文件中mirror和repository的区别
在Maven的setting中,我们常常会用到mirror和repository配置,其中mirror是镜像的意思,而repository则是仓库的意思,它们两者都可以改变maven下载项目以来jar包的地址。 仓库(repository) repository就是个…...
框架模块说明 #07 API加密
背景 在实际开发过程中,我们通常会涉及到数据加密的问题。本文重点探讨两个方面:一是外部接口调用时的数据加密,二是服务间调用的数据加密与解密。 对于外部接口调用,每个用户将拥有独立的动态 AES 加密密钥(KEY&…...
安卓BLE蓝牙开发经验分享
注意点一:一开始必须申请权限,否则后面根本无法成功。 注意点二:BLE使用向某个特征写入来发送数据,写入一次默认长度是23字节,必须向蓝牙设备申请更大字节的写入才能发送更多字节。(23字节是BLE通信的最小…...
后缀表达式有什么场景应用
后缀表达式(Reverse Polish Notation, RPN)在多个领域中有广泛的应用,主要由于其简洁性和易于计算机处理的特点。以下是一些主要的应用场景: ### 1. **编译器和解释器** 后缀表达式在编译器和解释器中用于表达式求值。由于后缀表…...
使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)
文章目录 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构Redis 主从架构部署 (1.yaml)Redis Sentinel 部署 (2.yaml)Sentinel 服务暴露 (3.yaml)部署步骤总结 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构 本文将详细介绍如何在 Kubernetes 中部署 Redis …...
AI开发 - 用GPT写一个GPT应用的真实案例
就在昨天,我的同事推荐给我了一个第三方的公共大模型API,这个API集合了国际上上几乎所有知名的大模型,只需要很少的费用,就可以接入到这些大模型中并使用它们。成本之低,令人乍舌!包括我们现在无法试用的 G…...
C#—索引器
C#—索引器 索引器(Indexer)是类中的一个特殊成员,它能够让对象以类似数组的形式来操作,使程序看起来更为直观,更容易编写。索引器与属性类似,在定义索引器时同样会用到 get 和 set 访问器,不同…...
杨振宁大学物理视频中黄色的字去掉(稳定简洁版本,四)
杨振宁大学物理1214 色带矩形带来很大麻烦! 今天想到一个方法,整个色带矩形拉通,做个通铺处理,不计算,代码做最小化,最稳定追求。 因为黄色字稳定,我们找到他的中心,而这个色带矩形…...
排序算法(5):归并排序
问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 归并排序 归并排序采用分治法,将序列分成若干子序列,每个子序列有序后再合并成有序的完整序列。 在数组排序中,如果只有一个数,那么它本身就是有序的。如果有两个数࿰…...
Gate学习(7)引入体素源
一、从GitHub下载体素源模型源码 下载地址:BenAuer2021/Phantoms-for-Nuclear-Medicine-Imaging-Simulation:用于核医学成像应用的模型(闪烁显像、SPECT 和 PET) --- BenAuer2021/Phantoms-For-Nuclear-Medicine-Imaging-Simulat…...
2024.12.14 TCP/IP 网络模型有哪几层?
2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…...
item2 for macos
安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh,所以不用安装,10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…...
宇视出入口相机抓拍调试速成方法
宇视出入口相机抓拍调试速成方法一、背景概述智慧园区、停车场等场景已普及宇视出入口抓拍相机,用于车辆出入管控与车牌识别。现场易受光照、车速、车道环境等影响,常出现漏抓、识别率低、画面模糊等问题。传统调试无标准、耗时长、上手门槛高࿰…...
初创公司技术选型时为何将Taotoken作为大模型统一接入层
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司技术选型时为何将Taotoken作为大模型统一接入层 对于初创公司的技术负责人而言,在构建基于大模型的应用时&…...
私有化视频会议平台/视频高清直播点播EasyDSS构建智慧校园音视频协作新生态
在教育数字化转型的关键阶段,智慧校园对音视频协作系统的需求,已从基础的远程沟通,升级为安全可控、体验流畅、管理智能的一体化解决方案。视频直播点播平台EasyDSS凭借技术创新与场景深耕,成为智慧校园建设的核心支撑,…...
STM32F429实时IIR滤波避坑指南:arm_biquad_cascade_df1_f32的群延迟与状态缓存管理
STM32F429实时IIR滤波工程实践:群延迟补偿与状态缓存优化策略 在嵌入式信号处理领域,实时滤波是许多应用的核心需求。当我们在STM32F429平台上使用arm_biquad_cascade_df1_f32函数实现IIR滤波时,会遇到两个关键挑战:群延迟对实时性…...
GHelper:华硕笔记本性能调优的轻量级革命
GHelper:华硕笔记本性能调优的轻量级革命 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbook, RO…...
AhabAssistantLimbusCompany终极指南:10分钟快速掌握智能自动化技巧
AhabAssistantLimbusCompany终极指南:10分钟快速掌握智能自动化技巧 【免费下载链接】AhabAssistantLimbusCompany AALC,PC端Limbus Company小助手。AALC,Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mirrors/ah/Aha…...
终极指南:免费实现Zwift离线骑行模拟的完整方案
终极指南:免费实现Zwift离线骑行模拟的完整方案 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline 想要在没有网络连接的情况下享受Zwift专业骑行训练吗?Zwift-Offline开源项目为你提…...
Real-ESRGAN终极指南:5分钟掌握AI图像超分辨率技术,让模糊照片秒变高清
Real-ESRGAN终极指南:5分钟掌握AI图像超分辨率技术,让模糊照片秒变高清 【免费下载链接】Real-ESRGAN Real-ESRGAN aims at developing Practical Algorithms for General Image/Video Restoration. 项目地址: https://gitcode.com/gh_mirrors/re/Real…...
从CubeMX到AD:为你的STM32F4项目创建‘带注释’原理图符号的完整指南
从CubeMX到AD:打造STM32F4项目专属原理图符号的工程实践 在嵌入式硬件开发中,原理图符号的清晰度直接影响着团队协作效率和后期维护成本。许多工程师都曾遇到过这样的困境:面对一个标准STM32芯片符号,需要反复查阅数据手册才能确认…...
Co-IP/MS:蛋白免疫共沉淀质谱分析服务
免疫共沉淀质谱法(Co-IP/MS)是一种由免疫共沉淀技术联用质谱技术的蛋白互作研究技术,具备高分辨率鉴定和精确定量蛋白质复合物中每个组分的优势。Co-IP/MS使用靶向目标蛋白的特异性抗体,选择性地捕获目标蛋白质与其相互作用的分子…...
