Bootstrap: Gezinti çubuğu öğesine göre açılır menünün konumu


108

Aşağıdaki açılır menüye sahibim

<label class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#">
    Action <b class="caret"></b></label>
<ul class="dropdown-menu" role="menu" aria-labelledby="lang-selector" id="lang-selector">
    dropdown content goes here
</ul>

Açılır listenin sol üst köşesi metnin sol alt köşesindedir (Eylem), ancak dropdwon'un sağ üst köşesinin konumunun metnin sağ alt yerinde olmasını umuyorum. Bunu nasıl yapabilirim?

Yanıtlar:


229

Ulaşmaya çalıştığımız etki bu:

Sağa hizalanmış bir menü

Uygulanması gereken sınıflar Bootstrap 3.1.0 sürümüyle ve yine Bootstrap 4 sürümüyle değişti. Aşağıdaki çözümlerden biri çalışmıyorsa , içe aktardığınız Bootstrap sürüm numarasını iki kez kontrol edin ve farklı bir tane deneyin.

Önyükleme 3

Sürüm 3.1.0'dan önce

pull-rightMenünün sağ tarafını imleçle hizalamak için sınıfı kullanabilirsiniz :

<li class="dropdown">
  <a class="dropdown-toggle" href="#">Link</a>
  <ul class="dropdown-menu pull-right">
     <li>...</li>
  </ul>
</li>

Keman: http://jsfiddle.net/joeczucha/ewzafdju/

V3.1.0'dan sonra

V3.1.0'dan itibaren, açılır menülerde .pull-right'ı kullanımdan kaldırdık. Bir menüyü sağa hizalamak için .dropdown-menu-right'ı kullanın. Gezinme çubuğundaki sağa hizalanmış nav bileşenleri, menüyü otomatik olarak hizalamak için bu sınıfın bir mixin sürümünü kullanır. Bunu geçersiz kılmak için .dropdown-menu-left'i kullanın.

dropdown-rightMenünün sağ tarafını imleçle hizalamak için sınıfı kullanabilirsiniz :

<li class="dropdown">
  <a class="dropdown-toggle" href="#">Link</a>
  <ul class="dropdown-menu dropdown-menu-right">
     <li>...</li>
  </ul>
</li>

Keman: http://jsfiddle.net/joeczucha/1nrLafxc/

Önyükleme 4

Bootstrap 4 sınıfı Bootstrap> 3.1.0 ile aynıdır, sadece çevreleyen işaretlemenin biraz değiştiğine dikkat edin:

<li class="nav-item dropdown">
  <a class="nav-link dropdown-toggle" href="#">
    Link
  </a>
  <div class="dropdown-menu dropdown-menu-right">
    <a class="dropdown-item" href="#">...</a>
  </div>
</li>

Keman: https://jsfiddle.net/joeczucha/f8h2tLoc/


1
Sağa ve sola çekmeyi RTL web sitesinde test ettim. Mükemmel çalışıyorlar, ancak açılır menü-sağ ve açılır menü-sol değil.
— meraklı1

Kap (.dropdown) bir "satır içi bock" görüntüsüne sahip olmalıdır. Bu örnekte, LI iyidir, ancak bir DIV olsaydı, hizalama, alt menü genişliğinden etkilenen blok öğesinin sonuna yerleştirilirdi.
— Nicholas

"Dropdown-menu-right" sınıfı Bootstrap 4 (beta) ile de hile yaptı. Teşekkürler! "sağa çek" işe yaramadı.
— Andreas Vogl

kullanarak class="dropdown"sırayla benim için önemli olan düzgün bir uyum elde etmek için
— Louis

50

Başkalarının bu sorunu nasıl çözdüğünden veya Bootstrap'in bunun için herhangi bir yapılandırması olup olmadığından emin değilsiniz.

Bir çözüm sağlayan bu konuyu buldum:

https://github.com/twbs/bootstrap/issues/1411

Gönderilerden biri şunu öneriyor:

<ul class="dropdown-menu" style="right: 0; left: auto;">

Test ettim ve işe yarıyor.

Bootstrap'in yukarıdaki css aracılığıyla değil, bunu yapmak için yapılandırma sağlayıp sağlamadığını öğrenmeyi umuyoruz.

Şerefe.


1
teşekkür ederim, bu bir gezinti çubuğunda bootstrap 4 açılır menüsü için çalıştı
— Petru Lebada

20

Bootstrap belgesine göre:

V3.1.0'dan itibaren, .pull-right açılır menülerde kullanımdan kaldırılmıştır. .dropdown-menu-right'ı kullanın

Örneğin:

<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dLabel">

1
Sağa ve sola çekmeyi RTL web sitesinde test ettim. Mükemmel çalışıyorlar, ancak açılır menü-sağ ve açılır menü-sol değil.
— meraklı1

10

Menüyü görüntülemek istiyorsanız, "dropup" sınıfını eklemeniz ve aynı div'de
varsa "dropdown" sınıfını kaldırmanız yeterlidir .

<div class="btn-group dropup">

görüntü açıklamasını buraya girin


1
"Umarım dropdwon'un sağ üst köşesinin konumu metnin sağ alt köşesinde olur" - OP
— Joe Czucha 18'16

Yorumunuzu anlayamıyorum, üzgünüm !!
— Philip Enc

İyi görünüyor ama bunu nasıl otomatik hale getirebiliriz? Sanki veri listem var ve alt kısım emin değil.
— Santosh

2

Geç olsa bile umarım birine yardım edebilirim. Açılır menü veya alt menü ekranın sağ tarafındaysa sol tarafta, menü veya alt menü solda ise sağ tarafta açılır.

$(".dropdown-toggle").on("click", function(event){//"show.bs.dropdown"
    var liparent=$(this.parentElement);
    var ulChild=liparent.find('ul');
    var xOffset=liparent.offset().left;
    var alignRight=($(document).width()-xOffset)<xOffset;


    if (liparent.hasClass("dropdown-submenu"))
    {
        ulChild.css("left",alignRight?"-101%":"");
    }
    else
    {                
        ulChild.toggleClass("dropdown-menu-right",alignRight);
    }

});

Dikey konumu tespit etmek için ayrıca ekleyebilirsiniz.

$( document ).ready(function() {
        var liparent=$(".dropdown");
    var yOffset=liparent.offset().top;
        var toTop=($(document).height()-yOffset)<yOffset;
    liparent.toggleClass("dropup",toTop);
});

https://jsfiddle.net/jd1100/rf9zvdhg/28/


üst ve alt olarak da ayarlanabilir mi? açılır bağlantı altta ise, o zaman üst yöne açmak istiyorum? Bunu başarabilir miyiz?
— Santosh

1
Dikey konumu tespit etmek için cevabımı güncelledim mi?
— JD11

1

Boostrap, adı verilen bir sınıfa sahiptir navbar-right. Yani kodunuz aşağıdaki gibi görünecek:

<ul class="nav navbar-right">
    <li class="dropdown">
      <a class="dropdown-toggle" href="#" data-toggle="dropdown">Link</a>
      <ul class="dropdown-menu">
         <li>...</li>
      </ul>
    </li>
</ul>

0

Açılır listeyi ortalamak istiyorsanız, çözüm budur.

<ul class="dropdown-menu" style="right:auto; left: auto;">
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.