IE6 и min-width
Проблема в том, что в ie ширина блока не тянется до ширины окна после ресайза.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
html,body {
margin:0;
padding:0;
height:100%;
width:100%;
}
#pad {
height:100%;
/* width:expression(document.getElementById('pad').offsetWidth<685?'680px':'auto'); */
/* width:expression(document.getElementById('pad').offsetWidth<685?'680px':'100%'); */
/* width:expression(document.getElementById('pad').offsetWidth<685?'680px':document.documentElement.clientWidth+'px'); */
width:expression(document.getElementById('pad').offsetWidth<685?'680px':'1000px');
border:1px solid red;
}
</style>
</head>
<body>
<div id="pad">xxx</div>
</body>
</html>
Теперь уменьшаем окно ie6 меньше min-width, затем снова его разворачиваем на весь экран и видим, что див не растянулся. Такое наблюдается при auto, 100% и document.documentElement.clientWidth. Если же я вручную ставлю 1000px, то всё работает. Но я не могу заранее знать ширину. |
body становится такой же ширины, как и #pad.
попробуйте плясать от documentElement.offsetWidth А можно вставить в начало #pad див шириной 680px высотой 0 и overflow: hidden, и он будет распоркой, не позволяющей диву быть ýже. |
Самое интересное, что document.documentElement.clientWidth всегда показывает верные данные и при ресайзе окна на весь экран выдаётся тысяча с небольшим пикселей, но в стиль width эта тысяча просто не присваивается. Проверял алертом в head перед style.
Если с помощью css решить неудасться, то видимо придётся переделывать саму страницу, вставлять див и т.д. |
DMH,
ну… это IE6. меня обычно спасает
body {
width: expression((document.body.parentNode.offsetWidth < 1000)?"1000px":"auto");
|
Пробовал с document.documentElement.offsetWidth.
<script>
window.onresize=function() {
alert(document.documentElement.offsetWidth); // при развёртывании окна - 1024, всё как надо
}
</script>
<style>
html,body {
margin:0;
padding:0;
height:100%;
width:100%;
}
#pad {
height:100%;
border:1px solid red;
width:expression(document.getElementById('pad').offsetWidth<685?'680px':document.documentElement.offsetWidth+'px'); // а тут эти самые 1024px не присваиваются
}
</style>
|
body {
width: expression((document.body.parentNode.offsetWidth < 1000)?"1000px":"auto");
}
Оно самое. При выставлении этого expression для body, остальные expression тоже заработали. Не понял лишь одного. Почему если вручную выставить 1000px для pad, то он растянется, а если через getElementById('pad').offsetWidth, который судя по алерту больше 1000px, то нет. Хотя ie6 непредсказуем. |
Дело в том, что для того, чтобы определить новую ширину, приходится считать старую. А старая равна значению, установленному при предыдущем запуске функции пересчета.
Т.е., по-хорошему, нужно сделать примерно так:
Но тут есть одно но: для того, чтобы посчитать clientWidth, нужно сделать reflow, а для этого нужно значение самого expression, и ie6 вываливается в бесконечную рекурсию, а после этого очень скоро падает. :/ |
Решил уже не тратить время на эксперименты. Задал document.body.parentNode.offsetWidth для body, остальные элементы пускай сами растягиваются/сжимаются вслед за body.
Насчёт бесконечной рекурсии - width:expression(document.getElementById('pad').of fsetWidth<680?'680px':'auto'); От этой строчки ie6 входит в рекурсию и виснет. Оказывается нужно, чтобы второй параметр был меньше первого, например 681?'680px', тогда работает. С document.body.parentNode.offsetWidth такого не наблюдается. |
| Часовой пояс GMT +3, время: 13:37. |