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

作者: Andrew Clover     来源: doxdesk.com     时间: 2007-01-29 09:56:59
摘要: IE6 及其以下版本不支持 CSS 中的 min/max-width/height 属性相信很多人都不陌生,本文介绍了用 Javascript 修复这一问题的方法。
归类: Javascript, (X)HTML/CSS,

关键词: min, max, width, height, IE, CSS, Javascript,

IE6 及其以下版本不支持 CSS 中的 min/max-width/height 属性相信很多人都不陌生,本文介绍了用 Javascript 修复这一问题的方法。 


--------------------------------------------------------------
点此浏览示例文件
--------------------------------------------------------------


Javascript:
  1.  
  2. // 说明:让 IE6 及其以下版本支持 CSS 中 min/max-width/height 属性
  3. // 整理:http://www.codebit.cn
  4. // minmax.js: make IE5+/Win support CSS min/max-width/height
  5. // version 1.0, 08-Aug-2003
  6. // written by Andrew Clover <and@doxdesk.com>, use freely
  7.  
  8. /*@cc_on
  9. @if (@_win32 && @_jscript_version>4)
  10. var minmax_elements;
  11. minmax_props= new Array(
  12. new Array('min-width', 'minWidth'),
  13. new Array('max-width', 'maxWidth'),
  14. new Array('min-height','minHeight'),
  15. new Array('max-height','maxHeight')
  16. );
  17. // Binding. Called on all new elements. If <body>, initialise; check all
  18. // elements for minmax properties
  19. function minmax_bind(el) {
  20. var i, em, ms;
  21. var st= el.style, cs= el.currentStyle;
  22. if (minmax_elements==window.undefined) {
  23. // initialise when body element has turned up, but only on IE
  24. if (!document.body || !document.body.currentStyle) return;
  25. minmax_elements= new Array();
  26. window.attachEvent('onresize', minmax_delayout);
  27. // make font size listener
  28. em= document.createElement('div');
  29. em.setAttribute('id', 'minmax_em');
  30. em.style.position= 'absolute'; em.style.visibility= 'hidden';
  31. em.style.fontSize= 'xx-large'; em.style.height= '5em';
  32. em.style.top='-5em'; em.style.left= '0';
  33. if (em.style.setExpression) {
  34. em.style.setExpression('width', 'minmax_checkFont()');
  35. document.body.insertBefore(em, document.body.firstChild);
  36. }
  37. }
  38. // transform hyphenated properties the browser has not caught to camelCase
  39. for (i= minmax_props.length; i-->0;)
  40. if (cs[minmax_props[i][0]])
  41. st[minmax_props[i][1]]= cs[minmax_props[i][0]];
  42. // add element with properties to list, store optimal size values
  43. for (i= minmax_props.length; i-->0;) {
  44. ms= cs[minmax_props[i][1]];
  45. if (ms && ms!='auto' && ms!='none' && ms!='0' && ms!='') {
  46. st.minmaxWidth= cs.width; st.minmaxHeight= cs.height;
  47. minmax_elements[minmax_elements.length]= el;
  48. // will need a layout later
  49. minmax_delayout();
  50. break;
  51. } }
  52. }
  53. // check for font size changes
  54. var minmax_fontsize= 0;
  55. function minmax_checkFont() {
  56. var fs= document.getElementById('minmax_em').offsetHeight;
  57. if (minmax_fontsize!=fs && minmax_fontsize!=0)
  58. minmax_delayout();
  59. minmax_fontsize= fs;
  60. return '5em';
  61. }
  62. // Layout. Called after window and font size-change. Go through elements we
  63. // picked out earlier and set their size to the minimum, maximum and optimum,
  64. // choosing whichever is appropriate
  65. // Request re-layout at next available moment
  66. var minmax_delaying= false;
  67. function minmax_delayout() {
  68. if (minmax_delaying) return;
  69. minmax_delaying= true;
  70. window.setTimeout(minmax_layout, 0);
  71. }
  72. function minmax_stopdelaying() {
  73. minmax_delaying= false;
  74. }
  75. function minmax_layout() {
  76. window.setTimeout(minmax_stopdelaying, 100);
  77. var i, el, st, cs, optimal, inrange;
  78. for (i= minmax_elements.length; i-->0;) {
  79. el= minmax_elements[i]; st= el.style; cs= el.currentStyle;
  80. // horizontal size bounding
  81. st.width= st.minmaxWidth; optimal= el.offsetWidth;
  82. inrange= true;
  83. if (inrange && cs.minWidth && cs.minWidth!='0' && cs.minWidth!='auto' && cs.minWidth!='') {
  84. st.width= cs.minWidth;
  85. inrange= (el.offsetWidth<optimal);
  86. }
  87. if (inrange && cs.maxWidth && cs.maxWidth!='none' && cs.maxWidth!='auto' && cs.maxWidth!='') {
  88. st.width= cs.maxWidth;
  89. inrange= (el.offsetWidth>optimal);
  90. }
  91. if (inrange) st.width= st.minmaxWidth;
  92. // vertical size bounding
  93. st.height= st.minmaxHeight; optimal= el.offsetHeight;
  94. inrange= true;
  95. if (inrange && cs.minHeight && cs.minHeight!='0' && cs.minHeight!='auto' && cs.minHeight!='') {
  96. st.height= cs.minHeight;
  97. inrange= (el.offsetHeight<optimal);
  98. }
  99. if (inrange && cs.maxHeight && cs.maxHeight!='none' && cs.maxHeight!='auto' && cs.maxHeight!='') {
  100. st.height= cs.maxHeight;
  101. inrange= (el.offsetHeight>optimal);
  102. }
  103. if (inrange) st.height= st.minmaxHeight;
  104. }
  105. }
  106. // Scanning. Check document every so often until it has finished loading. Do
  107. // nothing until <body> arrives, then call main init. Pass any new elements
  108. // found on each scan to be bound
  109. var minmax_SCANDELAY= 500;
  110. function minmax_scan() {
  111. var el;
  112. for (var i= 0; i<document.all.length; i++) {
  113. el= document.all[i];
  114. if (!el.minmax_bound) {
  115. el.minmax_bound= true;
  116. minmax_bind(el);
  117. } }
  118. }
  119. var minmax_scanner;
  120. function minmax_stop() {
  121. window.clearInterval(minmax_scanner);
  122. minmax_scan();
  123. }
  124. minmax_scan();
  125. minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY);
  126. window.attachEvent('onload', minmax_stop);
  127. @end @*/
  128.  



由于只有 IE6 及其以下版本不支持min/max-width/height 属性,因此,我们可以用下面的调用方式:

Code:

<!--[if lt IE 7]>
<script type="text/javascript" src="minmax.js"></script>
<![endif]-->





推荐链接:(联系 QQ :326801485)