【CSS】变换

news2024/11/18 0:49:16

  • 空间概念
  • translate ( 平移 )
  • rotate ( 旋转 )
  • scale ( 缩放 )
  • skew ( 倾斜 )
  • 案例( 六面骰子、旋转照片)

空间概念

三维空间坐标 ( XYZ )

在这里插入图片描述
在这里插入图片描述

透视 ( perspective) 距离 ( 视距 ) d,近大远小,观众面向组件的距离

在这里插入图片描述

没有使用 transform-origin 改变元素基点 位置的情况下,transform 进行的 rotatetranslatescaleskew 等操作 都是以元素自己中心位置 进行变化的。transform-origin 并不是 transform 中的属性值,跟其他的 css3 属性一样, 需要在不同的浏览内核中加上相应的前缀 。组合 同时使用多个 转换,综合使用这几个 用法其格式为 transform: translate() rotate() scale(); 变形的 顺序从左到右 依次进行,顺序会影响到转换的效果(先旋转会改变坐标轴方向

translate ( 平移 )

<style>
	.box{
		margin: 50px 0 0 50px;
		/* 设置容器元素的透视距离(视距),用于创建3D变换效果(近大远小,观众面向组件的距离) */
		perspective: 1000px;
		/* 子元素开启立体空间(flat默认不开启),控制子元素是否开启三维立体环境 */
		transform-style: preserve-3d;
	}

	.translateX,.translateY,.translateZ,.translate3D,
	.translate2D
	{
		width: 200px;height: 200px;color: #0000ff;float: left;
		background-image: url("./day5/xmm.jpg");background-size: cover;
		border-radius: 20px;transition: transform 1.5s; /* 过渡 */
	}

	.clear{
		content: "";
		display: table;
		clear: both;
	}

	.translateX:hover{
		transform: translateX(150px); /* 沿 X 轴方向移动 */
	}
	.translateY:hover{
		transform: translateY(180px); /* 沿 Y 轴方向移动 */
	}
	.translateZ:hover{
		transform: translateZ(-700px); /* 沿 Z 轴方向移动 */
	}
	.translate2D:hover{
		transform: translate(150px,150px); /* 沿 XY交叉 点方向移动 */
	}
	.translate3D:hover{
		transform: translate3d(50px, 50px, 230px); /* 3d的平移效果,用 2d平移 + 缩放 也可达到类似效果 */
	}
</style>
<div class="box clear">
	<!-- X轴正数向右,Y轴正数向下,Z轴正数指向屏幕面前的我 -->
	<div class="translateX">translate平移X</div>
	<div class="translateY">translate平移Y</div>
	<div class="translateZ">translate平移Z</div>
	<div class="translate2D">translate平移2D</div>
	<div class="translate3D">translate平移3D</div>
</div>

效果:

在这里插入图片描述

rotate ( 旋转 )

<style>
	.box{
		margin: 50px 0 0 50px;
		/* 设置容器元素的透视距离(视距),用于创建3D变换效果(近大远小,观众面向组件的距离)*/
		perspective: 1000px;
		/* 子元素开启立体空间(flat默认不开启),控制子元素是否开启三维立体环境 */
		transform-style: preserve-3d;
	}

	.rotate3D-X,.rotate3D-Y,.rotate3D-Z,.rotate3D,
	.rotate3D-X-jzd,.rotate3D-Y-jzd,.rotate3D-Z-jzd
	{
		width: 170px;height: 170px;color: #0000ff;border-radius: 20px;
		background-image: url("./day5/xmm.jpg");background-size: cover;
		float: left;transition: transform 1.5s; /* 过渡 */
		transform: rotate(0deg); /* 初始状态下不旋转 */
	}

	.clear{
		content: "";
		display: table;
		clear: both;
	}

	/* 以元素的中心点为基准点进行变形,transform-origin属性,可以改变变形的基准点(left、right、center、top、bottom)*/

	.rotate3D-X:hover{
		transform: rotatex(-180deg);  /* 绕 X 轴旋转 180 度 */
	}
	.rotate3D-Y:hover{
		transform: rotateY(180deg);  /* 绕 Y 轴旋转 180 度 */
	}
	.rotate3D-Z:hover{
		transform: rotateZ(180deg);  /* 绕 Z 轴旋转 180 度 */
	}
	.rotate3D:hover{
		transform: rotate3d(1, 1, 0, 180deg);  /* 沿着自定义轴 (X, Y, Z) 旋转 180 度 */
	}

	.rotate3D-X-jzd{
		transform-origin: bottom; /* 改变 X 轴基准点 */
	}
	.rotate3D-X-jzd:hover{
		transform: rotatex(-180deg);  /* 绕 X 轴旋转 180 度 */
	}

	.rotate3D-Y-jzd{
		transform-origin: right; /* 改变 Y 轴基准点 */
	}
	.rotate3D-Y-jzd:hover{
		transform: rotateY(-180deg);  /* 绕 Y 轴旋转 180 度 */
	}

	.rotate3D-Z-jzd{
		transform-origin: right bottom; /* 改变 Z 轴基准点 */
	}
	.rotate3D-Z-jzd:hover{
		transform: rotateZ(180deg);  /* 绕 Z 轴旋转 180 度 */
	}
</style>
<div class="box clear">
	<!-- 正角度为顺时针,负角度为逆时针( Y轴从下往上看,X轴从右往左看,Z轴正视前方看) -->
	<div class="rotate3D-X">rotate旋转3D-X</div>
	<div class="rotate3D-Y">rotate旋转3D-Y</div>
	<div class="rotate3D-Z">rotate旋转3D-Z</div>
	<div class="rotate3D">rotate旋转3D</div>
	<div class="rotate3D-X-jzd">rotate旋转3D-X不同基准点</div>
	<div class="rotate3D-Y-jzd">rotate旋转3D-Y不同基准点</div>
	<div class="rotate3D-Z-jzd">rotate旋转3D-Z不同基准点</div>
</div>

效果:
在这里插入图片描述

scale ( 缩放 )

<style>
	.box{
		margin: 50px 0 0 50px;
		/* 设置容器元素的透视距离(视距),用于创建3D变换效果(近大远小,观众面向组件的距离) */
		perspective: 1000px;
		/* 子元素开启立体空间(flat默认不开启),控制子元素是否开启三维立体环境 */
		transform-style: preserve-3d;
	}

	.scaleX,.scaleY,.scaleZ,.scale3D,.scale2D
	{
		width: 200px;height: 200px;color: #0000ff;border-radius: 20px;
		background-image: url("./day5/xmm.jpg");background-size: cover;
		float: left;transition: transform 1.5s; /* 过渡 */
	}

	.clear{
		content: "";
		display: table;
		clear: both;
	}

	/* 因为Z轴是指向观众的,在缩放条件下,Z方向它变大和变小我们都不易观察到效果。所以3d的缩放效果配合3d旋转效果rotate展示 */

	.scaleX:hover{
		transform: scaleX(1.5); /* 在 X 轴方向缩放 1.5 倍 */
	}
	.scaleY:hover{
		transform: scaleY(1.5); /* 在 Y 轴方向缩放 1.5 倍 */
	}
	.scaleZ:hover{
		transform: scaleZ(5) rotateY(45deg); /* 在 Z 轴方向缩放 1.5 倍 */
	}
	.scale2D:hover{
		transform: scale(1.5,1.5); /* 在 XY 轴方向分别缩放 1.5 1.5 倍 */
	}
	.scale3D:hover{
		transform: scale3d(1.5,1.5,1.5) rotate3d(0.5,0.5,0,45deg); /* 在 XYZ 轴方向分别缩放 1.5 1.7 1.5 倍 */
	}
</style>
<div class="box clear">
	<!-- 定义倍数缩放:  >1 放大    <1 缩小    默认值是 1 (为负值表示先翻转后缩放 ) -->
	<div class="scaleX">scale缩放X</div>
	<div class="scaleY">scale缩放Y</div>
	<div class="scaleZ">scale缩放Z</div>
	<div class="scale2D">scale缩放2D</div>
	<div class="scale3D">scale缩放3D</div>
</div>

效果:

在这里插入图片描述

skew ( 倾斜 )

<style>
	.box{
		margin: 50px 0 0 50px;
		/* 设置容器元素的透视距离(视距),用于创建3D变换效果(近大远小,观众面向组件的距离) */
		perspective: 1000px;
		/* 子元素开启立体空间(flat默认不开启),控制子元素是否开启三维立体环境 */
		transform-style: preserve-3d;
	}

	.skewX-z,.skewX-f,.skewY-z,.skewY-f,
	.skewXY
	{
		width: 200px;height: 200px;color: #0000ff;border-radius: 20px;
		background-image: url("./day5/xmm.jpg");background-size: cover;
		float: left;transition: transform 1.5s; /* 过渡 */
	}

	.clear{
		content: "";
		display: table;
		clear: both;
	}

	.skewX-z:hover{
		transform: skewX(30deg);
	}
	.skewX-f:hover{
		transform: skewX(-30deg);
	}
	.skewY-z:hover{
		transform: skewY(30deg);
	}
	.skewY-f:hover{
		transform: skewY(-30deg);
	}
	.skewXY:hover{
		transform: skew(-30deg,30deg);
	}
</style>
<div class="box clear">
	<div class="skewX-z">skew扭曲X正角度</div>
	<div class="skewX-f">skew扭曲X负角度</div>
	<div class="skewY-z">skew扭曲Y正角度</div>
	<div class="skewY-f">skew扭曲Y负角度</div>
	<div class="skewXY">skew扭曲XY</div>
</div>

效果:

在这里插入图片描述

案例( 六面骰子、旋转照片)

六面骰子

<style>
	body{
		/* 设置容器元素的透视距离(视距),用于创建3D变换效果(方便观察物体在Z轴上的位置变化)*/
		perspective: 9000px;
	}

	.box{
		margin: 180px 150px;width: 150px;height: 150px;
		/* 子元素开启立体空间 */
		transform-style: preserve-3d;
		/* 定位 */
		position: relative;
		/* 调用动画 */
		animation: faceChange 15s linear infinite;
	}

	.one,.two,.three,.four,.five,.six
	{
		width: 150px;height: 150px;line-height: 150px;
		color: rgb(59, 59, 59);text-align: center;
		border-radius: 20px;font-size: 30px;
		/* 相对于父元素定位 */
		position: absolute;
	}

	.one{
		background-color: rgba(250, 4, 4, 0.5);
	}
	.two{
		background-color: rgba(0, 4, 255, 0.5);
		transform-origin: right;
		transform: translateX(-150px) rotateY(-90deg);
	}
	.three{
		background-color: rgba(15, 15, 16, 0.5);
		transform-origin: bottom;
		transform: translateY(-150px) rotateX(90deg);
	}
	.four{
		background-color: rgba(6, 246, 226, 0.5);
		transform-origin: top;
		transform: translateY(150px) rotateX(-90deg);
	}
	.five{
		background-color: rgba(245, 225, 2, 0.5);
		transform: translateZ(-150px) rotateY(180deg);
	}
	.six{
		background-color: rgba(211, 76, 241, 0.5);
		transform-origin: left;
		transform: translateX(150px) rotateY(90deg);
	}

	/* 动画 */
	@keyframes faceChange {
		from{
			transform: rotateY(0deg) rotateX(0deg) rotateZ(0deg);
		}to{
			 transform: rotateY(720deg) rotateX(720deg) rotateZ(720deg);
		 }
	}

	/* 移入效果 */
	.box:hover .one{
		transform: translateZ(50px);
	}
	.box:hover .two{
		left: -50px;
	}
	.box:hover .three{
		top: -50px;
	}
	.box:hover .four{
		top: 50px;
	}
	.box:hover .five{
		transform: translateZ(-200px);
	}
	.box:hover .six{
		left: 50px;
	}
</style>
<div class="box">
	<div class="one">1</div>
	<div class="two">2</div>
	<div class="three">3</div>
	<div class="four">4</div>
	<div class="five">5</div>
	<div class="six">6</div>
</div>

效果:
在这里插入图片描述

旋转照片

<style>
	.bigBox{
		perspective: 5000px;
		width: 800px;
		height: 300px;
		position: relative;
		transform-style: preserve-3d;
		transform: rotateX(0deg);
		transition: transform 1s linear;
	}
	.box{
		position: absolute;
		width: 200px;
		height: 100px;
		left: calc(50% - 100px);
		top: calc(50% - 50px);
		transform-style: preserve-3d;
		animation: run 15s linear infinite; /*animation linear是匀速运动,infinite是无限循环*/

		transform: rotateX(0deg);
	}
	.img{
		position: absolute;
		width: 200px;
		height: 100px;
		background-size: cover;
	}

	/* 因为先旋转了之后自身的坐标轴也会随之转动,所有不同的角度,移出相同的距离就刚好是个圆(由中心向四周散发) */
	.img:nth-of-type(1){
		background-image: url('./day5/xmm.jpg');
		transform: translateZ(350px);
	}
	.img:nth-of-type(2){
		background-image: url('./day5/dlam.jpg');
		transform: rotateY(36deg) translateZ(350px);
	}
	.img:nth-of-type(3){
		background-image: url('./day5/lyf.jpg');
		transform: rotateY(72deg) translateZ(350px);
	}
	.img:nth-of-type(4){
		background-image: url('./day5/myy.jpg');
		transform: rotateY(108deg) translateZ(350px);
	}
	.img:nth-of-type(5){
		background-image: url('./day5/mhw.png');
		transform: rotateY(144deg) translateZ(350px);
	}
	.img:nth-of-type(6){
		background-image: url('./day5/gtl.jpg');
		transform: rotateY(180deg) translateZ(350px);
	}
	.img:nth-of-type(7){
		background-image: url('./day5/ddsm.jpg');
		transform: rotateY(216deg) translateZ(350px);
	}
	.img:nth-of-type(8){
		background-image: url('./day5/btxd.jpeg');
		transform: rotateY(252deg) translateZ(350px);
	}
	.img:nth-of-type(9){
		background-image: url('./day5/gtl.jpg');
		transform: rotateY(288deg) translateZ(350px);
	}
	.img:nth-of-type(10){
		background-image: url('./day5/czmh.jpg');
		transform: rotateY(324deg) translateZ(350px);
	}

	/*这里我们要它旋转360度,那么就不用那么麻烦写关键帧了。开始0  结束360,然后循环即可*/
	@keyframes run{
		0%{
			transform: rotateY(0deg);
		}
		100%{
			transform: rotateY(360deg);
		}
	}

	.bigBox:hover{
		transform: rotateX(-15deg);
	}
</style>
<div class="bigBox">
	<div class="box">
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
		<div class="img"></div>
	</div>
</div>

效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2166911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB案例 | Copula的密度函数和分布函数图

本文介绍各种类型&#xff08;Gaussian、t、Gumbel、Clayton、Frank&#xff09;Copula的密度函数和分布函数图的绘制 完整代码 clc close all clear%% ********************计算Copula的密度函数和分布函数图************************ [Udata,Vdata] meshgrid(linspace(0,1…

到时间没回家又不接电话?如何迅速确定孩子的位置?

当孩子未按时回家且无法通过电话联系时&#xff0c;家长往往会感到焦虑。此时&#xff0c;如何迅速确定孩子的位置成为许多家长迫切需要解决的问题。 利用智能手机定位技术是最常见的方法之一。大多数智能手机都内置GPS定位功能&#xff0c;通过“查找设备”应用&#xff0c;家…

你了解文档透明加密系统吗?介绍7款顶尖文档透明加密软件,热门推荐!

你了解文档透明加密系统吗&#xff1f; 文档透明加密系统&#xff0c;这一神奇的技术利器&#xff0c;正悄然守护着企业的核心机密。 它如同一位隐形的守护者&#xff0c;在你毫无察觉的情况下&#xff0c;对文档进行加密处理&#xff0c;确保数据在存储、传输及使用的全过程…

本地电脑基于nginx的https单向认证和双向认证(自制证书+nginx配置)保姆级

目录 1、背景 2、运行环境 3、工具下载 3.1、OpenSSL下载 3.2、nginx下载 4、制作https证书&#xff1a; 4.1、CA与自签名&#xff1a; 4.2、制作CA根证书&#xff08;公钥&#xff09; 4.3、制作服务端证书&#xff1a; 4.4、制作客户端证书&#xff1a; 4.5、制作…

openEuler 20.03,22.03,24.03一键部署Oracle23ai rpm

Oracle23ai前言 Oracle Database 23ai Free 让您可以充分体验 Oracle Database 的能力,世界各地的企业都依赖它来处理关键任务工作负载。 Oracle Database Free 的资源限制为 2 个 CPU(前台进程)、2 GB 的 RAM 和 12 GB 的磁盘用户数据。该软件包不仅易于使用,还可轻松下载…

智慧体育馆可视化:实时监控与智能管理

利用图扑可视化技术实现对体育馆的实时监控和数据分析&#xff0c;提升运营效率、观众体验和安全管理水平&#xff0c;打造智能化场馆环境。

Tomcat may not be running

一、问题背景 tomcat7运行在JDK1.7上&#xff0c;可启动tomcat&#xff0c;但是停止时报错误&#xff0c;如下&#xff1a; 二、适用条件 JDK1.7/JDK1.8 tomcat7 三、解决方法 1、查找java路径 which java 2、修改文件 找到/usr/lib/jvm/jdk1.7.0_80/jre/lib/security/j…

专业学习|《随机过程》学习笔记(二)(定义、分类及相关过程)

一、随机过程 &#xff08;一&#xff09;随机过程定义 &#xff08;1&#xff09;基本概念 随机过程是随机变量的延伸。 &#xff08;2&#xff09;描述随机过程的方法 &#xff08;3&#xff09;随机过程的分类和举例 &#xff08;4&#xff09;随机过程的数字特征 随机过…

【Python实操】淘宝商品详情数据采集返回并实现可视化处理

开发工具 Python版本&#xff1a;3.6.4 相关模块&#xff1a; DecryptLogin模块&#xff1b; pyecharts模块&#xff1b; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需要的相关模块即可。 数据爬取 既然说了是模拟登录相关的爬…

3519嵌入式如何通过ssh 或者telnet连接嵌入式设备

需求 PC电脑连接嵌入式设备&#xff0c;已经能够连接串口&#xff0c;想要额外连接嵌入式设备&#xff0c;查看终端信息。 尝试了两种方法&#xff1a;1.通过SSH登录(失败) 2.通过telnet登录(成功) 问题描述 1.SSH登录 3519通过网线和串口线连接PC windows&#xff0c;并在…

日本科学家利用AI技术在秘鲁纳斯卡沙漠地区找到303幅古代地画

据法新社24日报道&#xff0c;日本科学家利用 人工智能&#xff08; AI&#xff09;技术在秘鲁纳斯卡沙漠地区新发现了303幅古代地画。相关研究成果已于23日发表在《美国国家科学院院刊》上。 日本山形大学考古学家酒井正人23日在秘鲁首都利马宣布了这一新发现&#xff0c;他表…

JavaScript中的函数function

function 可以将一个函数赋给一个变量&#xff0c;直接调用 或者常规的有变量名的函数 break:打断循环 continue:打断当前循环&#xff0c;进行下一轮 debugger:调试程序自动断点 "use strict":严格模式 var hasStrictMode(function(){"use strict";r…

langchain 记忆力(memory),让语言大模型拥有记忆

1&#xff0c;简介 存储对话历史中的信息的能力称之为’记忆‘&#xff0c;这种工具可以单独使用&#xff0c;也可以无缝的集成到一条链中,记忆的存储长度是程序执行到结束&#xff0c;执行一次的所有记忆。 记忆的主要应用场景就是聊天机器人&#xff0c;聊天机器人的一个关键…

Golang | Leetcode Golang题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; func levelOrder(root *Node) (ans [][]int) {if root nil {return}q : []*Node{root}for q ! nil {level : []int{}tmp : qq nilfor _, node : range tmp {level append(level, node.Val)q append(q, node.Children...)}ans append(a…

误删回收站的文件怎么恢复正常,不小心删除回收站的文件怎么找回

现如今&#xff0c;电脑在工作中承担着很重要的角色&#xff0c;里面往往存储着很多重要的工作资料文件&#xff0c;而回收站作为电脑对数据文件的最后保护&#xff0c;往往能够避免数据文件的丢失。下面就给大家详细讲解有关&#xff0c;误删回收站的文件怎么恢复&#xff0c;…

AI日常绘画【国庆海报】:盛世迎华诞,最强AI绘图大模型Flux国庆节海报制作教程

大家好&#xff0c;我是画画的小强 马上就要到祖国母亲的节日了&#xff0c;想想心里都美滋滋的&#xff0c;终于可以放松一下了。相信AI绘画关于国庆主题肯定也会精彩纷呈吧&#xff0c;今天和大家分享几组关于国庆海报的制作教程。 本文使用基于Flux的相关Lora模型。 Loar1…

Docker快速部署RabbitMq教程

1、拉取RabbitMQ镜像 docker pull rabbitmq:management RabbitMQ Management 插件为 RabbitMQ 提供了一个基于 Web 的用户界面&#xff08;Management UI&#xff09;&#xff0c;允许你通过浏览器来监控、管理 RabbitMQ 实例。 因为docker默认是使用的是Docker Hub的官方镜…

Matlab进阶绘图第69期—同步坐标图

同步坐标是指将同一figure上的两个或两个以上的子图&#xff0c;用相同的X轴、Y轴或XY轴表示&#xff0c;以方便同步分析。 话不多说&#xff0c;先来看一下同步坐标图的成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请…

RocketMQ 常用命令mqadmin与控制面板

使⽤发送和接收消息验证MQ 验证生产者&#xff1a; 配置 nameserver 的环境变量 &#xff0c;在发送/ 接收消息之前&#xff0c;需要告诉客户端 nameserver 的位置。配置环境变量 NAMESRV_ADDR &#xff1a; vim /etc/profileexport NAMESRV_ADDR"192.168.136.66:9876;1…

虚幻引擎第三人称和第一人称任意切换

虚幻引擎想要在第三人称和第一人称之间任意切换 , 就需要创建两个摄像机 第一人称摄像机 默认激活 去掉勾选 然后添加一个增强输入 双击进去绑定 设置成已按下 , 这样长按只会生效一次 打开第三人称事件图表 , 按如图所示设置即可 , 记得设置第一人称用控制器旋转Yaw , 这…