Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #73, ДЕКАБРЬ 2006 г.

специи по вкусу

ВЯЧЕСЛАВ БАЕВ

Спецвыпуск: Хакер, номер #073, стр. 073-010-8


}

Недостаток последнего способа: жесткое позиционирование генерируемого содержимого, зависящее от количества строк в тексте.

И еще одно решение.

HTML:

ЛИСТИНГ

<div class="zag">клубы</div>

Javascript:

ЛИСТИНГ

function getElementsByClassName(node, classname) {

var a = [];

var re = new RegExp('\\b' + classname + '\\b');

var els = node.getElementsByTagName("*");

for(var i=0,j=els.length; i<j; i++)

if(re.test(els[i].className))a.push(els[i]);

return a;

}

function shadowText(originalClass, shadowClass) {

if (typeof disableShadowedText != 'undefined') return;

var els = getElementsByClassName(document, originalClass);

for (i=0;i<els.length;i++) {

var text = els[i].innerHTML;

els[i].className = shadowClass;

els[i].innerHTML = text + '<div class="'+originalClass+'" style="position:absolute;">' + text + '</div>';

}

}

$(document).ready(function() {

shadowText('zag', 'zag_shadow');

});

CSS:

ЛИСТИНГ

.zag {

тут определяем, как выглядит заголовок текста

}

.zag_shadow{

а тут, - как выглядит его тень

}

[задача]

ЛИСТИНГ

<div style="width: 100%; border: red solid 1px;">

<div style="float: left;">

<a href="#"><img src="img.gif alt="text" /></a>

<a href="#"><img src="img.gif" alt="text" /></a>

</div>

...

</div>

На практике видим следующее. В IE блок растянут на всю ширину, высота - по границам содержимого, все ОК. В Opera блок вытянулся в линию на ширину экрана. В Firefox: то же, что в Опере, но еще и нижеследующая таблица с какого-то перепугу прижалась к img'ам внутри ДИВ’ов.

Далее убираем float вложенного ДИВ’а. Во всех браузерах все становится на свои места. Но float-то нужен, да и ДИВ должен быть нормальной высоты!

Вопрос: это лечится как-то, кроме насильной установки высоты ДИВ’а?

[решение.]

Да, действительно, от float внешний контейнер не растягивается. Как преодолеть?

1 Сделать нечто с clear: both. Стандартный вариант, однако, это не слишком хорошо, исходя из идеологии css как освобождения html от ненужного мусора (а тут после каждого такого флота лишний элемент придется делать).

2 Воспользоваться свойством css2 after, имея следующий код:

HTML:

ЛИСТИНГ

<div class=”clearfix” style="width: 100%; border: red solid 1px;">

<div style="float: left;">

<a href="#"><img src="img.gif alt="text" /></a>

<a href="#"><img src="img.gif" alt="text" /></a>

</div>

...

</div>

CSS:

ЛИСТИНГ

.clearfix:after {

content: ".";

display: block;

height: 0;

clear: both;

visibility: hidden;

}

IE, естественно, этого понять не в силах. Конечно, IE сам как бы делает clear, но это применимо к элементам с указанным измерением, а указывать ширину/высоту не всегда желательно. Специально для IE делаем следующее.

CSS:

ЛИСТИНГ

/* Hides from IE-mac \*/

* html .clearfix {height: 1%;}

/* End hide from IE-mac */

Первая строка прячет от маковского IE, который не поймет слэшик. Вторая строка прячет от остальных браузеров, пользуясь каким-то загадочным свойством IE понимать сию конструкцию. Собственно, устанавливаем 1% высоты, если содержимое будет больше, - растянется автоматом.

Назад на стр. 073-010-7  Содержание