Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> А-ля многоколончатый тест, подобие -moz-column-count, но для IE 
:(
    Опции темы
SelenIT
Дата 29.9.2007, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Когда-то давно от скуки я наваял фигню, которая в идеальных условиях визуально имитирует многоколончатую раскладку. А буквально позавчера наткнулся на пост AKSа на другом форуме, от которого мне вдруг стало мучительно стыдно за тот недоделанный пример. И я решил для самореабилитации все-таки добить тему колонок.

В Gecko есть -moz-column-count и -moz-column-gap из будущего CSS3 (и еще что-то оттуда же, но я решил для начала разобраться с этим). Я попробовал заставить IE действовать аналогично им. В процессе экспериментов IE многократно падал и ругался неопознанными ошибками, пришлось прибегнуть к "черной магии" и бубну... вот предварительный результат. Прошу сравнить с поведением "нативных" колонок в FF, и высказать свое мнение:
  • нужно ли это кому-либо вообще;
  • насколько криво это реализовано в примере, и
  • можно ли это реализовать не криво и - предел мечтаний - кроссбраузерно.
За конструктивные предложения по последнему пункту буду благодарен вдвойне!



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 29.9.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(SelenIT @  29.9.2007,  02:45 Найти цитируемый пост)
мне вдруг стало мучительно стыдно за тот недоделанный пример.

Да ну-у-у! Что же теперь - всю жизнь краснеть за экспериментальные недоделки?

Цитата(SelenIT @  29.9.2007,  02:45 Найти цитируемый пост)
насколько криво это реализовано в примере

Сделал следующее. Просто взял то же изображение  и вставил его перед заголовком первого уровня. Все - при определенном размере окна размер второй из колонок становится больше остальных ровно на высоту изображения (т.е. изображение "болтается" внизу).
"Черная магия и бубен" пока не очень надежны - при увеличении шрифта и изменении размера окна мой IE "завис".
Хотя и в FF можно видеть такую неприятность, как, например, "торчащая" строка в последней колонке. Ведь на газетной полосе строка будет "торчать" ниже основного уровня скорее в первой, нежели в последней колонке...
PM MAIL   Вверх
cruelangel
Дата 29.9.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



1. не надо в вэб тащить колонки. их банально неудобно читать. это вам не бумага.
2. раз уж тащим колонки - нужно уменьшать их количество по мере уменьшения горизонтального размера страницы.
PM MAIL   Вверх
SelenIT
Дата 29.9.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



AKS, если не трудно, оцените второй вариант. Изменения по сравнению с первым:
  • однопроходный алгоритм разбивки заменен многопроходным (максимальное кол-во проходов ограничивается в коде, я ограничил тремя), при обнаружении сильно выделяющегося по высоте элемента (как та картинка) предпринимается попытка переразбить колонки заново, сделав их повыше;
  • оптимизирован алгоритм поиска места разбиения (вместо тупого перебора по словам - деление отрезка пополам);
  • обработчик onresize переписан по-человечески (надеюсь;) через attach/detachEvent;
  • увеличен таймаут при ресайзе (имхо, это должно повысить надежность против зависаний);
  • добавлены комментарии smile
Повесить IE6 новым вариантом (с 2-4 колонками) мне не удалось, IE7 - тоже, но в последнем обнаружилась странная неприятность - видимые "прыжки" колонок в процессе (пере-)разбивки. Почему-то со старым неоптимизированным алгоритмом такого не наблюдалось... не понимаю, где я накосячил...

Кстати, при каких настройках и параметрах (скрипта, системы) завис Ваш IE с первым вариантом?

Upd. Все-таки смог повесить IE6 :(. В ситуации, когда из-за "увеличения запаса" высоты колонок для картинки последняя колонка оказывается пустой (возможно при числе колонок от 5 и выше). Придется добавлять защиту от этой ситуации...


cruelangel,
1. В целом согласен, но бывают редкие исключения: очень длинные строки на широкоформатном экране читать тоже неудобно. Две-три колонки тут, имхо, вполне приемлемый компромисс. Главное, чтобы не возникало прокрутки - но как раз это условие, имхо, вполне можно обеспечить как раз с помощью presentational javascript'а.
2. Тоже согласен, но это следующий этап усовершенствования (притом пустячный, на две-три строчки кода). А пока я пытаюсь лишь воспроизвести поведение стандартных средств CSS3 smile.

Это сообщение отредактировал(а) SelenIT - 29.9.2007, 18:21


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
cruelangel
Дата 29.9.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



> очень длинные строки на широкоформатном экране читать тоже неудобно. Две-три колонки тут, имхо, вполне приемлемый компромисс.

одной колонки фиксированной ширины более чем достаточно. никогда не понимал мании засирать всё доступное пространство наплевав на эргономичность...
вот ответь мне, сколько у тебя в туалете висит рулонов туалетной бумаги? один или вся стенка утыкана колонками?
PM MAIL   Вверх
SelenIT
Дата 29.9.2007, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Добавил защиту. Вот исправленный второй вариант. Интересно, при каких условиях он завесит браузер?

Upd.: еще раз исправил код, убрал две нелепые логические ошибки и часть тестовой "черной магии", ставшей уже ненужной. Кто уже тестировал прошлую версию, прошу обновить кеш. По идее, теперь разбивка должна стать несколько ровнее...

cruelangel, 
Цитата(cruelangel @  29.9.2007,  18:57 Найти цитируемый пост)
никогда не понимал мании засирать
Цитата(cruelangel @  29.9.2007,  18:57 Найти цитируемый пост)
сколько у тебя в туалете висит рулонов туалетной бумаги?

Речь, пардон, не о дерьме, а об информации. Туалетную бумагу, в отличие от веба, я не читаю (хотя на правах тех. курьеза и существуют вот такие решения;). А эргономика восприятия информации - вещь неоднозначная и субъективная. Многих избыток пустого места просто раздражает (эдакая информационная "агорафобия")...

Это сообщение отредактировал(а) SelenIT - 30.9.2007, 01:43


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
cruelangel
Дата 29.9.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



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

с чем боролись (прыганье глазами вправо-влево с большой амплитудой) на то и напоролись (прыганье глазами вверх-вниз с большой амплитудой)

Это сообщение отредактировал(а) cruelangel - 29.9.2007, 20:07
PM MAIL   Вверх
SelenIT
Дата 29.9.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Цитата(cruelangel @  29.9.2007,  20:06 Найти цитируемый пост)
с чем боролись (прыганье глазами вправо-влево с большой амплитудой) на то и напоролись (прыганье глазами вверх-вниз с большой амплитудой)

Пардон, но в одном случае приходится прыгать каждую секунду-две, а в другом - лишь каждые полминуты-минуту. Имхо, разница ощутимая... smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
cruelangel
Дата 29.9.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



ага, а ещё раз в пять минут показывать страшную кричащую рожу... разница-то ощутима...
PM MAIL   Вверх
SelenIT
Дата 29.9.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



cruelangel, я давно понял и принял к сведению Вашу позицию, так что хватит ёрничать. Вообще насчет того, применять ли и где - это не ко мне, а к дизайнерам, которым это иногда нужно для художественного эффекта (ради чего в CSS3 и предусмотрели соотв. св-ва, которые я пытаюсь эмулировать).

Но если есть желание конструктивно покритиковать мою последнюю реализацию - буду благодарен smile.

Это сообщение отредактировал(а) SelenIT - 29.9.2007, 21:20


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
cruelangel
Дата 29.9.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



лучше так: отображаем всё в одну колонку, смотрим, какая высота получилась, делим её на количество колонок, смотрим у параграфов offsetTop и перевалившие за отметку - переносим на следующую колонку. или дизигнерам ещё и параграфы нужно резать посередине?
PM MAIL   Вверх
SelenIT
Дата 29.9.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



Оно практически так и происходит, только offsetTop снимается не у блоков, а у textRange, которое изначально охватывает весь текст в одной колонке. Передвигая начало textRange по словам, нахожу момент превышения отметки, все, что ниже - вырезаю и вставляю в следующую колонку, и т.д.

Цитата(cruelangel @  29.9.2007,  21:25 Найти цитируемый пост)
или дизигнерам ещё и параграфы нужно резать посередине?

Имхо, именно так. Самая первая мысль была отталкиваться от блочных элементов, но из-за этого очень уж безобразная рваная нижняя граница получается, если на зону переноса попадает блок строчек на 8-10...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 30.9.2007, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



SelenIT, сейчас сохранил страничку и поэкспериментировал. 
Обрадовать нечем. С ходу "повесил" IE следующим образом. 
1. Установил размер шрифта "Самый крупный".
2. Установил размер страницы body.offsetWidth = 852||documentElement = 892 (это я быстренько вычислил "уязвимую" ширину).
3. Нажал на кнопку "разбить".
В таких условиях мой IE "виснет" сразу и без исключений.
Попробовал то же самое в  Avant Browser. Он, в отличие от IE, сразу не зависает. Но это легко происходит, если свернуть окно наполовину. То же самое и в AOL Explorer'е.
Сначала подумал, что может быть надо увеличить время таймаута. Но это не помогло.
Закомментировал вот эти строки:
Код

// точная подгонка места разбивки
while (rng.offsetTop < heightLimit) {
    rng.moveStart('word',1);
}

 - тут уж, конечно же, "зависания" прекратились...
PM MAIL   Вверх
SelenIT
Дата 30.9.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



AKS, огромное спасибо! Обнаружение и локализация бага - уже радость. Фиксю, обновляю пример и ставлю плюс!

И все-таки, как ни стараюсь, не могу обойтись совсем без точной подгонки. Страшно туплю, но в упор не понимаю: почему такой 
Код

                    // быстрая прикидка места разбивки
                    var wordCnt = rng.text.split(/\W+/).length;
                    var step = 1;
                    while (step < wordCnt/2) { step<<=1 }
                    for (; step>=1; step>>=1) {
                        rng.moveStart('word',step);
                        if (rng.offsetTop >= heightLimit) rng.moveStart('word',-step);
                    }
                    // точная подгонка места разбивки, если надо
                    if (rng.offsetTop < heightLimit) {
                        rng.moveStart('word',1);
                    }

и такой 
Код

                    // поиск места разбивки одним циклом
                    var wordCnt = rng.text.split(/\W+/).length;
                    var step = 1;
                    while (step < wordCnt/2) { step<<=1 }
                    for (; step>=1; step>>=1) {
                        rng.moveStart('word',step);
                        if (step > 1 && rng.offsetTop >= heightLimit) rng.moveStart('word',-step);
                    }

дают разный результат - во втором случае выделение упорно обрывается на одно слово раньше, чем надо? Почему второй вариант бинарного поиска не останавливается в нужном месте? Чувствую, что где-то я попросту влепил абсолютно детскую, тупейшую и позорную ошибку в логике... И вообще, как надежнее всего проконтролировать, что мое textRange не "вывернулось наизнанку" (начало не перескочило конец) и не покинуло границ размечаемой колонки?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 30.9.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(SelenIT @  30.9.2007,  16:07 Найти цитируемый пост)
...мое textRange не "вывернулось наизнанку" (начало не перескочило конец)

А Вы не пробовали создать дубликат текстового диапазона, и манипулировать им?
Я об этом подумал, прочитав "начало не перескочило конец". Имея два диапазона, Вы как-раз могли бы сравнивать эти "начало/конец" при помощи метода compareEndPoints. Метод имеет "шикарный" набор параметров - наверняка с его помощью можно получить более широкий контроль за фрагментами текста...

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.