Ксдыщь!

Дилетантские заметки про XSLT/XPath, HTML/CSS и всякую фигню

Записи в разделе 'javascript'

Opera 7 Float Bug

17 ноября 2006 · Свалка

Думаю, большинство разработчиков уже успели столкнуться с багом при обработке вложенных float’ов в седьмой Опере.

Наиболее часто это всплывает при работе с горизонтальными списками:

ul {
    float:left;
    }
    li {
        float:left;
        }

Если для списка не задать ширину, то его элементы феерично выстроятся по вертикали. Во многих случаях проблему удается обойти обходными путями, но, к сожалению, не всегда.

Чип и Дейл спешат на помощь, собственно. Небольшая js-функция, которая возвращает все на свои места (для определения версии браузера используется Browser detect от PPK).

function fixOpera () {
    if (BrowserDetect.version < 8) {
        var listWidth = 0;
        var list = document.getElementById('test');
        var listItems = list.getElementsByTagName('li');
        for (var i = 0; i < listItems.length; i ++) {
            listWidth += listItems[i].offsetWidth;
        }
        list.style.width = listWidth;
    }
}

По необходимости меняем теги на нужные.

Рабочий пример. Для заценки необходима седьмая Опера, разумеется.