Bootstrap 4 Элементы выпадающего меню Navbar справа

Как вы видите на рисунке ниже, когда я нажимаю на значок колокольчика, в правом нижнем углу значка появляется выпадающее меню. Я хочу, чтобы это выпадающее меню появлялось внизу слева, а не справа внизу. Что я должен делать?

enter image description here

Если вы хотите увидеть мой код, он написан с php:

function navigation(){
    $output = "";
    $icons = ["user","bell","envelope","commenting"];
    $rows = [2,5,5,5];
    for ($i=0; $i < count($icons) ; $i++) {
      $output .= '<div class="dropdown">';
      $output .= '<a class="nav-item nav-link" data-toggle="dropdown">';
      $output .= '<i class="fa fa-'.$icons[$i].'"></i></a>';
      $output .= '<div class="dropdown-menu text-right">';
      for ($j=0; $j < $rows[$i] ; $j++) {
        $output .= '<a href="#" class="dropdown-item">'.($j+1).'</a>';
      }
      $output .= '</div>';
      $output .= '</div>';
    }
    return $output;
  }

И затем, этот вывод будет отражен в HTML файле:

<nav class="navbar">
  <div class="container">
    <div class="navbar-nav d-flex flex-row">
      <?= navigation() ?>
    </div>
  </div>
</nav>

Ответ 1

Используйте класс dropdown-menu-right для выравнивания элементов внутри меню справа.

    <div class="dropdown-menu dropdown-menu-right text-right">
        <a class="dropdown-item" href="#">Link</a>
        <a class="dropdown-item" href="#">Link</a>
        <a class="dropdown-item" href="#">Link</a>
    </div>

http://codeply.com/go/6Mf9aK0P8G

Ответ 2

Обновление для Bootstrap4-Beta​​strong > :

Поскольку есть ошибка в bootstrap4 beta, мне пришлось добавить

.dropdown-menu-right { 
    right: 0; 
    left: auto; 
}

чтобы он работал.

Ответ 3

.dropdown-menu-right класс имеет другое поведение, если оно находится внутри a .navbar. Вы можете прочитать "Heads up" в документах здесь:

https://getbootstrap.com/docs/4.0/components/dropdowns/#menu-alignment

На самом деле, чтобы решить, я использую этот класс:

.navbar .dropdown-menu-right { 
    right: 0; 
    left: auto; 
}

Ответ 4

Я столкнулся с той же проблемой с дополнительной трудностью, потому что мое меню создано на PHP - количество элементов и выпадающий контент не фиксированы.

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

var $maxWidthElement = $('.navbar'),
    maxWidth = $maxWidthElement.width();

var positionDropdowns = function() {
    $('.dropdown-menu').each(function() {
        var $navItem = $(this).closest('.dropdown'),
            dropdownWidth = $(this).outerWidth(),
            dropdownOffsetLeft = $navItem.offset().left,
            dropdownOffsetRight = maxWidth - (dropdownOffsetLeft + dropdownWidth),
            linkCenterOffsetLeft = dropdownOffsetLeft + $navItem.outerWidth() / 2;

        if ((linkCenterOffsetLeft - dropdownWidth / 2 > 0) & (linkCenterOffsetLeft + dropdownWidth / 2 < maxWidth)) {
            // center the dropdown menu if possible
            $(this).css('left', -(dropdownWidth / 2 - $navItem.outerWidth() / 2));
        } else if ((dropdownOffsetRight < 0) & (dropdownWidth < dropdownOffsetLeft + $navItem.outerWidth())) {
            // set the dropdown menu to left if it exceeds the viewport on the right
            $(this).addClass('dropdown-menu-right');
        } else if (dropdownOffsetLeft + dropdownWidth > maxWidth) {
            // full width if the dropdown is too large to fit on the right
            $(this).css({
                left: 0,
                right: 0,
                width:
                    $(this)
                        .closest('.container')
                        .width() + 'px'
            });
        }
    });
};

var resizeTimer;

$(window).on('resize', function(e) {
    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(function() {
        maxWidth = $maxWidthElement.width();
        positionDropdowns();
    }, 250);
});

positionDropdowns();
window.onresize = positionDropdowns;

https://codepen.io/migli/pen/RELPPj

Ответ 5

Это небольшое изменение в boostrap 4. Чтобы выровнять панель навигации по правой стороне, вам нужно сделать только два изменения. они:

  1. в классе navbar-nav добавьте w-100 как navbar-nav w-100, чтобы сделать ширину 100
  2. в классе nav-item dropdown добавьте ml-auto в качестве nav-item dropdown ml-auto, чтобы поле оставалось автоматическим.

Если вы не поняли, пожалуйста, передайте это

fooobar.com/info/90547/...