让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 相关文章推荐
JS判断、校验MAC地址的2个实例
May 05 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
Google 地图类型详解及示例代码
Aug 06 Javascript
javascript 闭包详解及简单实例应用
Dec 31 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
jQuery表格(Table)基本操作实例分析
Mar 10 Javascript
Vue键盘事件用法总结
Apr 18 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
Three.js中矩阵和向量的使用教程
Mar 19 Javascript
Nuxt v-bind绑定img src不显示的解决
Dec 05 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
PHP 存取 MySQL 数据库的一个例子
2006/10/09 PHP
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
2017/02/15 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python解析命令行读取参数之argparse模块
2019/07/26 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
NumPy中的维度Axis详解
2019/11/26 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
程序员机试试题汇总
2012/03/07 面试题
介绍一下grep命令的使用
2015/06/12 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
七年级数学教学反思
2014/01/22 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
蓬莱阁导游词
2015/02/04 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
php png失真的原因及解决办法
2021/10/24 PHP