兼容IE6、IE7的min-width、max-width

警句:珍爱生命,远离IE

很多时候,我们会想要设置容器的最小宽度或最大宽度,但IE6不支持min-width、max-width属性怎么办?

别着急,跟着我慢慢来,会让你捉急的还很多呢

首先我们来看看标准属性min-width、max-width效果如何:

.ie-hack {
    min-width: 100px;
    max-width: 200px;
}
<div class="ie-hack">LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL</div>
<div class="ie-hack">s</div>

(图1-1  正常浏览器)

(图1-2  IE6)

咦,好像不是预期的结果

哦,原来是block的原因。那我们改用inline-block吧:

.ie-hack {
    min-width: 100px;
    max-width: 200px;
    display: inline-block;
}
<span class="ie-hack">LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL</span>
<br>
<span class="ie-hack">s</span>

(图2-1  正常浏览器)

(图2-2  IE6)

哦啦,正常浏览器的宽度限制实现了,那现在我们来解决IE6的问题

这里用只有IE6才识别的_width属性,同时使用expression表达式来动态设置属性值:

.ie-hack {
    min-width: 100px;
    max-width: 200px;
    display: inline-block;
    _width: expression(this.offsetWidth < 100 ? ‘100px‘ : (this.offsetWidth < 200 ? ‘auto‘ : ‘200px‘));
}

刷新页面看看吧

哈哈,恭喜你被坑了,IE6卡死了

别问我,我也不知道原因,不过我知道解决方法,就是把第一个小于号改为大于号:

_width: expression(this.offsetWidth > 100 ? (this.offsetWidth < 200 ? ‘auto‘ : ‘200px‘) : ‘100px‘);

好了,这次不会卡死了,那我们看看效果怎么样:

(图3  IE6)

最小宽度有了,但最大宽度没限制住。

这是因为内容太多,自动拉伸了,毕竟不是max-width啊

那我们把超出的内容截掉看看:

.ie-hack {
    min-width: 100px;
    max-width: 200px;
    display: inline-block;
    _width: expression(this.offsetWidth > 100 ? (this.offsetWidth < 200 ? ‘auto‘ : ‘200px‘) : ‘100px‘);
    overflow: hidden;
}

(图4  IE6)

OK,效果达到了。

至此,你是不是认为问题都解决了?

年轻人,图样图森破啊,IE岂是你能轻易解决的

让我们来看看还有什么问题吧,这次我们用在按钮上看看效果如何:

<input class="ie-hack" type="button" value="LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" />
<br>
<input class="ie-hack" type="button" value="s" />

(图5-1  正常浏览器 & IE6)

(图5-2  IE7)

Oh, no!这次IE6通过了,但是换IE7来折磨你了(真的是折磨啊,说多了都是泪。)

Why?

好像是因为IE7这时把min-width当成width设置了,解决方案还是hack:

.ie-hack {
    min-width: 100px;
    max-width: 200px;
    *+min-width: auto;
    *+width: expression(this.offsetWidth > 100 ? (this.offsetWidth < 200 ? ‘auto‘ : ‘200px‘) : ‘100px‘);
    _width: expression(this.offsetWidth > 100 ? (this.offsetWidth < 200 ? ‘auto‘ : ‘200px‘) : ‘100px‘);
    overflow: hidden;
}

(图7  IE7)

谢天谢地!终于可以了,开香槟庆祝咯!

Wait,年轻人,都说你太年轻了,还不信

如果我不提醒你,哪天死了你都不知道怎么死的

这次我们使用JS来动态改变控件的内容,看看控件的宽度是否会随之改变

<span class="ie-hack" id="span1">LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL</span>
<br>
<span class="ie-hack" id="span2">s</span>
<br>
<input class="ie-hack" id="btn1" type="button" value="LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" />
<br>
<input class="ie-hack" id="btn2" type="button" value="s" />
window.onload = function() {
    document.getElementById("span1").innerHTML = "s";
    document.getElementById("span2").innerHTML = "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL";
    document.getElementById("btn1").value = "s";
    document.getElementById("btn2").value = "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL";
};

(图8-1  正常浏览器)

(图8-2  IE6 & IE7)

我们想到的效果应该是图8-1那样的,但这次IE6和IE7携手一起来折磨你了

抓狂了,裸奔去,下回再分解

(未完待解)

兼容IE6、IE7的min-width、max-width

时间: 2024-08-12 07:11:37

兼容IE6、IE7的min-width、max-width的相关文章

div+css 兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法(非原创)

div+css 兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法 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 和 wi

{转}div+css 兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法

div+css 兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器方法 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 和 wi

[转]CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法

CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法 2013-12-12  By 奥夫 关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对… 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !impo

[转载]使用兼容ie6 ie7 ie8 FF的text-overflow:ellips

使用兼容ie6 ie7 ie8 FF的text-overflow:ellipsis超出文本显示省略号来代替截取函数更有利于seo,如果使用截取函数,源代码中的标题是显示不完整的,即便是在title属性中使用了显示完整标题,也不如完整的标题文字连接.这个方法使得两者兼得,既能显示完整标题又对搜索引擎友好. 如果不想显示省略号,那么把text-overflow属性值改成 clip 就行了,显示的还是完整的标题文字连接. 下面是html文件完整代码,已经测试过了,大家复制使用即可. 效果预览: <!D

下拉菜单select高度(兼容IE6/IE7/IE8/火狐等主流浏览器)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

在页面左右一个悬浮div兼容IE6 IE7 8 9 Firefox chrome

#identifier-pannel { bottom: 345px; margin-left: 512px; position: fixed; _position: absolute; left: 50%; width: 110px; _top: expression(eval(document.documentElement.scrollTop || document.body.scrollTop) +eval(document.documentElement.clientHeight ||

(转)Css样式兼容IE6,IE7,FIREFOX的写法

根据FF和IE对一些符号识别的差异,我们可以单独对FF以及IE定义样式,例子: 区别IE6与FF:          background:orange;*background:blue;   区别IE6与IE7:          background:green !important;background:blue;   区别IE7与FF:          background:orange; *background:green;   区别FF,IE7,IE6:          back

CSS完美兼容IE6/IE7/IE8/IE9/IE10的通用方法

关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对… 一.CSS HACK 以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HA

CSS完美兼容IE6/IE7/FF的通用方法

一.CSS HACK以下两种方法几乎能解决现今所有HACK. 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.) wrapper {width: 100px!important; /* IE7+FF /width: 80px; / IE6 */} 2, IE6/IE77对FireFox +html 与 *html 是IE特有的标签, firefox 暂不支持.而+html 又为 IE7

CSS兼容IE6,IE7,FF的技巧(COPY来的,还没看)

一.CSS HACK 以下两种方法几乎能解决现今所有HACK.翻阅很多资料,已测试可以使用. 1, !important 随着IE7对!important的支持, !important 方法现在只针对IE6的HACK.(注意写法.记得该声明位置需要提前.) PLAIN TEXT CSS: #wrapper { width: 100px!important; /* IE7+FF */ width: 80px; /* IE6 */ } 2, IE6/IE77对FireFox *+html 与 *ht