让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 相关文章推荐
javascript支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
jquery multiSelect 多选下拉框
Jul 09 Javascript
javascript实现json页面分页实例代码
Feb 20 Javascript
jQuery选择器用法实例详解
Dec 17 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
Jun 21 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
Vue.js结合bootstrap实现分页控件
Mar 10 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
vue初始化动画加载的实例
Sep 01 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
vue 根据选择条件显示指定参数的例子
Nov 09 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
德生9700DX电路分析
2021/03/02 无线电
Smarty日期时间操作方法示例
2016/11/15 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
js如何打印object对象
2015/10/16 Javascript
JS常用知识点整理
2017/01/21 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
Python struct.unpack
2008/09/06 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
pandas 选择某几列的方法
2018/07/03 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Python列表切片常用操作实例解析
2020/03/10 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
大学应届毕业生个人求职信
2013/09/23 职场文书
函授本科自我鉴定
2013/11/03 职场文书
护理学中专毕业生求职信
2013/11/11 职场文书
《乡下孩子》教学反思
2014/04/17 职场文书
给学校的建议书范文
2014/05/15 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
html5表单的required属性使用
2021/07/07 HTML / CSS
Python MNIST手写体识别详解与试练
2021/11/07 Python
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技