CSS transformations虽然很酷,但尚未应用于背景图像。这篇文章提供了一个很好的解决方法,当您确实想要旋转背景图像时,或者在容器元素旋转时保持背景图像不变。css
使用css3转换属性能够缩放、倾斜和旋转任何元素。它在全部没有厂商前缀的现代浏览器中都获得支持。(我已经添加了-webkit-以防您但愿支持一些较旧的浏览器。)css3
#myelement {
-webkit-transform: rotate(30deg);
transform: rotate(30deg);
}
复制代码
很棒的东西。可是,这会旋转整个元素-其内容、边框和背景图像。若是你只想旋转背景图像怎么办?或者若是但愿在元素旋转时背景保持不变web
目前,尚未W3C对背景图像转换的建议。这将是很是有用的,因此我怀疑最终会出现一个,但这对今天想要使用相似效果的开发人员没有帮助。浏览器
幸运的是,有一个解决方案。本质上,这是一种将背景图像应用于伪元素以前或以后的黑客行为,而不是父容器。而后能够独立地转换伪元素。bash
仅转换背景url
容器元素能够应用任何样式,但必须将其设置为position:relative,由于咱们的伪元素将定位在该元素中。您还应该设置溢出:隐藏,除非您愿意让背景溢出容器以外。spa
#myelement {
position: relative;
overflow: hidden;
}
复制代码
咱们如今能够建立一个具备转换背景的绝对定位的伪元素。z-index设置为-1以确保它出如今容器内容的下面。code
#myelement:before {
content: "";
position: absolute;
width: 200%;
height: 200%;
top: -50%;
left: -50%;
z-index: -1;
background: url(background.png) 0 0 repeat;
-webkit-transform: rotate(30deg);
transform: rotate(30deg);
}
复制代码
注意,您可能须要调整伪元素的宽度、高度和位置。例如,若是使用的是重复图像,则旋转区域必须大于其容器才能彻底覆盖背景: orm
在转换元素上固定背景cdn
修复已转换元素的背景。父容器上的全部转换都应用于伪元素。所以,咱们须要撤消该转换,例如,若是容器旋转30度,则必须将背景旋转-30度以返回到固定位置:
#myelement {
position: relative;
overflow: hidden;
-webkit-transform: rotate(30deg);
transform: rotate(30deg);
}
#myelement:before {
content: "";
position: absolute;
width: 200%;
height: 200%;
top: -50%;
left: -50%;
z-index: -1;
background: url(background.png) 0 0 repeat;
-webkit-transform: rotate(-30deg);
transform: rotate(-30deg);
复制代码
一样,您须要调整大小和位置,以确保背景充分覆盖父容器。
效果在全部主要浏览器中都有效,在Edge和Internet Explorer中均可以恢复到版本9。IE8不会显示任何转换,但仍会显示背景。