css怎样解决ie浏览器旋转不兼容

html-css015

css怎样解决ie浏览器旋转不兼容,第1张

在现代浏览器中使用CSS3的transform样式即可轻松搞定,但是对于国内IE浏览器(特别是7,8)还占有较大份额的情况下,兼容性还是必须要考虑的,所以也特意记录下IE旋转滤镜的使用。

在IE下的旋转滤镜有两种:

第一种:

CSS样式

filter:progid:DXImageTransform.Microsoft.BasicImage(rotation:1)

其中rotation属性只有四个值:0,1,2,3 分别表示的旋转度数是:0度,90度,180度,270度。查看参考文档,请点击这里,但是想要旋转其他任意度数上面的方法就不适合了,这就需要下面的方法。

第二种

CSS样式

filter:progid:DXImageTransform.Microsoft.Matrix(enabled=bEnabled ,SizingMethod=sMethod ,FilterType=sType ,Dx=fDx ,Dy=fDy ,M11=fM11 ,M12=fM12 ,M21=fM21 ,M22=fM22)

enabled:定义滤镜是否被禁止使用,取值范围为布尔值,当取值为true的时候滤镜可用;取值为false时,禁止使用滤镜。

SizingMethod:定义元素使用图片时是否改变属性。当取值为clip to original时,元素不改变尺寸;当取值为auto expand时,元素改变尺寸。

FilterType:定义元素旋转的方法。当取值为bilinear时,使用平滑、静态的显示效果;nearest neighhbor一般用于动态滤镜中。

Dx:定义水平方向上的向量增加量。使用浮点数定义增量的大小,默认值为1.0。

Dy:定义垂直方向上的向量增加量。使用浮点数定义增量的大小,默认值为1.0。

M11:定义元素右侧边线水平方向上的显示位置。使用浮点数定义增量的大小,默认值为1.0。当取值大于1.0时,右边线向右移动,同时拉伸元素的宽度;当取值小于1.0时,右边线向左移动,同时减小元素的宽度。

M12:定义元素底侧边线水平方向上的显示位置。使用浮点数定义增量的大小,默认值为0时。当取值大于0时,底部连线向右移动,同时拉伸元素的宽度;当取值小于0时,底部边线向左移动,同时拉伸元素的宽度。

M21:定义元素右侧边线竖直方向上的显示位置。使用浮点数定义增量的大小,默认值为0。当取值大于0时,底部边线向下移动,同时拉伸元素的高度;当取值小于0时,底部边线向上移动,同时拉伸元素的高度。

M22:定义元素底侧边线竖直方向上的显示位置。使用浮点数定义增量的大小,默认值为1.0。当取值大于1.0时,底部边线向下移,同时拉伸元素的高度;当取值小于1.0时,右边线向上移动,同时减小元素的高度。

以上是此滤镜全部的参数,但是平时用的最多的参数只有5个,所以可以简化为:

CSS样式

filter:progid:DXImageTransform.Microsoft.Matrix(SizingMethod=sMethod ,M11=fM11 ,M12=fM12 ,M21=fM21 ,M22=fM22)

SizingMethod一般选择“auto expand”,它和“clip to original”值的区别如下图(图中旋转角度都为45度):

下面来说下如何计算旋转值,也就是如何计算M11,M12,M21,M22的值。

其实也很简单,用计算器算即可,如果你要做旋转动画,那么需要JS去计算,M11=cos(角度值),M12=-sin(角度

值),M21=sin(角度值),M22=cos(角度值)。例如:你想要旋转10度,那么sin(10)约=0.174,cos(10)

约=0.985,所以四个值相应为:M11=0.985,M12=-0.174,M21=0.174,M22=0.985

在这里也想提下,IE Matrix滤镜还可以实现放大和缩小的效果,类似于zoom样式,只要将M11,M12,M21,M22的值乘以相应的倍数即可。

Ps:在IE6和IE7中如果将滤镜写在<style>标签或者样式表中,会出现以下两个问题,

此滤镜之后的样式都会失效;

旋转滤镜一个页面中只允许有一个。

这两点的解决方案是:将滤镜样式直接内嵌在元素标签上。

如果有更好的解决方法可以留言。想了解更多Matrix滤镜,请猛戳这里和这里

这样配合CSS3样式transform即可兼容所有浏览器实现旋转效果。

css是个神奇的东西,在学习的过程中你会发现绘画和艺术的美,金字塔是世界八大奇迹之一,设计精巧,计算精密,令世人赞叹。那么如何用CSS画一个金字塔呢?

人丑话不多,先看一下效果

金字塔是由5个面组成的,即4个侧面和1个底面。我们可以把它看作是一个童年时期玩过的元宝,或者端午节戴在身上的福字。为什么这么说呢?

“横看成岭侧成峰”,我们看金字塔的俯视图是不是会看到这样一个图形,如下图所示

这是一个平面图形,如果让这个平面图形具有立体的效果不就是一个金字塔了么。即将上图的(0,0)沿着x轴旋转一定角度即可实现。

接下来就是绘制“元宝”的形状,侧面是4个三角形,底面是一个正方形。实现三角形可以采用 clip-path 的属性对可视区域进行裁剪。

由上图可知: clip-path 的只能兼容 高版本浏览器 。polygon代表多边形,所以利用该属性可以绘制多如下图形:

有了上述的图形之后,我们需要进行特殊的处理,才能得到我们想要的形状。因为我们要搭建金字塔,所有我们塔边的高度或者宽度需要大于底部的宽度和长度,不然的话无法搭成塔尖而形成如下图形:

故需设置大于底部宽和高,我们这里选取为高度为200px,宽度为100px,宽度需要和底部宽度保持一致。

假设我们现在已经有一个金字塔,我们可以取它的一个横截面如下图:

通过sin函数

解上面反三角函数求得A大约为75deg,以此类推我们可以算出其他图形旋转角度。

将上述的两种三角形通过适当的平移和旋转,得到如下图形:

合并之后得到如下图形

通过使用css3中的3D转化属性,将上图进行转化即可:

由上图可知:transform-style:preserve-3d兼容是支持高版本浏览器,支持部分ie浏览器

以上就是本文的全部内容,全部都是由css实现包括: