让IE6支持min-width和max-width的方法


Posted in Javascript onJune 25, 2010

说明:让 IE6 及其以下版本支持 CSS 中 min/max-width/height 属性

@if (@_win32 && @_jscript_version>4) 
var minmax_elements; 
minmax_props= new Array( 
new Array('min-width', 'minWidth'), 
new Array('max-width', 'maxWidth'), 
new Array('min-height','minHeight'), 
new Array('max-height','maxHeight') 
); 
// Binding. Called on all new elements. If <body>, initialise; check all 
// elements for minmax properties 
function minmax_bind(el) { 
var i, em, ms; 
var st= el.style, cs= el.currentStyle; 
if (minmax_elements==window.undefined) { 
// initialise when body element has turned up, but only on IE 
if (!document.body || !document.body.currentStyle) return; 
minmax_elements= new Array(); 
window.attachEvent('onresize', minmax_delayout); 
// make font size listener 
em= document.createElement('div'); 
em.setAttribute('id', 'minmax_em'); 
em.style.position= 'absolute'; em.style.visibility= 'hidden'; 
em.style.fontSize= 'xx-large'; em.style.height= '5em'; 
em.style.top='-5em'; em.style.left= '0'; 
if (em.style.setExpression) { 
em.style.setExpression('width', 'minmax_checkFont()'); 
document.body.insertBefore(em, document.body.firstChild); 
} 
} 
// transform hyphenated properties the browser has not caught to camelCase 
for (i= minmax_props.length; i-->0;) 
if (cs[minmax_props[i][0]]) 
st[minmax_props[i][1]]= cs[minmax_props[i][0]]; 
// add element with properties to list, store optimal size values 
for (i= minmax_props.length; i-->0;) { 
ms= cs[minmax_props[i][1]]; 
if (ms && ms!='auto' && ms!='none' && ms!='0' && ms!='') { 
st.minmaxWidth= cs.width; st.minmaxHeight= cs.height; 
minmax_elements[minmax_elements.length]= el; 
// will need a layout later 
minmax_delayout(); 
break; 
} } 
} 
// check for font size changes 
var minmax_fontsize= 0; 
function minmax_checkFont() { 
var fs= document.getElementById('minmax_em').offsetHeight; 
if (minmax_fontsize!=fs && minmax_fontsize!=0) 
minmax_delayout(); 
minmax_fontsize= fs; 
return '5em'; 
} 
// Layout. Called after window and font size-change. Go through elements we 
// picked out earlier and set their size to the minimum, maximum and optimum, 
// choosing whichever is appropriate 
// Request re-layout at next available moment 
var minmax_delaying= false; 
function minmax_delayout() { 
if (minmax_delaying) return; 
minmax_delaying= true; 
window.setTimeout(minmax_layout, 0); 
} 
function minmax_stopdelaying() { 
minmax_delaying= false; 
} 
function minmax_layout() { 
window.setTimeout(minmax_stopdelaying, 100); 
var i, el, st, cs, optimal, inrange; 
for (i= minmax_elements.length; i-->0;) { 
el= minmax_elements[i]; st= el.style; cs= el.currentStyle; 
// horizontal size bounding 
st.width= st.minmaxWidth; optimal= el.offsetWidth; 
inrange= true; 
if (inrange && cs.minWidth && cs.minWidth!='0' && cs.minWidth!='auto' && cs.minWidth!='') { 
st.width= cs.minWidth; 
inrange= (el.offsetWidth<optimal); 
} 
if (inrange && cs.maxWidth && cs.maxWidth!='none' && cs.maxWidth!='auto' && cs.maxWidth!='') { 
st.width= cs.maxWidth; 
inrange= (el.offsetWidth>optimal); 
} 
if (inrange) st.width= st.minmaxWidth; 
// vertical size bounding 
st.height= st.minmaxHeight; optimal= el.offsetHeight; 
inrange= true; 
if (inrange && cs.minHeight && cs.minHeight!='0' && cs.minHeight!='auto' && cs.minHeight!='') { 
st.height= cs.minHeight; 
inrange= (el.offsetHeight<optimal); 
} 
if (inrange && cs.maxHeight && cs.maxHeight!='none' && cs.maxHeight!='auto' && cs.maxHeight!='') { 
st.height= cs.maxHeight; 
inrange= (el.offsetHeight>optimal); 
} 
if (inrange) st.height= st.minmaxHeight; 
} 
} 
// Scanning. Check document every so often until it has finished loading. Do 
// nothing until <body> arrives, then call main init. Pass any new elements 
// found on each scan to be bound 
var minmax_SCANDELAY= 500; 
function minmax_scan() { 
var el; 
for (var i= 0; i<document.all.length; i++) { 
el= document.all[i]; 
if (!el.minmax_bound) { 
el.minmax_bound= true; 
minmax_bind(el); 
} } 
} 
var minmax_scanner; 
function minmax_stop() { 
window.clearInterval(minmax_scanner); 
minmax_scan(); 
} 
minmax_scan(); 
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY); 
window.attachEvent('onload', minmax_stop); 
@end @*/

由于只有 IE6 及其以下版本不支持min/max-width/height 属性,因此,我们可以用下面的调用方式:
Code:
<!--[if lt IE 7]> 
<script type="text/javascript" src="minmax.js"></script> 
<![endif]-->
Javascript 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
jquery衣服颜色选取插件效果代码分享
Aug 28 Javascript
在Html中使用Requirejs进行模块化开发实例详解
Apr 15 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
webpack+vue2构建vue项目骨架的方法
Jan 09 Javascript
VUE中V-IF条件判断改变元素的样式操作
Aug 09 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 Javascript
微信小程序自定义底部弹出框动画
Nov 18 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
Jan 06 Javascript
jQuery与其它库冲突的解决方法
Jun 25 #Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 #Javascript
基于jquery的checkbox下拉框插件代码
Jun 25 #Javascript
jquery keypress,keyup,onpropertychange键盘事件
Jun 25 #Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
Jun 25 #Javascript
javascript面向对象编程(一) 实例代码
Jun 25 #Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 #Javascript
You might like
wampserver改变默认网站目录的办法
2015/08/05 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
简单快速的实现js计算器功能
2017/08/17 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
如何查看浏览器对html5的支持情况
2020/12/15 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
医学生就业推荐表自我鉴定
2014/03/26 职场文书
综合素质自我评价评语
2015/03/06 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
Java基于字符界面的简易收银台
2021/06/26 Java/Android