v-lukoyanofff
@v-lukoyanofff
full stack dev + Yii 2

Как сделать так, чтобы JS витжет не ломал изначальную верстку на странице?

Задача такова: нужно рализовать при помощи JS витжета подгрузку кнопки рядом с каждой картинкой, помеченной определенным классом.

Теперь подробнее. На странице есть одна или более картинка с определенным классом, например our-class. На страницу подгружается витжет на JS, который будет производить логику с каждой такой картинкой. Он будет брать ее src, отправлять к нам на сервер, получать массив результатов. Если результаты есть, то нужно показать кнопку поверх картинки. При клике на кнопку открывается блок с результатами рядом с кнопкой.

Так вот. Есть две сложности.

1. Как правильно спозиционировать КНОПКИ и БЛОКИ С РЕЗУЛЬТАТАМИ относительно картинок, чтобы не сломать чужую верстку? Верстка может быть любая, главное в ней есть <img class="our-class">.

В данный момент я вычисляю left и top относительно документа, но есть минусы: надо при каждом обновлении DOM и ресайзе документа пересчитывать все-все-все координаты.

Предвижу ответ: оберни в родительский DIV! Но не сломает ли это верстку чью-нибудь? Вдруг там какой-нибудь inline зажит.

2. На узких экранах div с результатами любит вылезти куда-нибудь за пределы. Есть ли способ это побороть? Как безошибочно определить, что элемент вылез за границы window?
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 3
@falke2
1. Оберни в div с display:inline-block; и дай ему position:relative; после этого все абсолютные блоки внутри будут позиционироваться относительно его, а не документа.
так же не забывай про псевдо селекторы :before и :after, скорее всего можно чисто на них вывезти
2. Перещитывай в какой стороне экрана стоит кнопка, если в правой - отображай результат слева, если в левой - справа. Задай блоку с результатами max-width с шириной экрана
Ответ написан
Комментировать
@darksladen
Так оберни в div с inline, в чем проблем? Другого варианта нет, да и не нужен он вовсе, все решается обычным css!
Ответ написан
Exploding
@Exploding
wtf?
1. Оберни в родительский div. У которого размеры 0x0.
2. Универсальным вариантом было бы отображать див с результатами как модальное окно, по центру экрана. Типа темный фон, бла-бла-бла...
Или же если див будет персональный для каждого блока - тогда просто абсолютным slide-layer-ом его в нашем первом диве.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы