Pull to refresh

Comments 31

Все равно неровно получилось) нерешаемая задача. За отсутствие ии - респект

Идеал недостижим, но это не значит, что к нему нельзя стремиться.

P.S. Моя первая статья на Хабре и первый коммент под ней ^_^

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

Стоит так же упомянуть о известной подключаемой библиотеке, решающей как раз данную задачу, но, к сожалению, совсем вылетело из головы её название и нагуглить не смог

Masonry. В свое время одноименную штуку в CSS пытались протолкнуть, но как-то не зашло.

Не совсем понятно, зачем этот инструмент переизобретать. Он как 10 лет назад решал свою задачу, так и продолжает ее решать.

Точно. Это та штука.

Благодарю, что напомнили.

На тот момент, когда решал эту проблему, эта библиотека мне показалась слишком тяжеловесной. Там, если мне не изменяет склероз, позиция каждого блока высчитывалась и размещение было через абсолютное позиционирование. Что для динамического изменения содержимого - сомнительно.

Современная версия, на первый взгляд, оно там вообще вроде через canvas, как-то реализовано....

P.S. Без специальных средств сайт проекта не открывается. Дожили...

в сравнении с masonry такой подход действительно более легковесный, и думаю, что можно было бы это оформить в свою опенсорсную либу

А прикладная задача какая была, если не секрет? Виджеты распределять по панели?

Да, виджеты на панели. С возможностью добавления / удаления.

В ленту их располагать в один ряд - слишком расточительно с точки зрения использования полезного пространства. Стандартизировать размер для всех - не получается, слишком разное содержимое.

Ясно, спасибо. Лично я для виджетов предпочитаю олдскульный грид + перетаскивание.

ребята, есть же уже готовое решение, применяется при паковании текстур в атлас

Можно поподробнее?

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

Есть такой вариант от Димы Карловского ( создателя $mol

https://best-online-games.github.io/prof/#!=prof

Тут пример размещения, работает как для телефонов так и для декстопа

Компонент $mol_gallery

У меня этот пример почему-то глючит, вылезает за пределы экрана. (Десктоп Хром)

Диму Карловского на Хабре не особо жалуют, на сколько я могу судить по реакциям на его комментарии к статьям. При чём не понятно почему, вроде вполне нейтральные по тону и содержанию сообщения...

Покажи пожалуйста что там за баг, у меня тоже хром и ок

К Диме личное отношение негативное сложилось ( не у меня ) за продвижения своего фрейморка

Баг
Баг

Содержимое обрезано справа ибо не вмещается (почему-то) в доступную ширину окна. Это при непосредственной загрузке страницы. Если ширину окна "подвигать" вручную, то содержимое адаптируется (очевидно скрипт срабатывает) и всё тогда вмещается и соответственно выглядит нормально.

Проблема в изначальной "подстройке" под ширину окна при загрузке страницы.

А понял, не оно не обрезано, но да, при первом открытии неверное местоположение

Там у тебя на скрине скролбар внизу виден, по нему видно что страница посередине открылась "без доводки"

Под "обрезано" я как-раз и имел ввиду, что не вмещается и скроллом вправо можно увидеть "конец".

Пардон, нужно было выразится точнее.

Да, всё ок, поправим доводку

А как тебе само расположение блоков ?

Ну, само решение через подгонку размеров самих внутренних блоков (только в большую сторону от оригинала, как я понимаю) - как минимум интересно.

Но, вот тут не оно не особо выглядит (ширина примерно 1600px) на мой вкус.

При ширине ~ 1600px
При ширине ~ 1600px

Я так понял, что это у вас меню. Меню бы я делал по другому.

Лет 5 назад я бы реализовал классический горизонтальный / вертикальный блок / список "кнопок" с выпадающим для каждого уровня вложенности подменю.

Сегодня бы сделал тоже самое но с выпадающим "Мега" блоком на всё доступное пространство со всем вложенным содержимым.

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

Прикольно, это у нас буклетный дизайн, меню прячется за экраном на телефоне когда места мало

А в галерее даже не знаю как лучше

За без-ии респект.

Пробовали использовать flex-basis: auto / flex: initial?

У меня менять размеры самих внутренних блоков не предполагается. А без этого flex-basis / flex: initial ничего нового не привнесут, как я полагаю.

Наличие переполнения по высоте определяется так: .scrollHeight > .scrollHeight.

Пригляделся, вроде показалось, что никогда условие не выполнится.

/* цикл увеличения высоты контейнера "node" проводит итерации до тех пор
, пока переполнение по высоте (.scrollHeight > .scrollHeight) и ширине (.scrollWidth > .offsetWidth) не будет устранено */

А, не, не показалось...

Но в коде же нормально, scroll с offset:

while((node.scrollHeight > node.offsetHeight || node.scrollWidth > node.offsetWidth) && savety){

P.S. "savety" это от safety или советов? ;-)

Спасибо за уточнения.

Поправил.

Завидую вашей внимательности. :)

Хорошая статья, удачи на Хабре!

а какой смысл писать JS в 28 строк, если верное направление было с column-count: 4?

если ширина колонок известна, то не вижу проблемы.

хорошо под разные разрешения мы напишем еще 3 строки медиазапросов, но это гораздо лучший и менее затратный способ чем писать JS.

P.S. такое реализовывал сам и работает без косяков в разных браузерах, 10 лет назад такое писалось на jquery с библиотекой mansory

Sign up to leave a comment.

Articles