Тимофей И.
52 сообщения
#17 лет назад
Проблема вот в чем: у меня есть ячейка с параметрами
<td style="background: url(1.gif) 100% no-repeat;">

Я хочу, чтоб при ширине браузера меньше, чем 452 пикселя эти параметры менялись на
<td style="background: url(earth.gif) 0% no-repeat;">

Но, увы, недостаточные знания js не позволяют решить проблему самостоятельно.
Может кто знает как это решается?
 Falcon
400 сообщений
#17 лет назад
<html>
<head>

<style type="text/css">
td.wide { background: url(1.gif) 100% no-repeat; }
td.slim { background: url(earth.gif) 0% no-repeat; }
<style>

<script type="text/javascript">
bodyResize = function(body) {
var td = document.getElementById('mytd');
if (body.style.width > 452) {
td.className = 'wide';
} else {
td.className = 'slim';
}
}
</script>
</head>

<body onresize="bodyResize(this);">
<!-- ... -->
<td class="wide" id="mytd">
<!-- ... -->
</body>

</html>


Вот где-то так вот. Тестить было лень
Михаил В.
2195 сообщений
#17 лет назад
Цитата:
if (body.style.width > 452) {

Это круто.
Тимофей И.
52 сообщения
#17 лет назад
Большой спасибо!!

Окончательный вариант получился таким:

<html>
<head>

<style type="text/css">
td.wide { background: url(1.gif) 100% no-repeat; }
td.slim { background: url(earth.gif) 0% no-repeat; }
</style>

<script type="text/javascript">

function wre() {
var td2 = document.getElementById('mytd');
if (init() > 452) {
td2.className = 'wide';
} else {
td2.className = 'slim';
}
}
N=window.navigator.appName.substring(0,8);
function init() {
if(N=="Microsof" ){w=document.body.clientWidth;}
if(N=="Netscape" ){w=window.innerWidth;}
if(N=="Opera" ){w=window.innerWidth;};
return(w);
}
</script>
</head>

<body onload="wre();" onResize="wre();">

<!-- ... -->
<td class="wide" id="mytd">
<!-- ... -->
</body>

</html>
Константин Т.
589 сообщений
#17 лет назад
Удивительно, Оперу почему-то все учитывают, а Safari, которого гораздо больше - нет...
Михаил В.
2195 сообщений
#17 лет назад
function init(){
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

с учетом замечания Pilat66 Авторство: tigir.com
Вадим С.
49 сообщений
#17 лет назад
А зачем ужасная функция init() ?
document.body.offsetWidth и document.body.clientWidth поддерживается всеми браузерами

var td2 = document.getElementById('mytd');
- это лучше вынести из функции, т.к. при каждом ресайзе будет инициализироваться переменная и искаться mytd, что не есть хорошо

if (init() > 452) ...

По мне легче читается такой код:
td2.className = iinit() > 452 ? ''wide' : 'slim';
Михаил В.
2195 сообщений
#17 лет назад
Цитата:
document.body.offsetWidth и document.body.clientWidth поддерживается всеми браузерами

это не соответствует действительности
Вадим С.
49 сообщений
#17 лет назад
HTMLElement (HTML DOM Level 2) думает иначе:

clientWidth IE 4.0+ | Mozilla 1.0+ | Netscape 7.0+ | Opera 7.0+ | Safari 1.0+
offsetWidth IE 4.0+ | Mozilla 1.0+ | Netscape 6.0+ | Opera 7.0+ | Safari 1.0+

Другое дело, что это не будет работать для window, а для document.body пройдет на ура. Но здесь window и не требуется, можно обойтись только document.body
Михаил В.
2195 сообщений
#17 лет назад
Vadyacorp
Я и говорю не о clientWidth, а о document.body. В частности его нет в IE5.*, поддержка которого пока еще диктуется заказчиками.
Вадим С.
49 сообщений
#17 лет назад
Ну это не правда, document.body имеется уже в спецификации HTML 3.2, которую полностью держит IE5 и даже (могу ошибаться) IE4

IE4+ полностью поддерживает document.body.clientWidth и иже с ними
Вадим С.
49 сообщений
#17 лет назад
Михаил В.
2195 сообщений
#17 лет назад
Виноват, я все перепутал и заврался, все совсем наоборот. Относительно document.body.* вы во всем правы.
Извините мою глупость, пойду грызть спецификацию, чтобы не ляпнуть еще какую-нибудь глупость.

А в IE5* нет documentElement.
Нужное значение возвращает все же document.documentElement.clientWidth, только в случае c IE5* это будет document.body.clientWidth.