首页 > 其他分享 >CSS基础-3D变形

CSS基础-3D变形

时间:2023-08-30 09:47:53浏览次数:51  
标签:变形 30deg transform 旋转 height 3D CSS 200px

Untitled.png

今天介绍 两种 3D变形的形式:3D旋转、空间位移。

3D旋转

在上一节 2D变形中, 我们用到了 transform  属性。那么在3D旋转中同样还是这个属性(怎么老是它,手动狗头)。

rotateX() 函数来给 transform  属性赋值,即可实现元素标签绕X(横)轴3D旋转。

语法

// 绕横轴(盒子X轴中心线 旋转 30 度)
transform: **rotateX**(30deg)

rotateY() 函数来给 transform  属性赋值,即可实现元素标签绕Y(横)轴3D旋转。

语法

// 绕纵轴(盒子Y轴中心线 旋转 30 度)
transform: **rotateY**(30deg)

rotateZ() 函数来给 transform  属性赋值,即可实现元素标签绕Z(竖)轴3D旋转。

语法

// 绕纵轴(盒子Y轴中心线 旋转 30 度)
transform: **rotateZ**(30deg)

如果只用单独的transform 和 一个空间旋转函数 来做,可能视觉上并不能达到要求。

举例

Untitled 1.png

红色部分就是 box1 , 其实它是一个正方形,当我们 设置了 X轴旋转后,它看起来像一个 长方形, 其实这是因为 旋转造成的, 而网页又是一个平面,我们看不到旋转到里面的那一部分,所以呈现出来的就是一个长方形。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=<device-width>, initial-scale=1.0" />
    <title>Document</title>

    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .box1 {
        width: 200px;
        height: 200px;
        background-color: red;
        transform: rotateX(30deg);
      }
      .parentBox {
        width: 200px;
        height: 200px;
        border: 1px orange solid;
        margin: auto;
      }
    </style>
  </head>
  <body>
    <div class="parentBox">
      <div class="box1"></div>
    </div>
  </body>
</html>

如果想看出是旋转的样子,还需要一个属性配合, 那就是 perspective

perspective

perspective 表示 观察者(人)到 平面元素的 距离。值越大,表示距离平面元素越远。

配合 transform 如下

Untitled 2.png
举例

实现 子元素 沿X轴旋转 30度。

Untitled 3.png

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=<device-width>, initial-scale=1.0" />
    <title>3D旋转示例</title>

    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .box1 {
        width: 200px;
        height: 200px;
        background-color: red;
        transform: rotateX(30deg);
      }
      .parentBox {
        width: 200px;
        height: 200px;
        border: 2px green solid;
        margin: auto;
        margin-top: 10px;
        perspective: 300px;
      }
    </style>
  </head>
  <body>
    <div class="parentBox">
      <div class="box1"></div>
    </div>
  </body>
</html>

元素可以同时绕多个轴旋转,例如 绕X轴旋转30度,绕Y轴旋转30度。

Untitled 4.png

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=<device-width>, initial-scale=1.0" />
    <title>3D旋转示例1</title>

    <style>
      * {
        margin: 0;
        padding: 0;
      }
      .box1 {
        width: 200px;
        height: 200px;
        background-color: red;
        transform: rotateX(30deg) rotateY(30deg);
      }
      .parentBox {
        width: 200px;
        height: 200px;
        border: 2px green solid;
        margin: auto;
        margin-top: 10px;
        perspective: 300px;
      }
    </style>
  </head>
  <body>
    <div class="parentBox">
      <div class="box1"></div>
    </div>
  </body>
</html>

空间位移

当元素发生 3D旋转后,就可以进行空间位移。注意 一定要是发生旋转后,才可以看出位移效果,否则就和2D平面位移没啥区别了。

用 translateX()、 translateY()、translateZ() 给 transform 赋值,就可以分别 发生三个方向X轴,Y轴,Z轴方向的移动。三个位移函数接收参数支持长度单位。

语法

// 发生3D旋转后, 才能看出3D效果
// 可以同时发生多个方向位移
transform: rotateX(30deg) translateX(30px) translateY(30px);

举例

一个元素, 在X轴方向发生30px距离的位移, 在Y轴方向发生30px的位移。效果如下

Untitled 5.png

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>空间位移</title>
    <style>
      p {
        width: 200px;
        height: 200px;
        background-color: orange;
      }
      .box1 {
        width: 202px;
        height: 202px;
        border: 1px solid black;
        perspective: 300px;
      }

      .box1 p {
        transform: rotateX(30deg) translateX(30px) translateY(30px);
      }
    </style>
  </head>
  <body>
    <div class="box1">
      <p></p>
    </div>
  </body>
</html>

标签:变形,30deg,transform,旋转,height,3D,CSS,200px
From: https://www.cnblogs.com/haloujava/p/17666413.html

相关文章

  • CF1833D Flipper 题解
    赛场上思路出来了但是代码没调出来。首先考虑右端点,很明显,要让操作后的序列字典序尽量地大,那么就要使操作后的序列第一个数尽量地大,考虑\(n\)或\(n-1\),如果\(n\)在原序列的第一个位置,那么此时无论怎么调整都无法使得它在新序列的第一个位置,此时就要考虑让\(n-1\)在新序列......
  • tailwindcss -原子化 CSS 框架
    原子化CSS框架我记得很久之前有时候为了少写些css,我们通常会有如下的样板代码.block{display:block;}.flex{display:flex}.flex-center{align-items:center;justify-content:center;}.w1{width:1%;}/*1...100*/.w100{width:100%;}......
  • Learning Auxiliary Monocular Contexts Helps Monocular 3D Object Detection (2)
    Featurebackbone采用DLA,输入维度为3×H×W的RGB图,得到维度D×h×w的特征图F,然后将特征图送入几个轻量级regressionheads,2Dboudingboxes的中心特征图用下面的模块得到:其中AN是AttentiveNormalization.用公式表示:类似的,2D和3Dboudingboxes的中心之间的offset用公......
  • 移动端/H5/rem 开发,使用lib-flexible 和 postcss-pxtorem适应不同分辨率
    一、安装 1.直接使用npm包管理工具进行下载npminstalllib-flexible--savenpminstallpostcss-pxtorem--save*如果报错:“Error:PostCSSpluginpostcss-pxtoremrequiresPostCSS8.”报错的意思是postcss-pxtorem为8.0,但实际上官网最新版本为6.0(有可能是6.0版本与v......
  • CSS 添加上标
    CSS添加上标心彻关注IP属地:浙江2016.01.2014:37:46字数184阅读10,017有两种方式:一、添加上标元素1、使用<sup>元素1.1、HTML代码:<span>好好学习,天天向上<sup>热</sup></span>1.2、CSS代码:无需CSS代码。1.3、效果图:好好学习,天天向上热2、使用vertical-align的super......
  • px转rem适配方案之postcss-pxtorem
    一、安装npminstallpostcss-pxtorem--save-dev二、增加postcss.config.js文件在目录文件下增加postcss.config.js并添加相关配置//https://github.com/michael-ciniawsky/postcss-load-configmodule.exports={'plugins':{//toedittargetbrowsers:use......
  • 木马样本分析: 99b02a32a9d92c521de94a53dcd93078a357d0e2f26fdeb57735a53fee9b60fa,一
    csharp的类:usingSystem;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Windows.Forms;//Token:0x02000009RID:9publicsealedclass\u0006:Form{ //Token:0x06000013RID:19RVA:0x00002464FileOffset:0x00000664 public\u0006......
  • CSS-04
    浮动浮动是改变元素在文档流(元素默认从上往下布局的方式就叫文档流)中的规则,让元素可以在水平方向上进行排版float:left/right<head><styletype="text/css">img{float:left;}</style></head><body><p&......
  • 论文解读 | OmniObject3D:用于逼真感知、重建和生成的大词汇量3D对象数据集
    原创|文BFT机器人这篇论文的主要目标是介绍和探索OmniObject3D数据集,该数据集包含大量真实扫描的3D物体,涵盖了190个类别,提供了多种丰富的注释,包括纹理3D网格、采样点云、多视图图像等。作者将OmniObject3D应用于多个3D视觉任务,包括交叉场景的新视角合成、神经表面重建和3D物体生......
  • 记录--怎么实现一个3d翻书效果
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助本篇主要讨论以下两种翻书动画的实现:第一种是整页翻转的效果:这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性实现。第二种折线翻转的效果,如下图所示:主要是通过计算页面翻折过来的位置。这两种......