позиционирование относительно центрированного элемента

#javascript #jquery

#javascript #jquery

Вопрос:

У меня возникли проблемы с позиционированием моего меню CSS — .dropdown в отношении центрированного изображения — #logo , оно должно иметь абсолютное положение, я написал функцию, которая должна это делать:

 $(function() { 
      var $logo = $('#logo');
      var marginRight = ($(window).width() - ($logo.offset().left   $logo.outerWidth()));
      $('.dropdown').css('marginRight', marginRight);
});
  

Это прекрасно работает в IE, но не всегда в Chrome и Firefox. Почему?
Это веб-сайт:

сайт во время производства

Комментарии:

1. Позиционирование — это стиль, и его предпочтительно не следует выполнять с помощью JavaScript.

2. @SvenvandeScheur Я имею в виду, вы правы, но для этого есть причины. Я думаю, мы все можем согласиться, особенно когда дело доходит до центрирования, что вам нужно работать немного нестандартно. По какой-то причине это проблема, для которой веб-стандарты просто не могут обеспечить достойное и простое решение.

3. 9/10 вы можете сделать это без js. Например, с помощью flexbox / margin и / или transform: translate(). К сожалению. Мне не ясно, какова цель. Без урезанной скрипки я ничего не могу рекомендовать.

Ответ №1:

Попробуйте просто установить

 $('.dropdown').css('right', margright);
  

Комментарии:

1. Это не помогло. Когда вы просматриваете это в первый раз (или после очистки кэша) в Firefox, меню отображается слишком много справа, при обновлении оно выглядит хорошо..

Ответ №2:

Попробуйте обернуть свой код:

 $('#logo').on('load', function() {
   // you code here
});
  

Потому что вы написали код внутри обратного вызова document ready, но изображение еще не загружается и вы не знаете его размеры.

Ответ №3:

Вы не сказали, где именно вы хотите разместить свое выпадающее меню, но предполагая, что вы хотите, чтобы оно было посередине под логотипом, вы можете это сделать

 $(function() { 
    var logo = $('#logo');

    logo.on('load', function() {
        var left = logo.offset().left   logo.outerWidth()/2;
        $('.dropdown').css('left', left);
    });
});
  

Комментарии:

1. Это не помогает, я хочу поместить выпадающее меню под правой частью логотипа, когда я помещаю этот код, поведение Firefox странное

Ответ №4:

@SvenvandeScheur, спасибо за внимание. Я нашел решение (код javascript отлично работает на странице), но для всех было бы интересно, как это сделать с помощью flexbox. Я хочу, чтобы выпадающее меню помещалось под нижний правый угол центрированного изображения

https://jsfiddle.net/1ddk7e5k/

Этот код работает на странице:

$( "#logo" ).load(function() {
var margright=(($('.centered').width()-$('#logo').width())/2);
$('.dropdown').css('marginRight',margright);
});