ПафНутиЙ 31 Опубликовано: 15 февраля 2011 Рассказать Опубликовано: 15 февраля 2011 Дорого времени суток, я уже написал в службу тех поддержки, но всё же решил создать тему т.к. наверняка я не первый у кого может возникнуть такой неприятный момент..... В общем обнаружил ОЧЕНЬ неприятный баг, даже не бак а сильную недоработку скрипта. Дело в том, что если выводить комментарии через отдельный тег comments и "обернуть" этот тег в блок с относительным позиционированием (position:relative;) - визуальные эффекты при добавлении/быстром редактировании/удалении комментария ведут себя КРАЙНЕ неадекватно. Страница прокручивается не до id комментария, а до самого верха. Так же подозреваю, что если использовать блоки с position:relative в fullstory.tpl при обычном выводе комментариев - будет аналогичный "эффект". т.е. если сделать в fullstory.tpl примерно так: <div style="position: relative;"> <div style="position: absolute;"> {comments} </div> </div> или в comments.tpl как то так: <div style="position: relative;"> <div style="position: absolute;"> {comment} </div> </div> или даже написать <body style="position: relative;"> это "убъёт" юзабилити сайта в части, касающейся комментирования новостей. Оно конечно лечится убиранием функции scrollTop из dle_js.js, но как быть админам-блондинкам, у которых хватает ума обновить двиг до актуальной версии, но которые панически боятся лезть в код.... P.S. Прверено на стандартном шаблоне (Default). Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 15 февраля 2011 Рассказать Опубликовано: 15 февраля 2011 Прочитайте описание свойства http://htmlbook.ru/css/position Положение элемента устанавливается относительно его исходного места. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону от первоначального расположения. т.е. установив данное свойство вы обнуляете координаты элемента в значения 0. И никаких багов в самом скрипте нет, он вам и перемещает в нулевую позицию.<div style="position: relative;"> <div style="position: absolute;"> {comments} </div> </div>[/code] в корне неверная верстка, position: absolute; не привязывается к position: relative;, поэтому то что вы написали в плане верстки в корне неверно.И position: relative; применяется не для отображения в данном случае, а для сброса координат, т.к. иногда это нужно, поэтому и свойство такое есть, а для чего вы сбрасываете координаты непонятно. Цитата Ссылка на сообщение Поделиться на других сайтах
ПафНутиЙ 31 Опубликовано: 15 февраля 2011 Рассказать Опубликовано: 15 февраля 2011 Автор Я конечно понимаю, что Тех поддержке не до вчитывания в тексты, да и видать в вёрстке Вы понимаете не больше, чем я в php Итак читаем внимательно: Положение элемента устанавливается относительно его исходного места. т.е. если блок с относительным позиционированием будет стоять в коде после блока с высотой 100px, то его позиция в браузере будет top: 100px; Теперь читаем ту же страницу, но чуть выше: Если у родителя значение position задано как fixed, relative или absolute, то отсчет координат ведется от края родительского элемента. в корне неверная верстка, position: absolute; не привязывается к position: relative;, поэтому то что вы написали в плане верстки в корне неверно. Вы не правы, очень даже привязывается, особенно когда нужно расположить один элемент относительно другого на определённом расстоянии, при этом родитель должен оставться на своём месте. Смотрим _wararena.ru любую новость с комментариями. Цитата Ссылка на сообщение Поделиться на других сайтах
ПафНутиЙ 31 Опубликовано: 16 февраля 2011 Рассказать Опубликовано: 16 февраля 2011 Автор После курения мануалов решил заменить position на offset и всё заработало как часы. Всё из-за того, что position вычисляет положение элемента относительно его родителя, а offset - относительно документа. Ув. Разработчик, очень хотелось бы видеть в следующей версии исправленный dle_js.js Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 095 Опубликовано: 16 февраля 2011 Рассказать Опубликовано: 16 февраля 2011 Итак читаем внимательно: т.е. если блок с относительным позиционированием будет стоять в коде после блока с высотой 100px, то его позиция в браузере будет top: 100px; Да нет, это как раз вы не понимаете сути того что написано в документации. Относительно исходного места, это значит координаты начнут отчитываться от родителя слоя, а не относительно начала вашей страницы, а у элемента находящегося после родителя, координаты относительно него будут 0. И добавлять в скрипт нечего, вы просто неверно делаете верстку, о чем вам сказано изначально. Обнулив координаты слоя, с координат относительно страницы на координаты относительно родительского слоя, вы ожидаете что браузер вдруг узнает из воздуха его реальные координаты. Так не бывает. Цитата Ссылка на сообщение Поделиться на других сайтах
ПафНутиЙ 31 Опубликовано: 16 февраля 2011 Рассказать Опубликовано: 16 февраля 2011 Автор вы просто неверно делаете верстку, о чем вам сказано изначально. Сколько верстальщиков, столько и мнений. При этом все в бОльшей части будут правы. Покажите мне пожалуйста где написано, что нельзя применять абсолютное позиционирование внутри блока с относительным позиционированием. И добавлять в скрипт нечего, я не прошу добавлять какие то лишние вещи в скрипт, а прошу заменить position на offset - это никоим образом не повлияет на уже существующий функционал, однако исправит пусть мелкий, но очень досадный баг. _http://pafnuty.name/thinking/93-problema-positionrelative-i-dle_jsjs-v-dle-90-92.html я впринципе расписал суть проблемы тут, если интересно. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.