css能否监测一个模块宽度的大小

html-css07

css能否监测一个模块宽度的大小,第1张

css是不可能检测一个模块宽度的大小的,CSS只能相当于是一个html的颜料而已。意思是,主要通过css这个颜料去绘画html来做出不同的东西。

如果你要用检测,只能通过JS进行监控,所以像很多动画,运动效果都是用js控制css来实现的。

希望我的回答可以帮到你,有什么不懂可以追问。

CSS animations, transforms 以及 transitions 不会自动开启GPU加速,而是由浏览器的缓慢的软件渲染引擎来执行。那我们怎样才可以切换到GPU模式呢,很多浏览器提供了某些触发的CSS规则。

现在,像Chrome, FireFox, Safari, IE9+和最新版本的Opera都支持硬件加速,当它们检测到页面中某个DOM元素应用了某些CSS规则时就会开启,最显著的特征的元素的3D变换。

例如:

.cube {

   -webkit-transform: translate3d(250px,250px,250px)

   rotate3d(250px,250px,250px,-120deg)

   scale3d(0.5, 0.5, 0.5)

}

可是在一些情况下,我们并不需要对元素应用3D变换的效果,那怎么办呢?这时候我们可以使用个小技巧“欺骗”浏览器来开启硬件加速。

虽然我们可能不想对元素应用3D变换,可我们一样可以开启3D引擎。例如我们可以用transform: translateZ(0)来开启硬件加速 。

.cube {

   -webkit-transform: translateZ(0)

   -moz-transform: translateZ(0)

   -ms-transform: translateZ(0)

   -o-transform: translateZ(0)

   transform: translateZ(0)

   /* Other transform properties here */

}

在 Chrome and Safari中,当我们使用CSS transforms 或者 animations时可能会有页面闪烁的效果,下面的代码可以修复此情况:

.cube {

   -webkit-backface-visibility: hidden

   -moz-backface-visibility: hidden

   -ms-backface-visibility: hidden

   backface-visibility: hidden

 

   -webkit-perspective: 1000

   -moz-perspective: 1000

   -ms-perspective: 1000

   perspective: 1000

   /* Other transform properties here */

}

在webkit内核的浏览器中,另一个行之有效的方法是

.cube {

   -webkit-transform: translate3d(0, 0, 0)

   -moz-transform: translate3d(0, 0, 0)

   -ms-transform: translate3d(0, 0, 0)

   transform: translate3d(0, 0, 0)

  /* Other transform properties here */

}

原生的移动端应用(Native mobile applications)总是可以很好的运用GPU,这是为什么它比网页应用(Web apps)表现更好的原因。硬件加速在移动端尤其有用,因为它可以有效的减少资源的利用(麦时注:移动端本身资源有限)。