注:如下描述只适用于 IE 的 Standard 模式,未在 Quriks 模式下测试过。javascript
IE6 不支持这两个属性,但它会把 width / height 视为 min-width / min-height
所以,跨浏览器的实现方式是这样的:css
_width: x; min-width: x;
IE6/7 不支持 display: inline-block;。要让它们实现此效果分两种状况:html
display: inline-block;
或 *zoom: 1;
只要对行内元素触发 hasLayout,便可实现 inline-block,上面两句都能达到这个效果。通常用前面那句。java
注意:这种状况下,若当前元素的 margin 的单位是 em,那么它参照的是父元素设置的字体大小。缘由不明。segmentfault
<style> html, body { padding: 0; margin: 0; } #wrap { font-size: 100px; } a { border: 1px solid #ccc; display: inline-block; font-size: 12px; margin: 1em; padding: 1em; } </style> <div id="wrap"> <a href="">abc</a> <a href="">def</a> </div>
让块状元素实现 inline-block,须要在触发 hasLayout 以后,将其设为 display: inline;
两种作法:浏览器
div{ display: inline-block;} div{ *display: inline;}
注意,两句必须放在两个声明中测试
div{ display: inline-block; /*for other*/ *display: inline; *zoom: 1; /*for ie*/ }
这样的好处是没必要放在两个声明里了,但多了一条语句。我的推荐这一个。
并且这个方法实际对行内和块状元素都有效了,比较便于重用。字体
在现代浏览器里,全局的 resize 事件只在窗口大小变化时被触发
但在 IE6/7/8 里,body 元素大小的变动也会触发这一事件:spa
<div id="content">abc</div> <script> window.onresize = function() { alert('resized'); }; setTimeout(function() { document.getElementById('content').style.height = '300px'; }, 500); </script>
所以,有时窗口大小只改变一次,却会触发两次 resize 事件
有的状况下,甚至会致使死循环(即:在响应 resize 事件时,由于修改文档内容/样式,再次触发了 resize 事件)code
解决办法,用这种方式监听 resize 事件:
var currheight, currwidth; window.onresize = function() { if(currheight != document.documentElement.clientHeight && currwidth != document.documentElement.clientWidth) { alert('resized'); } currheight = document.documentElement.clientHeight; currwidth = document.documentElement.clientWidth; };
P.S. 思路来自 这里,原文中的办法有问题,在这作了一点改进
在 IE6/7 中,若是行内元素的上/下方与 body 之间没有被其余东西分隔开,那么它们的上、下边框会被"吞掉"
<style>span { border: 1px solid #f00; }</style> <span>abc</span> <span>123</span>
此问题的具体表现以下: