IE中显示min-width效果的解决方案

width: expression((this.offsetWidth <933) ? (this.width = 933 +'px') : true); 感觉像是三目运算,请问CSS中可以使用三目运算吗?那么上面的这条语句又怎么理解呢?

expression是CSS里执行js代码的一个函数,是为了弥补ie里不支持min-width,max-width,无法自适应屏幕宽度而用的。 expression(js代码),js代码中就可以有三目运算了,该函数有return返回值。 上面这条语句的意思是:this:选择器(容器),this.offsetWidth:容器的实际宽度,this.width:容器设置宽度值 如果容器宽度小于933px就设置它的宽度为933px;否则就神马也不干(return true)还是实际宽度。 因此永远width >= 933px,相当于W3C允许的min-width;

 

在用css布局中,时常用到min-width这个参数,而IE对此无法识别,那么,如何使IE也能显示同样的效果呢?这几天,菜鸟老乌鸦正碰到了这个麻烦事儿,于是google了一大堆资料,找到了个感觉比较简单的方法,总结一下写在这里,与鸟们分享。如有错误、疏漏之处,还请不吝赐教。 
分两种情况来讲。

一、非常方便的解决方法。
我们要让一个元素在窗口最大化时宽度为100%,当缩小窗口时,要求页面最小宽度为760px,在css中,一般我们会这样写:
CODE#content { 
width:100%;
min-width: 760px; 
}

非常好,在opera、firefox下显示很正常。但在IE下没有效果。解决方法只要在后面加一句就行了,如下:
CODE#content { 
width:100%;
min-width: 760px; 
width: expression(document.body.clientWidth < 760? "760px": "100%" );
}


二、应用于body
上面的解决方法并不能应用于body元素,当我们需要对body也进行此设置时,用js来解决是比较好的。为了可爱的firofox、opera等,css里这一句还是要写上的:
CODEbody { 
margin: 0; 
padding: 0;
width:100%
min-width: 760px; 
}


然后在页面中再调用一个js,代码如下:
CODEvar d = document;
var winIE = (navigator.userAgent.indexOf("Opera")==-1 && (d.getElementById && &nbsp;d.documentElement.behaviorUrns)) &nbsp;? true : false;
function bodySize(){
if(winIE && d.documentElement.clientWidth) {
&nbsp;sObj = d.getElementsByTagName("body")[0].style;
&nbsp;sObj.width = (d.documentElement.clientWidth<760) ? "760px" : "100%";
}
}
function init(){
if(winIE) { bodySize(); }
}
onload = init;
if(winIE) { onresize = bodySize; }

posted @ 2015-12-31 10:27  微风暖  阅读(2153)  评论(0编辑  收藏  举报