优化浏览器渲染:避免CSS expressions

2016-02-20 00:30 5 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐优化浏览器渲染:避免CSS expressions,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - Web开发 】

概述

CSS表达式会降低浏览器的渲染性能;用其他方案替换它们将会改善IE浏览器的渲染性能。

注意:本节最佳实践只适用于Internet Explorer 5到7,它们支持CSS表达式。Internet Explorer 8放弃使用CSS表达式,而其他浏览器是不支持的。

详细信息

作为一种动态改变文档属性来响应各种事件的的手段,Internet Explorer 5引入了CSS表达式或 动态属性。它们由在CSS声明中的CSS属性值里嵌入JavaScript表达式构成。在大多数情况下,它们用于以下目的:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

模拟其他浏览器支持但IE浏览器尚未支持的标准CSS属性。

使用比编写全面JavaScript注入式样式更小巧,更便捷的方法,来提供动态样式和高级的事件处理。

不幸的是,CSS表达式对于性能的不良影响是相当大的,因为每当有事件触发,浏览器都要重新计算每个表达式,如一个窗口改变大小,鼠标移动等。CSS表达式的低性能表现是IE 8弃用它们的原因之一。如果你在网页里使用CSS表达式,应该尽一切努力来消除它们并且使用其他方法来达到同样的功能。

建议

尽可能使用标准的CSS属性。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

IE 8已高度兼容标准CSS;IE 8只有在兼容模式才支持运行CSS表达式,而在标准模式下则不支持。如果你不需要向后兼容旧版本的IE,你应该转换成标准的CSS属性来替换所有对应的CSS表达式。如需CSS属性和支持它们的IE版本的完整列表,请参见MSDN的CSS。如果你确实需要支持所需CSS属性不可用的旧版本IE浏览器,请使用JavaScript来实现等效的功能。

使用JavaScript脚本样式。

如果你正在使用CSS表达式来实现动态样式,用纯JavaScript重写它们是很有意义的,因为这样既能提高IE性能,同时在其他浏览器获得相同效果的支持。在这个由MSDN页提供的例子里,下面的CSS表达式用于在浏览器里居中一个HTML块元素,并且该元素的尺寸可以在运行时改变,每次调整窗口大小都能重新定位在浏览器中心:

div id="oDiv" style="background-color: #CFCFCF; position: absolute;left:expression(document.body.clientWidth/2-oDiv.offsetWidth/2);top:expression(document.body.clientHeight/2-oDiv.offsetHeight/2)"Example DIV/div

下面是一个使用JavaScript和标准CSS的等价例子:

style  #oDiv { position: absolute; background-color: #CFCFCF;}/stylescript type="text/javascript" // Check for browser support of event handling capability  if (window.addEventListener) {  window.addEventListener("load", centerDiv, false); window.addEventListener("resize", centerDiv, false);  } else if (window.attachEvent) {  window.attachEvent("onload", centerDiv);  window.attachEvent("onresize", centerDiv);  } else {  window.onload = centerDiv;  window.resize = centerDiv;  }  function centerDiv() {  var myDiv = document.getElementById("oDiv");  var myBody = document.body;  var bodyWidth = myBody.offsetWidth;  //Needed for Firefox, which doesn't support offsetHeight  var bodyHeight; if (myBody.scrollHeight) bodyHeight = myBody.scrollHeight; else bodyHeight = myBody.offsetHeight;  var divWidth = myDiv.offsetWidth;  if (myDiv.scrollHeight)   var divHeight = myDiv.scrollHeight;   else var divHeight = myDiv.offsetHeight; myDiv.style.top = (bodyHeight - divHeight) / 2;  myDiv.style.left = (bodyWidth - divWidth) / 2;  }/script

如果您使用CSS表达式来模拟早期IE版本中不可用的CSS属性,你应该提供版本测试的javascript代码,为支持CSS的浏览器禁止CSS表达式。举例来说,max-width属性,这个属性在一定数量的像素范围内强制文本换行,在IE 7前是不支持的。下面的CSS表达式作为一种解决方法,为IE 5和6提供了这个功能:

p { width: expression( document.body.clientWidth  600 ? "600px" : "auto" ); }

为不支持此属性的IE浏览器版本使用等价的JavaScript替换CSS表达式,可以使用类似于下面的内容:

style  p { max-width: 300px; }/stylescript type="text/javascript"  if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion)  7))  window.attachEvent("onresize", setMaxWidth);  function setMaxWidth() {  var paragraphs = document.getElementsByTagName("p");  for ( var i = 0; i  paragraphs.length; i++ )  paragraphs[i].style.width = ( document.body.clientWidth  300 ? "300px" : "auto" );/script

来源:http://www.tulaoshi.com/n/20160220/1632000.html

延伸阅读
标签: Web开发
虽然webjx.com向大家介绍了很多CSS属性的相关知识,但有些非常冷门的属性还是有所欠缺。在B/S程序中,对打印页面的控制,CSS相对比较弱,例如: 自动分页, 就基本没啥实际用途。我们通常需要自己在需要的时候,强制浏览器分页,这时可以使用以下样式: style type="text/css" .webjxcom { page-break-after:always;} /sty...
标签: Web开发
1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width 5.FF: 支...
说到web性能,前端工程师很自然地反应是yahoo的30+条优化规则。这些规则可以将网页加载从原来的几秒甚至十几秒较少到3s甚至1s以内。当一个完整界面展现在用户眼前时,内容就通过不同的字体、图片以及多媒体传达给用户。使用户在1s内看到网页和使用户留在网页上几分钟甚至几十分钟同样重要。字体作为内容承载信息的重要部分,若使用不适当的字体...
标签: Web开发
当你想在一个浏览器里改变样式而不像在其他浏览器中改变时,这些选择器很有用。 IE6以下 *html{} IE 7 以下 *:first-child+html {} * html {} 只对IE 7 *:first-child+html {} 只对IE 7 和现代浏览器 htmlbody {} 只对现代浏览器(非IE 7) html/**/body {} 最新的Opera 9以下版本 html:first-child {} Safari html[xmlns*=&qu...
标签: Web开发
我很久以前就开始计划着整理一下CSS选择器的浏览器支持,因为CSS3增加了很多非常有用的选择器。之前我也写过一篇《使用CSS选择器创建个性化链接样式 》,作为对CSS选择器的初步研究。 kimblim网站整理了一份很全面的CSS选择器支持情况,我将其翻译过来并进行进一步的整理,将其尽可能的简化。同时结合evotech网站整理的CSS选择器支持列表,以...

经验教程

561

收藏

45
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部