前言

之前写的 W3Schools 学习笔记 (3) – CSS 2D Transforms. 这篇作为整理.

参考:

Youtube – Learn CSS Transform In 15 Minutes

Demo Structure

<div class="frame"></div>
<div class="box">Box1</div>

一个作为框, 这样变化的时候可以对比.

CSS Style

.frame,
.box {
position: absolute;
top: 50px;
left: 50px;
width: 200px;
height: 200px;
}
.frame {
border: 1px solid black;
}
.box {
background-color: pink;
display: flex;
justify-content: center;
align-items: center;
color: blue;
font-size: 2rem;
}

效果

Rotate

旋转 30°

transform: rotate(30deg);

效果

注意它的轴在中心的位置. 这个是可以改变的哦 (下面会说到)

Scale

transform: scale(0.8);

1.0 是原 size, 0.8 (< 1) 是缩小. > 1 是放大.

注意它的轴在中心的位置. 往中心点缩放 (下面会说到).

transform-origin

这个就是控制轴心的. 适用于 rotate 和 scale. translate 就没差 (效果都一样)

transform: rotate(30deg);
transform-origin: top left;

top left 表示方位 vertical horizontal (y, x).

分别是, top left, top center, top right 的效果. 红色圈就是所谓的 origin. 可以看出来不同 origin 旋转的效果就不一样了.

scale 也是同一个逻辑

transform: scale(1.3);
transform-origin: 50px 150px;

做地图缩放通常会用到第 3 个.

Translate

transform: translate(50px, 20px);

horizontal, vertical (x, y)

它和 origin 没有什么关系, 因为不管在那个点移动都是一样的.

use percent

transform: translate(50%, 50%);

它会依据 width 和 height 计算出 percent, 效果:

居中

想实现的效果是 Hello World 在正中间.

HTML 结构

<div class="container">
<img src="./images/tifa2.PNG" />
<h1>Hello World</h1>
</div>

不使用 background-image

img {
width: 100%;
height: 100%;
object-fit: cover;
} .container {
width: 400px;
height: 250px;
position: relative;
} h1 {
position: absolute;
top: 50%;
left: 50%;
color: white;
}

让 h1 绝对定位. top:50%, left 50% 这样就去到中间了.

但是过龙了. 通过 translate 把它桥回来.

transform: translate(-50%, -50%);

效果

Single Property

参考: web.dev – Finer grained control over CSS transforms with individual transform properties

由于 transform 是把所有调整放在一个值上, 当我们想要单独调整 transform 中的其中一个时就很麻烦.

目前的 solution 是通过 CSS Variable.

transform: scale(var(--scale)) translateX(var(--translateX))

这样就可以单独修改某个 variable 来达成效果.

但最新的 CSS 语法已经开始支持单独属性了.

比如 : translate, scale, rotate

modern browser 都支持, 包括 Safari IOS 14.5 (大约 iPhone 7) 就支持了, for 旧的 browser PostCSS 虽然有 plugin 可以做转换, 但这个是 7 years ago 的, 不建议使用了.

Single Property vs Transform

参考: How They Fit Together: Transform, Translate, Rotate, Scale, and Offset

Single Property 并不能完全取代 Transform 的功能.

1. Transform 的顺序是依据我们定义的顺序执行的. 但是 Single Property 是固定的 translate > rotate > scale

2. Transform 内可以重复定义, 但是 Single Property 只能定义一次.

总的来说 Transform 是一组有序的操作. 它就挨个挨个执行. 重复也可以

Single Property 则只可以定义 translate, rotate, scale 一次, 然后它按原本的顺序执行一轮.

冷知识 – Transform, Opacity 也会让元素飘起来

CSS – Transform的更多相关文章

  1. No.3 - CSS transition 和 CSS transform 配合制作动画

    课程概述 作业提交截止时间:09-01 任务目的 深度理解掌握 transition-timing-function 以及它的意义 学会配合使用 CSS transform 和CSS transiti ...

  2. CSS Transform / Transition / Animation 属性的区别

    back21 Jun 2011 Category: tech Tags: css 最近想UI的动画转到css3能吃进3d加速的属性上面来以加强动画的连贯性.只是对于css几个新加的属性不太熟悉,常常容 ...

  3. Html CSS transform matrix3d 3D转场特效

    Html CSS transform matrix3d 3D转场特效 透视矩阵 2n/(r-l) 0 (r+l)/(r-l) 0 0 2n/(t-b) (t+b)/(t-b) 0 0 0 (n+f)/ ...

  4. css: transform导致文字显示模糊

    css: transform导致文字显示模糊 有人认为模糊的原因是:"transform时div的宽度或者高度并不是偶数,偏移 50% 之后,像素点不是整数,和显示像素没有对上". ...

  5. CSS Transform完全指南 #flight.Archives007

    Title/ CSS Transform完全指南 #flight.Archives007 序: 第7天了! 终身学习, 坚持创作, 为生活埋下微小的信仰. 我是忘我思考,共同进步! 简介: 一篇最简约 ...

  6. CSS Transform完全指南(第二版) #flight.Archives007

    Title/ CSS Transform完全指南(第二版) #flight.Archives007 序: 第7天了! 终身学习, 坚持创作, 为生活埋下微小的信仰. 我是忘我思考,共同进步! 简介: ...

  7. CSS Transform让百分比宽高布局元素水平垂直居中

    很早以前了解过当元素是固定宽度和高度的时候,水平垂直高居中的方法可以设置margin的负值来使其居中,这个负值是元素的宽和高的一半,比如宽高是100px,那么就用margin-left:-50px;m ...

  8. CSS Transform Style

    As CSS3 developing quickly, the transform style can be written conviently. I find that it is an inte ...

  9. CSS transform中的rotate的旋转中心怎么设置

    transform-origin属性 默认情况,变形的原点在元素的中心点,或者是元素X轴和Y轴的50%处.我们没有使用transform-origin改变元素原点位置的情况下,CSS变形进行的旋转.移 ...

  10. CSS+transform画动态表情

    先给大家看下画完后是什么样子: 代码看这里: html代码: <body> <div class="emoji emoji_like"> <div c ...

随机推荐

  1. 实用!一键生成数据库文档的神器,支持MySQL/SqlServer/Oracle多种数据库

    Screw(螺丝钉)是一款简洁好用的数据库表结构文档生成工具,它的特点是:简洁.轻量.设计良好.多数据库支持.多种格式文档.灵活扩展以及支持自定义模板,对于有经常要进行数据库设计.评审.文档整理等需求 ...

  2. 「Pygors跨平台GUI」2:安装MinGW-w64、MSYS2还是WSL2

    「Pygors系列」一句话导读: MinGW-w64只有编译器,MSYS2带着更新环境,WSL2实用性比较高 历史与渊源   Windows平台 Linux平台 二进制兼容 WSL2:运行Linux程 ...

  3. 1.1 第一个hello程序

    还记得在每一个编程平台上的第一个程序都是hello world,现在就以这个程序为载体,先浅聊一下计算机系统吧. 1.预处理阶段,预处理器cpp根据字符#开头的命令修改原始的程序,并把头文件里的内容直 ...

  4. JS实现复制粘贴图片

    最近在开发公司的可视化编辑器应用, 同事们提了一个需求, 即可以直接复制图片到编辑器中粘贴, 生成对应的图片组件. 因为传统的点击上传太麻烦, 得先把图片保存到本地, 然后再回到编辑器点击上传, 选择 ...

  5. Python 使用rsa类库基于RSA256算法生成JWT

    JWT简介 JWT(Json web token),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.JWT提供了一种简单.安全的身份认证方法,特别适合分布式站点单点登录.或者是签名. ...

  6. Linux安装软件命令详解

    Linux安装软件命令详解 目录 一.deb包的简介.安装及卸载步骤 二.rpm包的简介.安装及卸载步骤 三.AppImage包的简介.执行步骤 四.tar.gz.tar.bz2源代码包的简介.安装及 ...

  7. Google搜索居然也搞言论封锁

    昨天的一个blog: https://www.cnblogs.com/devilmaycry812839668/p/18334275 居然被Google搜索封禁了: 老美,你的言论自由呢???怎么到了 ...

  8. python进程绑定CPU的意义

    1. 绑定CPU后对计算密集型的任务可能会一定程度上提升运算性能:(小幅度的性能提升,甚至小幅度落后,总之就是差别不大) 对比1代码A: import os from multiprocessing ...

  9. mybatis升级为mybatis-plus

    1.背景 为了快速开发,需要把之前的老项目升级为mybatis-plus 2.步骤 步骤一:导入jar包 <dependency> <groupId>com.baomidou& ...

  10. oracle执行报错 ORA-01722: 无效数字

    1.背景 执行Oracle存储过程时报错:ORA-01722: 无效数字 2.错误描述 1.对于两个类型不匹配,一个数字类型,一个非数字类型的值进行赋值操作;2.两个类型不匹配的值进行比较操作,比如一 ...