搜索
首页web前端html教程CSS3 变形记_html/css_WEB-ITnose

CSS3 变形

  CSS3变形是一些效果的集合,比如平移,旋转,缩放和倾斜效果,每个效果都称为变形函数。

transform

  transform属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。

transform:none | <transform-function> [<transform-function>] *

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    div{                    width:100px;        height:100px;        margin:40px;        position:absolute;        opacity:1;        background:rgb(0, 148, 255);    }    .box2{        background:rgb(0, 148, 255);        opacity:.5;		/*旋转45度*/        transform:rotate(45deg);    }</style></head><body><div class="box1"></div> <div class="box2"></div> </body></html> 

  旋转

  缩放

.box2{	...	/*放大了1.5倍*/	transform:scale(1.5);}

  位移

.box2{	...	/*X轴与Y轴都移动150px*/	transform:translate(150px,150px);} 

  倾斜

.box2{	...	/*X轴倾斜30度*/	transform:skew(30deg);}

transform-origin

  用来指定元素的中心点位置。

transform-origin:x-axis y-axis z-axis

  transform进行变形时,默认是以元素自己中心点为原点进行变形的。通过transform-origin属性可以改变元素的中心点,从而以我们指定的点为中心点进行变形。

.box2{	...	transform-origin:left top;}

  上例中,元素的中心点从默认的中间点center改为左上角点left top。就是说以左上角的点为基点进行变形。很简单吧,其他位置的点俺就不一一示范了,另外transform-origin不能改变translate的中点。

transform-style

  transform-style属性规定如何在3D空间中呈现被嵌套的元素。

transform-style:flat | preserver-3d

  简单来说,就是能够创建一个3D空间。让子元素在3D空间中变形。

perspective

  perspective 属性用来设置用户和元素3D空间Z平面之间的距离。值越小,3D效果越明显。

perspective:none | number

  当元素定义perspective属性时,其子元素会获得透视效果,而不是元素本身。如果不指定透视,则Z轴空间中的所有点将平铺到同一个2D平面中。

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    /*没有添加perspective时效果*/   #box1 div{        position:absolute;    }   #box1 div img{       transform-origin:bottom;   }   #box1 .box1-1 img{       opacity:.5;   }   #box1 .box1-2 img{       transform:rotateX(45deg);   }   /*添加perspective时效果*/   #box2 div{        position:absolute;        left:400px;        perspective:500px;    }   #box2 div img{       transform-origin:bottom;   }   #box2 .box2-1 img{       opacity:.5;   }   #box2 .box2-2 img{       transform:rotateX(45deg);   }</style></head><body><div id="box1">    <div class="box1-1"><img  src="/static/imghwm/default1.png"  data-src="https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png"  class="lazy" alt="CSS3 变形记_html/css_WEB-ITnose" ></div>    <div class="box1-2"><img  src="/static/imghwm/default1.png"  data-src="https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png"  class="lazy" alt="CSS3 变形记_html/css_WEB-ITnose" ></div></div><div id="box2">   <div class="box2-1"><img  src="/static/imghwm/default1.png"  data-src="https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png"  class="lazy" alt="CSS3 变形记_html/css_WEB-ITnose" ></div>   <div class="box2-2"><img  src="/static/imghwm/default1.png"  data-src="https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png"  class="lazy" alt="CSS3 变形记_html/css_WEB-ITnose" ></div></div></body></html> 

  可见,设置了perspective的元素,其3D效果更加明显了。

  另外,在3D变形中,除了perspective属性可以激活一个3D空间之外,在3D变形的函数中的perspective()也可以激活3D空间。不同的是,perspective属性用在父元素中,perspective()函数用在当前的子元素中,并且与transform中的其他的函数一起使用。如:

transform:rotate(45deg) perspective(500px);

  其效果是一样的。

perspective-origin

  用来决定perspective属性的起点位置就,简单说就是观看的视角。

perspective-origin: x-axis y-axis;

  perspective-origin与perspective属性一样,必须定义在父元素的元素上。换句话说,perspective-origin是与perspective结合使用的。

#box2 div{	...	perspective-origin:bottom right;}

  右下角效果

  左下角效果

  左上角效果

  右上角效果

  上角效果

  右角效果

  下角效果

  左角效果

  默认值,中角。

backface-visibility

  backface-visibility属性定义当元素不面向屏幕时是否可见。如果在旋转元素不希望看到背面时,该属性很有用。

backface-visibility:visible | hidden;

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    @keyframes rotate{        0%{            transform:rotateY(0deg);        }        100%{            transform:rotateY(360deg);        }    }           #box1,#box2{        width:300px;        height:400px;                  float:left;        margin:0 20px;        transform-style: preserve-3d;        animation:rotate 3s ease-in-out infinite alternate;   }   div div {        perspective: 1000px;        position:absolute;        top:0;        right:0;        bottom:0;        left:0;    }    #box1 div{           /*第一个图片背面不可见*/                 backface-visibility: hidden;    }   #box1 .box1-1,#box2 .box2-1{       background:url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png)no-repeat 0 0 / 100% 100%;       z-index:2;   }   #box1 .box1-2,#box2 .box2-2{       background:url(https://img.alicdn.com/imgextra/i2/2406102577/TB2cgJ7dVXXXXb3XXXXXXXXXXXX_!!2406102577.png)no-repeat 0 0 / 100% 100%;       transform:rotateY(180deg);   }</style></head><body><div id="box1">   <div class="box1-1"></div>   <div class="box1-2"></div></div><div id="box2">    <div class="box2-1"></div>    <div class="box2-2"></div></div></body></html> 

  两个图片正面时可见并无什么变化

  两个图片反面时,设置了背面不可见的图片隐藏了正面。

  将代码复制下来在浏览器中观看,可以更好了解。

CSS3 2D变形

2D位移

  translate()函数可以把元素从原来的位置移动。

translate(x-axis,y-axis);

  translate()函数可以取一个值x-axis,也可以取两个值x-axis,y-axis。
  当取一个值时,x-axis代表X轴移动的距离,正值时元素向右移动,负值向左移动。
  当取二个值是,x-axis一样;y-axis代表Y轴,正值时元素向下移动,负值向上移动。

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>            @-webkit-keyframes translate{        from{            transform:translate(0);        }        20%{            transform:translate(100px);        }        40%{            transform:translate(100px,100px);        }        60%{            transform:translate(200px,100px);        }        80%{            transform:translate(200px,200px);        }        100%{            transform:translate(300px,200px);        }    }    @keyframes translate{        from{            transform:translate(0);        }        20%{            transform:translate(100px);        }        40%{            transform:translate(100px,100px);        }        60%{            transform:translate(200px,100px);        }        80%{            transform:translate(200px,200px);        }        100%{            transform:translate(300px,200px);        }    }    div{        width:100px;        height:100px;        background:hsl(102, 100%, 50%);        -webkit-animation:translate 1s ease infinite alternate;        animation:translate 1s ease infinite alternate;    }</style></head><body>	<div></div></body></html> 

  下面是两张图片的位移效果,建议将代码复制在浏览器中观看。


  

  如果要将对象沿着X轴或者Y轴方向移动,除了可以使用translate(x-axis,0)和translate(0,y-axis)来实现。还可以使用translateX()与translateY()两个函数。

translateX(100px)等于translate(100px,0)translateY(100px)等于translate(0,100px)

2D缩放

  缩放函数scale()让元素根据中心原点对元素进行缩放。

scale(x-axis,y-axis);

  scale()函数与translate()函数的语法相似,可以接受一个值,也可以接受两个值,只有一个值时,第二个值与第一个值一样,也就是说X轴与Y轴成比例缩放。默认值为1,当值小于1时,元素缩小;当值大于1时,元素放大。

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>              @-webkit-keyframes scale{        from{            transform:scale(-3);        }                    100%{            transform:scale(5);        }    }             @keyframes scale{        from{            transform:scale(-3);        }                    100%{            transform:scale(5);        }    }    div{        position:absolute;        left:40%;        top:40%;        width:70px;        height:100px;        background:url(https://img.alicdn.com/imgextra/i2/2406102577/TB24namdVXXXXbXXXXXXXXXXXXX_!!2406102577.png) no-repeat scroll 0 0 / 100% 100%;        -webkit-animation:scale 1s ease infinite alternate;        animation:scale 3s ease infinite alternate;    }</style></head><body><div></div></body></html> 

  scale()函数除了可以取正值,还可以取负值。负值时,会让元素翻转后再进行缩放。下面是两张动画片段,可以复制在浏览器中观看。

  除了能通过scale()函数使元素在X轴和Y轴进行缩放之外,还可以使用scaleX()与scaleY()两个函数分别在X轴与Y轴缩放。

scaleX(2)相当于scale(2,1)scaleY(2)相当于scale(1,2)

  另外,缩放函数默认是以中心点为原点进行变形,可以使用transform-origin函数,修改元素的中心点,使缩放函数的效果不同。

2D倾斜

  倾斜函数skew()能够让元素倾斜显示。与rotate()函数不同,rotate()函数只能旋转,不能改变元素形状;skew()函数不能旋转,当会改变元素形状。

skew(x-axis,y-axis)

  x-axis表示元素X轴倾斜的角度。
  y-axis表示元素Y轴倾斜的角度。

  与前几个函数一样,当只有一个值时,表示的是X轴进行倾斜;二个值时,X轴与Y轴同时倾斜。

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    div {        width: 100px;        height: 100px;        background: hsl(102, 100%, 50%);        transform:skew(30deg);    }</style></head><body><div></div></body></html> 

  元素X轴倾斜效果

div {	...	transform:skew(0,30deg);}

  元素Y轴倾斜效果

div {	...	transform:skew(30deg,30deg);}

  元素X轴与Y轴同时倾斜效果

  除了使用scale()函数使X轴与Y轴倾斜之外,还可以使用scaleX()与scaleY()函数让元素在X轴与Y轴倾斜。

scaleX(30deg)等于scale(30deg,0)scaleY(30deg)等于scale(0,30deg)

  还可以使用transform-origin属性修改元素变形的中心点,让元素有不同的倾斜效果。

2D矩阵

  俺正在学习当中。点我我也要去学。

CSS3 3D变形

3D位移

  CSS3中3D位移主要包括两种函数translateZ()和translate3d()。

translateZ(z-axis);

  功能是让元素在3D空间沿Z轴进行位移。负值时,元素在视觉上感觉越来越远,导致元素变小;正值时,元素在视觉上感觉越来越近,导致元素变大了。代码效果translate3d()函数中。

translate3d(x-axis,y-axis,z-axis);

  translate3d()函数使一个元素在三维空间移动。是translateX(),translateY(),translateZ()三个函数的缩写,与translate()函数不同的是,translate()函数只能作用在X轴与Y轴上,也就是在二维平面上移动。

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    @-webkit-keyframes translate3d {        0% {            transform: translate3d(-30px,-20px,-300px);        }        100% {            transform: translate3d(30px,20px,200px);        }    }    @keyframes translate3d {        0% {            transform: translate3d(-30px,-20px,-300px);        }        100% {            transform: translate3d(30px,20px,200px);        }    }    body {        transform-style: preserve-3d;        perspective: 1000px;    }    .box1 {        position:absolute;        width: 70px;        height: 100px;        background: url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png) no-repeat 0 0 / 100% 100%;        -webkit-animation: translate3d 2s ease-in-out infinite alternate;        animation: translate3d 2s ease-in-out infinite alternate;        position:absolute;        top:30px;        left:20%;    }    .box2{        background: url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png) no-repeat 0 0 / 100% 100%;        opacity:.5;        width: 70px;        height: 100px;        position:absolute;        top:30px;        left:20%;    }</style></head><body><div class="box1"></div><div class="box2"></div></body></html> 

  下面是两张动画片段,图中可以看出Z轴的移动对视觉上的效果。

3D缩放

  CSS3 3D变形中的缩放主要有scaleZ()和scale3d()两种函数。

scaleZ(z-axis);

  让元素在Z轴上按比例缩放。

scale3d(x-axis,y-axis,z-axis);

  是scaleX,scaleY,scaleZ三个函数的缩写,scaleZ(2)等于scale3d(1,1,2)。与scale函数不同的是,scale()是在二维平面上进行缩放。scale3d()在三维空间上进行缩放。scale3d()与scaleZ()要与其他函数一起使用才有效果。
  建议在使用transform调用函数时,scale3d()或scaleZ()要写在其他函数之前,不然也没有效果。

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    @keyframes scale3d{        0%{            transform:scale3d(1,1,-10) rotateX(0);        }        100%{            transform:scale3d(1,1,2) rotateX(40deg);        }    }    html,body{        transform-style: preserve-3d;        perspective: 1200px;    }    div{        width: 70px;        height: 100px;        position:absolute;    }    .box1{        left:40%;        top:40px;        background:url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png) no-repeat scroll 0 0 /100% 100%;        z-index:2;        animation:scale3d 1s ease-in-out infinite alternate;    }    .box2{        left:40%;        top:40px;        opacity:.5;        background:url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png) no-repeat scroll 0 0 /100% 100%;    }</style></head><body><div class="box1"></div><div class="box2"></div></body></html> 

  下面是动画片段

3D旋转

  CSS3中3D旋转可以使用rotateX(),rotateY(),rotateZ()三个函数分别设置三维空间的旋转。也可以使用rotate3d()函数集中进行设置,因为效果都是一样的,俺就选rotate3d()函数来说。

rotate3d(x,y,z,deg);

  x,y,z代表旋转的三个轴,取值是0或1,0时代表这个轴不旋转,1时代表这个轴旋转。deg代表旋转的角度。

rotateX(45deg)等于rotate3d(1,0,0,45deg)rotateY(45deg)等于rotate3d(0,1,0,45deg)rotateZ(45deg)等于rotate3d(0,0,1,45deg)rotateX(45deg);rotateY(45deg);等于rotate3d(1,1,0,45deg)...

 

<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><meta charset="utf-8" /><title></title><style>    @keyframes rotate3d{        0%{            transform:rotate3d(0,0,0,0);        }        100%{            transform:rotate3d(1,1,1,45deg);        }    }    html,body{        transform-style: preserve-3d;        perspective: 1200px;    }    div{        width: 70px;        height: 100px;        position:absolute;    }    .box1{        left:40%;        top:40px;        background:url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png) no-repeat scroll 0 0 /100% 100%;        z-index:2;        animation:rotate3d 1s ease-in-out infinite alternate;    }    .box2{        left:40%;        top:40px;        opacity:.5;        background:url(https://img.alicdn.com/imgextra/i4/2406102577/TB28gKadVXXXXbmXXXXXXXXXXXX_!!2406102577.png) no-repeat scroll 0 0 /100% 100%;    }</style></head><body><div class="box1"></div><div class="box2"></div></body></html> 

  下面是动画片段

3D矩阵

  学习中...

CSS3 变形就写到此了。

  总结一下最近写博客的感想。以前不写博客时,一本书几天就能看完,而且自己又光看不练,且又不爱复习,那过几天立马就忘得干净了。多次吃亏之下,决定写博客,做笔记。写博客的这几天,一个字“累”,以往看书时感觉不过尔尔,简单的很,等到自己写,就糟了,感觉左也不对,右也是错,这时才知道难啊。写出来后欢心鼓舞,好不快乐。写博客累,却是实在。子曰:学而不思则罔。唯有自己想出来,写下来,才不会迷惑。乡下人言语粗鄙,不知所云。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?Mar 04, 2025 pm 12:32 PM

公众号网页更新缓存,这玩意儿,说简单也简单,说复杂也够你喝一壶的。你辛辛苦苦更新了公众号文章,结果用户打开还是老版本,这滋味,谁受得了?这篇文章,咱就来扒一扒这背后的弯弯绕绕,以及如何优雅地解决这个问题。读完之后,你就能轻松应对各种缓存难题,让你的用户始终体验到最新鲜的内容。先说点基础的。网页缓存,说白了就是浏览器或者服务器为了提高访问速度,把一些静态资源(比如图片、CSS、JS)或者页面内容存储起来。下次访问时,直接从缓存里取,不用再重新下载,速度自然快。但这玩意儿,也是个双刃剑。新版本上线,

如何使用HTML5表单验证属性来验证用户输入?如何使用HTML5表单验证属性来验证用户输入?Mar 17, 2025 pm 12:27 PM

本文讨论了使用HTML5表单验证属性,例如必需的,图案,最小,最大和长度限制,以直接在浏览器中验证用户输入。

如何高效地在网页中为PNG图片添加描边效果?如何高效地在网页中为PNG图片添加描边效果?Mar 04, 2025 pm 02:39 PM

本文展示了使用CSS为网页中添加有效的PNG边框。 它认为,与JavaScript或库相比,CSS提供了出色的性能,详细介绍了如何调整边界宽度,样式和颜色以获得微妙或突出的效果

HTML5中跨浏览器兼容性的最佳实践是什么?HTML5中跨浏览器兼容性的最佳实践是什么?Mar 17, 2025 pm 12:20 PM

文章讨论了确保HTML5跨浏览器兼容性的最佳实践,重点是特征检测,进行性增强和测试方法。

&lt; datalist&gt;的目的是什么。 元素?&lt; datalist&gt;的目的是什么。 元素?Mar 21, 2025 pm 12:33 PM

本文讨论了html&lt; datalist&gt;元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

&lt; meter&gt;的目的是什么。 元素?&lt; meter&gt;的目的是什么。 元素?Mar 21, 2025 pm 12:35 PM

本文讨论了HTML&lt; meter&gt;元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了&lt; meter&gt;从&lt; progress&gt;和前

&gt; gt;的目的是什么 元素?&gt; gt;的目的是什么 元素?Mar 21, 2025 pm 12:34 PM

本文讨论了HTML&lt; Progress&gt;元素,其目的,样式和与&lt; meter&gt;元素。主要重点是使用&lt; progress&gt;为了完成任务和LT;仪表&gt;对于stati

我如何使用html5&lt; time&gt; 元素以语义表示日期和时间?我如何使用html5&lt; time&gt; 元素以语义表示日期和时间?Mar 12, 2025 pm 04:05 PM

本文解释了HTML5&lt; time&gt;语义日期/时间表示的元素。 它强调了DateTime属性对机器可读性(ISO 8601格式)的重要性,并在人类可读文本旁边,增强Accessibilit

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境