热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

CSS3之2D与3D变换

css3实现了对元素执行2D平面变换,以及视觉上的3D空间变换,2D变换平时可能用的较多,3D效果也

目录

css3实现了对元素执行2D平面变换,以及视觉上的3D空间变换,2D变换平时可能用的较多,3D效果也能锦上添花;

关于坐标轴

初中数学的几何学里我们便开始接触坐标轴,最基本的是平面直角坐标系 XoY ,然后延伸出空间直角坐标系 XYZ ,现在我们来说一下css中的坐标系;

css甚至一下设备相关的开发中,基本都遵循这样一套坐标系:以手机屏幕为例,坐标系 圆点 位于屏幕最左上角; x轴 水平,向右为正方向; y轴 垂直,向下为正方向; z轴 垂直于整个屏幕平面,向外为正方向,就是屏幕光线射向你眼睛的方向;

如图:

CSS3之2D与3D变换

2D变换

包括平移 translate() ,旋转 rotate() ,缩放 scale() ,倾斜 skew() ,矩阵 matrix()

translate(x,y)

平移操作,包括 translateX(x) , translateY(y) ,括号内填平移参数值,可以是负值,即反方向;

例如:

div {
    /*元素向右平移50px,向下移60px*/
    transform: translateX(50px);
    transform: translateY(60px);
}
/*简写形式,效果相同*/
div {
    transform: translate(50px, 60px);
}

注意 translate() 只指定一个值则默认是 x轴 位移,即水平移动;

rotate(deg)

元素旋转,括号中参数为旋转角度, 顺时针 为正值, 逆时针 为负值,单位为 deg ,即多少度;

例如:

div {
    /* 顺时针旋转30° */
    transform: rotate(30deg);
}

CSS3之2D与3D变换

scale(x,y)

缩放元素,参数分别为x轴,y轴缩放倍数,包括 scaleX(x)scaleY(y) ,提供一个参数表示 按比例 缩放;

例如:

div {
    /* 横向缩小一半,纵向放大一倍 */
    transform: scale(.5, 2);
}

CSS3之2D与3D变换

div {
    /* 按比例放大3倍 */
    transform: scale(3);
}

CSS3之2D与3D变换

skew(xdeg,ydeg)

包含 skewX(deg) , skewY(deg) ,表示在水平和垂直方向倾斜的角度;

例如:

div {
    transform: skewX(30deg);
    transform: skewY(45deg);
}
/* 简写 */
div {
    transform: skew(30deg, 45deg);
}

需要 注意 ,如果元素为一个矩形,那么 skewX(30deg) 表示矩形 顶边固定 ,底边 向右 倾斜 30degskewY(30deg) 表示矩形 左边框固定 ,右边框 向下 倾斜 30deg

可以根据上面讲的屏幕坐标系来记忆,x轴位于屏幕顶部,方向向右;y轴位于屏幕左部,方向向下;

如果 skew() 只指定一个值,默认是 水平倾斜

skewX(30deg)的效果:

CSS3之2D与3D变换

skewY(30deg)的效果:

CSS3之2D与3D变换

matrix(a,b,c,d,e)

这是一个综合属性,之前的平移,缩放,旋转,倾斜都能通过这个矩阵函数实现,对,大学里 线性代数 中的矩阵 T_T;

其实这个函数就是前面四种操作的 原理 ,函数共有六个参数,四种操作都对应不同的参数改变方式,像我们这种非数学专业的就不赘述原理了,前面的操作基本够用了(想寻找刺激就去百度“css matrix”吧)~~;

3D变换

所谓3D就是在前面2D平面上多了一个 z轴 ,方法名也差不多,然后能以分别以三根轴位基准进行变换,实现立体效果;

看一下所有3D操作方法:

translate3d(x,y,z)

结合前面讲的空间坐标系和 x, y, z轴的位置,三个参数分别对应元素在三个坐标轴方向的平移值,也包含三个方法 translateX(x) , translateY(y) , translateZ(z)

举例:

div {
    transform: translateX(50px);
    transform: translateY(60px);
    transform: translateZ(70px);
}
/* 简写 */
div {
    transform: translate3d(50px, 60px, 70px);
}

注意:关于设置 translateZ(z) 看不出效果的问题,后面说到设置 persoective 时会解释;

rotate3d(x,y,z,deg)

参数 x, y, z 为空间坐标系的一个坐标位置,然后由原点 (0, 0, 0) 指向这个点形成一个有方向的新轴,数学中称矢量,最后一个参数就是元素围绕刚才所形成的新轴旋转的度数;

也包括 rotateX(deg) , rotateY(deg) , rotateZ(deg) ,之前2D的 rotate() 便是这里的 rotateZ()

至于旋转的方向,判断方法类似于物理中的 左手定则 :角度指定为正的话,左手拇指与四指垂直,拇指指向元素围绕旋转的坐标轴或自定义轴,四指弯曲围绕方向就是旋转方向;

举例:

div {
    transform: rotateX(30deg);
    transform: rotateY(30deg);
    transform: rotataZ(30deg);
}
/* 自定义轴旋转 */
div {
    transform: rotate3d(10, 10, 10, 30deg);
}

rotateX(30deg)的效果:

CSS3之2D与3D变换

rotateY(30deg)的效果:

CSS3之2D与3D变换

关于为什么这里的旋转不是想象中的效果,而是缩小,主要是没有设置视点,后面会讲;

scale3d(x,y,z)

元素关于三个轴的缩放比例,包括 scaleX(x) , scaleY(y) , scaleZ(z) ,举例:

div {
    transform: scaleX(2);
    transform: scaleY(2);
    transform: scaleZ(2);
}
/* 简写 */
div {
    transform: scale3d(2, 2, 2);
}

需要 注意 这里的 scaleZ() ,正常情况下,扩大z轴会是物体 变厚 ,但是css里面呈现的平面元素并没有 厚度 ,所以这里的缩放z轴其实是缩放元素在z轴的 坐标 ,所以要有效果必须要指定 translateZ() 的值;

举例:

body {
    perspective: 500;
}
div {
    /* 必须这个顺序,先缩放后平移,不然无效果 */
    transform: scaleZ(2) translateZ(100px);
}

CSS3之2D与3D变换

按照上面样式才能看到 scaleZ(2) 的效果,因为后面在z轴上移动了 100px ,缩放比例为2,最终会移动 200px ,屏幕上则表现为元素放大了一下,这是透视效果,就是那个 perspective 值,下面会讲到;

matrix3d()

和前面2D的 matrix() 相似,只不过这里括号里的参数有 16个 ,矩阵更加复杂,跳过吧﹋o﹋,有兴趣可以自行百度~~;

perspective

在上面的示例中,有关z轴的平移和缩放通常情况下是看不出效果的,正是缺少这项属性值,叫做 透视 ,美术或设计中会出现这个词汇,就是实现物体近大远小的效果,远小最终会小到一个点,那就是 透视点perspective 就是用来设置那个点距离元素有多远,一般300~600很体现很好的透视效果, 值越小元素透视变形越严重

需要 注意 的是,这项属性设置在应用透视效果元素的 父元素 的样式中,才能看出效果,例如:

body {
    perspective: 500;
    /* 考虑浏览器兼容 */
    -webkit-perspective: 500;
}

也可以设置在元素本身,格式为:

div {
    transform: perspective(500);
    -webkit-transform: perspective(500);
}

rotateX(45deg)的更真实的效果:

CSS3之2D与3D变换

rotateY(45deg)的效果:

CSS3之2D与3D变换

perspective-origin

此项设置透视点的位置,默认在元素几何中心,需要设置的话,格式如下:

body {
    /* 默认中心 */
    perspective-origin: center center;
    /* 左上角 */
    perspective-origin: left top;
    /* 右边中心 */
    perspective-origin: right center;
    /* 底部中心 */
    perspective-origin: bottom center;
    /* 也可以是长度 */
    perspective-origin: 30px 40px;
    /*最后记得加 -webkit- 兼容 */
}

perspective-origin: left center的效果:

CSS3之2D与3D变换

perspective-origin: right center的效果:

CSS3之2D与3D变换

backface-visibility

翻译过来叫背面是否可见,可以设置 visiblehidden ,默认可见,比如元素正面有文字,设置背面可见,则关于y轴旋转180°后元素内文字变成镜像,否则不会出现;

backface-visibility: visible的效果:

CSS3之2D与3D变换

backface-visibility: hidden的效果(有旋转,只是背面不可见,则看不见了):

CSS3之2D与3D变换

其他属性

transform-origin

设置2D/3D变化的基准,可以是长度值,也可以是 left, right, top, bottom ,例如:

div {
    /* 关于元素左上角旋转 */
    transform-origin: left top;
    transform: rotate(30deg);
}

CSS3之2D与3D变换

transform-style

设置元素如何在3D空间呈现被嵌套的元素,选择是 flatpreserve-3d ,默认 flat

这里这么来理解,之前我们对一个元素执行变换时,都是以屏幕所在平面的坐标系在变换,但是元素如果存在子元素的话, transform-style 就是用来确定在哪套坐标系上进行变换, flat 表示任然以屏幕坐标系为基准, preserve-3d 表示以 变换后的父元素所在平面的坐标系 为基准;

#parent {
    transform-style: preserve-3d;
    -webkit-transform-style: preserve-3d;
    transform: perspective(500) rotateY(45deg);
    -webkit-transform: perspective(500) rotateY(45deg);
}
#child {
    transform: perspective(500) rotateX(45deg);
    -webkit-transform: perspective(500) rotateX(45deg);
}

flat的效果:

CSS3之2D与3D变换

preserve-3d的效果:

CSS3之2D与3D变换

例如,父元素绕x轴旋转了45度,并且设置 transform-style: preserve-3d ,而嵌套的子元素只绕y轴旋转45度,那么最终效果就是子元素绕父元素平面的y轴旋转了45度,看起来就像先x轴转45度后y轴转45度的效果;

最后,别忘了为以上所有特性添加浏览器兼容前缀;

顺便附上一个以上功能综合效果的演示页面,请戳下面:

CSS 3D


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文讨论了在dva中引入antd组件table时没有显示样式的问题。提供了.roadhogrc文件的配置,包括环境和import的设置。同时介绍了extraBabelPlugins和transform-runtime的使用方法,并解释了libraryName和css的含义。 ... [详细]
  • 【影评】大内密探灵灵狗
    本文是对王晶执导的电影《大内密探灵灵狗》进行的影评。文章称赞了王晶的才华和导演经验,认为演员阵容强大,笑料不少,发明新奇又好笑。然而,编剧的表现被认为是本片的最大失败,宣传言过其实,笑点不多。总体来说,本片是一部典型的王式喜剧,可看性较高,但没有突破。 ... [详细]
  • 说到C语言的语句块,真是一堆血泪史。第一大坑就是优先级。刚工作那会儿,C的书没看几本,自信满满的认为C语言都会了,拿出搞ACM培养的豪情壮志,代码倒是写得爽,却到处留 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
  • css元素可拖动,如何使用CSS禁止元素拖拽?
    一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到 ... [详细]
  • css div中文字位置_超赞的 CSS 阴影技巧与细节
    本文的题目是CSS阴影技巧与细节。CSS阴影,却不一定是box-shadow与filter:drop-shadow,为啥?因为使用其他属性 ... [详细]
author-avatar
手机用户2502931993
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有