css expression

概述

  css expression(css表达式)又称Dynamic properties(动态属性)是早期微软DHTML的产物,以其可以在Css中定义表达式(公式)来达到建立元素间属性之间的联系等作用,从IE5开始得到支持,后因标准、性能、安全性等问题,微软从IE8
beta2标准模式开始,取消对css expression的支持。

使用

  微软提供了4个css
expression方法:getExpression、recalc、removeExpression、setExpression。有兴趣可以参考msdn

  一般最常用的是直接在css中使用expression,例如:


1 .toTop{
2 top:expression(eval(document.documentElement.scrollTop + document.documentElement.clientHeight - 60)));
3 }

  这是一个返回顶部按钮css代码的截取,用css来将元素定位到屏幕底部的位置。

优点

  css
exprssion技术达到了可以使用表达式或公式来定义css属性的目的,msdn上给出了它的几个优点:减少页面上的代码,使设计师无需学习javascript就能实现一些DHTML的效果。个人认为,减少页面上的代码实际上只是减少了相关javascript的代码,而css
expression中的代码本身与js是及其类似,设计师无需学习js就能实现DHTML效果这个优点也很牵强,或曰鸡肋。

缺陷

  • .不符合web标准
    css表达式这种在表现(css)中插入行为(js)代码,有悖于web标准的结构、表现、行为相分离的理念。

  • .效率低下
    一个css表达式会反复执行,甚至执行成百上千次。这会大大消耗计算机的硬件资源,极端情况下会导致浏览器的崩溃。

  • .带来安全隐患
    css表达式暴露了一个脚本执行的上下文,可能带来脚本注入的隐患。

  基于以上原因,微软最终从IE8 beta2(标准模式下)开始放弃对css表达式的支持。

实际应用

  早期很多开发人员利用css
expression实现了许多效果,比如将元素相对鼠标指针进行定位,根据一个定时器来移动元素等等。当然这些效果能够使用js来实现。

  虽然css表达式问题很多,但是我们依然能够在网上看到它们的影子,甚至在一些成熟的商业网站上。最常见的一个应用就是悬浮在页面上的某个模块(比如导航、返回顶部)。

  我们来看一个常见的返回顶部按钮的代码实现:

  html:


<!doctype html>
<html>
<head>...</head>
<body>
<div id="top">...</div>
...
<a href="#top" id="toTopBtn">返回的顶部</a>
</body>

</html>

  css:


#toTopBtn{
position:fixed;
bottom:10px;
right:10px;
_position:absolute;
_top:expression(eval(document.documentElement.scrollTop + document.documentElement.clientHeight - 60));
...
}

  _position和_top是对IE6的hack,因为IE6不支持position:fixed。这里的css表达式的作用是模拟position:fixed,即在将返回顶部按钮固定在页面的底部,不管页面是否滚动、缩放。正是因为css
exprssion会执行多次,所以这个按钮元素才会一直定位在页面的底部。当然,我们可以使用javascript来模拟ie6的position:fixed,但细心的同学可能会发现这样一个问题,IE6下的返回顶部按钮会在你滚动页面的时候有较为明显的抖动。而我们使用css
expression,这要在css加入以下规则,抖动的现象就会消失:


html{
_background-image:url(about/blank);
_background-attachment:fixed;
}

  而使用js来模拟的,加上这句css规则也是没有效果的。这也应该是很多成熟商业网站现在还在使用css
expression的原因。若有较好的实现方案,欢迎讨论。

  但是,根据YSlow提供的网页优化建议:Avoid CSS Expressions,也由于css
expression的各种问题,个人不建议使用css表达式。可以和产品人员协商,容忍ie6下这点抖动的瑕疵,或者采用动画来美化这个抖动效果,或者使用另外的一种方式来实现position:fixed,比如:固定页面的高度,让页面内部的内容可滚动,然后将返回顶部按钮绝对定位到底部(采用这种实现方式要慎重,因为或对页面布局和结构造成较大的影响)。

总结

  CSS
expression作为web时代临时解决方案的产物,在被其创建者无情的抛弃后,我们更应该摈弃这种较为丑陋的代码方式,采用更优的解放方案。

参考

  About Dynamic Properties

  Ending Expressions

时间: 2024-10-22 07:28:09

css expression的相关文章

让IE6支持position:fixed的方法,CSS expression与JavaScript eval讲解

做吸顶效果或是固定效果时,使用position:fixed无非是最方便的,可是万恶的IE6是没有fixed这个属性值的,而我们要使IE6能够像fixed一样固定在浏览器中的某个位置,使用onscroll改变top值是一个方法,但如果滚轮滚的快,会出现卡闪烁情况.而如高级浏览器如果也这样用,那显然有失大雅,除非JS中判断浏览器版本.但是在这里笔者要讲解的是使用CSS完成fixed效果. 千言万语不及实例一个: 以上是笔者在IETester下测试IE6的fixed,注意看滚动条.其中导航采用的是po

实现最小宽度的几种方法及CSS Expression[转]

实现最小宽度的几种方法及CSS Expression[转] 实现最小宽度的几种方法:css表达式尽量不用 支持FF IE7  IE6 .test { background:blue; min-width:300px; width:auto !important; width:300px; float:left; width:expression(document.body.clientWidth <= 300? "300px": "auto" ); } 支持F

css之css表达式

css expression 不推荐使用的原因是 消耗性能,计算频率非常高 高版本的浏览器应该不支持这种写法了,所以只在i6,7 慕课的一篇: http://www.imooc.com/video/706 为什么要了解? 首先想想:为什么计算频率这么高?不懂!哈哈... 先填个坑, msdn 有一篇 :https://msdn.microsoft.com/en-us/library/ms537634(v=vs.85).aspx

字体大小自适应纯css解决方案

viewpoint css3提供了一些与当前viewpoint相关的元素,vw,vh,vim等. “viewpoint” = window size vw = 1% of viewport width 1vh = 1% of viewport height 1vmin = 1vw or 1vh, 最小 1vmax = 1vw or 1vh, 最大 兼容性:chrome 20+/ safari 6+/ IE 10+ / FF 19+ / IOS 6+ DEMO地址:http://qianduann

提高 web 应用性能之 CSS 性能调优

CSS 性能调优 CSS 代码的分析与渲染都是由浏览器来完成的,所以,了解浏览器的 CSS 工作机制对我们的优化有至关重要的作用.这篇文章我们主要从如下几个方面入手来介绍一下 CSS 的性能优化: Style 标签的相关调优 特殊的 CSS 样式使用方式 CSS 缩写 CSS 的声明 CSS 选择器 把 Stylesheets 放在 HTML 页面头部: 浏 览器在所有的 stylesheets 加载完成之后,才会开始渲染整个页面,@import 就相当于是把 <link> 标签放在页面的底部

【干货分享】前端面试知识点锦集02(CSS篇)——附答案

二.CSS部分 1.解释一下CSS的盒子模型? 回答一:a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度b.网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性.c.这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也就是能装东西的一种箱子,也具有这些属性,所以叫它盒子模式.CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型.

浏览器CSS兼容问题汇总及解决

由于公司项目要求兼容到IE6,这之中遇到不少CSS兼容性问题,所以就在博客汇总下来,以后在项目中遇到新的兼容性问题,也会在这里更新. 1.IE6下height属性会失效 问题描述:在IE6下,即使块级元素设置了高度,但若元素内部的内容超出设置高度,内部内容会把该块级元素高度撑开,height失效. 解决方法:对该块级元素设置overflow:hidden; 2.div存在最小高度 问题描述:在IE6下,块级元素会存在大概是13px默认最小高度,即使是空的div标签或者height属性设置比13p

使用css全面美化input标签

做网站时经常有这样那样的需要,要美化input ,于是CSS的美化必不可少.和程序人生的站长交流,他发给我这个. 下面是CSS样式 Js代码   input { border:1px solid #B3D6EF; background:#ffffff; } input { star : expression( onmouseover=function(){this.style.backgroundColor="#D5E9F6"}, onmouseout=function(){this.

css面试试题小结

行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效.告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现.link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用:而@import是CSS提供的,只能用于加载CSS.link写在html页面中,@import写在CSS页面中页面被加载的时,link会同