CSS3 skew斜切效果详解

前言

 之前一直没理解到这个变形的原理,加之项目上用的很少,就一直没花时间去梳理(这是个坏习惯!),今天趁着又看到了,赶紧来整理整理。

原理

其实原理很简单,只要手边有纸有笔(或者抽象思维比较好的也可以在脑子里画,反正学渣本渣是不行的)画出来就可以了。

举个栗子,下图是例图:

图1

图形仅在水平方向上变形(垂直方向上的高度不变)。 例如,skewX(30deg)就会把图片从图2变为图3的形状:

图2
图3

 

【解释】首先要理清楚的是,skewX是指图形在X轴方向上(也就是水平方向上进行变形),千万不要理解为它是x轴进行旋转!!其次,图形的边一定是和对应方向上的坐标轴平行的!也就是说,竖直方向上的边一定是和y轴平行。搞清楚了这个,再来弄清楚正负值的区别:

只需要记住,不管是skewX还是skewY亦或是skew,里面的参数取正时,往远离第一象限的方向旋转;取负值时,往靠近第一象限的方向旋转。

此时,相当于就有一只无形的手在水平方向上图形(正值往左推,负值往右推),推动角度为参数30deg(如图3红色箭头所示)。

这样就可以在脑中推算出图形经过skew变形之后的大致形状了,比如:

  • skew(+x deg)(同skewX(+x deg)),就是将图形往推 x deg,就是一个尖角在左上和右下的平行四边形:
  • skew(-x deg)(同skewX(-x deg)),就是将图形往推 x deg,就是一个尖角在右上和左下的平行四边形:
  • skew(0,+y deg)(同skewY(+y deg)),就是将图形往推 y deg,就是一个尖角在左上和右下的平行四边形:
  • skew(0,-y deg)(同skewY(-y deg)),就是将图形往推 y deg,就是一个尖角在左上和右下的平行四边形:

复杂一点的话,就是两个一起设置非零的值,如:

  • skew(+x deg,+y deg),就是先将图形推成上述第一点的样子,之后再向下推,大致形状如:

其他情况同此理,不再赘述。

上述方法可以不动笔大概勾勒出经变形后的图形,但要精确画出来,请参照以下方法:

从旋转后产生的新坐标轴开始说起,新坐标轴与原图形的边(即图3黑色虚框)会产生四个交点(图3紫色小圆点),过四个交点画平行于“对立”坐标轴的直线,一共会画四条(图3紫色实线),画好之后,四条直线构成的封闭图形就是经变形后应得的图形。

【TIPS】“对立”坐标轴的意思是:如果是新坐标轴中的x轴与原图形边产生的交点,那么过这个交点画平行于新坐标轴y轴的直线。

 

形象一点但有些啰嗦(怪我文笔和逻辑思维不好)的解释:

有一个四根火柴棒搭成的矩形,每个顶点由橡皮筋松松地固定(可想而知有多容易变形),为了保持其形状,我们用两根玻璃棒搭成十字架,置于矩形最中心位置,作为矩形的框架,设定火柴棒必须和对应方向上的玻璃棒成平行状态

此时,有一个小屁孩想捣乱,伸手四处戳火柴棒,看哪里能推得动。但我们有玻璃棒固定,只要玻璃棒不动,火柴棒自然也就推不动。而skewX(xxdeg),相当于是控制玻璃棒。

所以上图3经skewX(30deg)之后,竖直方向的玻璃棒(也就是Y轴)向远离第一象限的方向转了30deg,但由于水平方向没有变形,所以水平方向上的玻璃棒原地不动。(对应图3中紫色虚线)

由于“火柴棒必须和对应方向上的玻璃棒成平行状态”的设定,火柴棒急需和玻璃棒保持统一(即平行),小屁孩自以为是在捣乱,结果正合我们的意思了。将火柴棒向对应玻璃棒所在的方向推动了,直至和玻璃棒平行就再也推不动了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值