sol tarafta twitter bootstrap alt menüsü nasıl açılır?


93

Açılır menüde twitter önyükleme alt menüsü oluşturmaya çalışıyordum ama bir sorunla karşılaştım: Sayfanın sağ üst köşesinde açılır menüm var ve bu menünün bir alt menüsü daha var. Ancak, alt menü açıldığında - pencereye sığmaz ve çok fazla sağa gider, böylece kullanıcı yalnızca ilk harfleri görebilir. Bu alt menüyü sağa değil sola açacak şekilde nasıl yapabilirim?


6
Snippet kodunu gönderin.
Shankar Cabus

2
Bootstrap 4'te eklemek .pull-rightüzerinde .dropdownkonteyner.
jbyrd

Yanıtlar:


109

En basit yol, pull-leftsınıfı sizin sayfanıza eklemektir .dropdown-submenu

<li class="dropdown-submenu pull-left">

jsfiddle: DEMO


UL düzeyindeki Matt ile birlikte bu yanıt, bootstrap kullanırken bunu gerçekleştirmenin doğru yoludur.
KeyOfJ

1
OP'nin sorusu ve cevabım Ağustos 2012'den. Bu arada, Bootstrap değişti, yani artık .pull-left sınıfınız var. O zamanlar cevabım doğruydu. Artık css'i manuel olarak ayarlamanıza gerek yok, o .pull-left sınıfına sahipsiniz.
Miljan Puzović

1
Bu, bazı durumlarda iyi çalışıyor, ancak bu keman gibi ana menüdeki öğeler çok uzunsa kesiliyor : jsfiddle.net/szx4Y/446 Bir düzeltme için hızlı bir fikri olan var mı?
Aaron Lifshin

2
@AaronLifshin .dropdown-submenu.pull-left>.dropdown-menu { width: 100%; } Zarif bir çözüm değil, jsfiddle.net/r1v90tas
Schmalzy

1
@Schmalzy daha fazla inceleyerek, width: 100%, jsfiddle.net/r1v90tas/1 alt menüsünde uzun öğelerle farklı bir soruna neden oluyor ve bu, burada gösterildiği gibi min-width:% 100 kullanılarak düzeltiliyor: jsfiddle.net/ r1v90tas / 2
Aaron Lifshin

118

Bunu doğru anladıysam, bootstrap sadece bu durum için bir CSS sınıfı sağlar. 'Ul' menüsüne 'sağa çekin' ekleyin:

<ul class="dropdown-menu pull-right">

..ve sonuç, menü seçeneklerinin aşağıya açılan düğme ile aynı hizada sağa hizalı görünmesidir.


2
UL düzeyinde büyük katkı Matt.
KeyOfJ

3
kesinlikle, ana menüye ihtiyacım vardı, alt menüye değil. bu yüzden <ul> öğesini hedeflemem gerekiyordu. kafa karıştırıcı çünkü onu sola kaydırmak istiyorsun, ancak bunu pull-rightbaşarmak için sınıfı kullanıyorsun .
FireDragon

1
Bu cevap Bootstrap 3.x için geçerli, bu yüzden şu anda en doğru cevap gibi görünüyor.
alx

1
Kabul edilen cevap benim ve Bootstrap 3 için çalışmıyor, ama bu işe yarıyor!
Josh Bilderback

1
Doğru. .pull-right ekleyin ve açılır listeniz ekranın sağ tarafından dışarı çıkmayacaktır!
slindsey3000

26

Mevcut sınıf .dropdown-submenu > .dropdown-menuvar left: 100%;. Bu nedenle, sol tarafta alt menüyü açmak istiyorsanız, bu ayarları negatif sol konuma getirin. Örneğin left: -95%;. Şimdi sol tarafta alt menüyü göreceksiniz ve mükemmel önizleme elde etmek için diğer ayarları değiştirebilirsiniz.

İşte DEMO

DÜZENLEME: OP'nin sorusu ve cevabım Ağustos 2012'den. Bu arada, Bootstrap değişti, yani artık .pull-left sınıfınız var. O zamanlar cevabım doğruydu. Artık css'i manuel olarak ayarlamanıza gerek yok, o .pull-left sınıfına sahipsiniz.

DÜZENLEME 2: Demolar çalışmıyor çünkü Bootstrap URL'lerini değiştirdi. Sadece jsfiddle'daki harici kaynakları değiştirin ve yenileriyle değiştirin.


Teşekkürler. Neredeyse tam olarak ihtiyacım olan şey, ancak olmalı left: -90%;(aksi halde faremi o alt menüye taşıyamıyorum, çünkü kayboluyor).
kovpack

Dediğim gibi, bu ne yapman gerektiğine dair bir fikir.
Yardımcı olduğuma

Örneğiniz yalnızca belirli durumlarda işe yarar. Buraya bak: jsfiddle.net/mQnv2/305
Alexandru R

Schmalzy ve Matt'in gönderilerinde belirtildiği gibi bootstrap sınıflarının kullanılması gerektiği için bu doğru cevap değildir.
KeyOfJ

1
Bu gönderi tam bir yıl daha eski. Bu arada, bootstrap değişti, böylece Schmalzy'nin cevabı daha zarif oldu. O zamanlar, Bootstrap'in sola çekme sınıfı yoktu.
Miljan Puzović

20

Bootstrap v4 kullanıyorsanız, bunu yapmanın yeni bir yolu var.

Eleman .dropdown-menu-rightüzerinde kullanmalısınız .dropdown-menu.

<div class="btn-group">
  <button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Right-aligned menu
  </button>
  <div class="dropdown-menu dropdown-menu-right">
    <button class="dropdown-item" type="button">Action</button>
    <button class="dropdown-item" type="button">Another action</button>
    <button class="dropdown-item" type="button">Something else here</button>
  </div>
</div>

Koda bağlantı: https://getbootstrap.com/docs/4.0/components/dropdowns/#menu-items


Bu aynı zamanda boostrap sürümleri> = 3.1 için de geçerlidir ... bu stackoverflow.com/a/19253730/3354228
The.Bear

1
kesinlikle en kolay cevap
crodev

Bu, sürüm 4 için biraz doğrudur. Sözdizimi dropleftve olarak değişmiştir, droprightancak yanıtın içeriği doğrudur. Teşekkürler!
cfnerd

12

Görevi yapmanın doğru yolu şudur:

/* Submenu placement itself */
.dropdown-submenu > .dropdown-menu { left: auto; right: 100%; }
/* Arrow position */
.dropdown-submenu { position: relative; }
.dropdown-submenu > a:after { position: absolute; left: 7px; top: 3px; float: none; border-right-color: #cccccc; border-width: 5px 5px 5px 0; }
.dropdown-submenu:hover > a:after { border-right-color: #ffffff; }

Daha çok tercih .dropdown-submenu { position: relative; text-align:right; }Ok soldayken metni sağa konumlandırmak için.
Arvind

4

Sağ tarafta yeterli alan olup olmadığını gösteren bir javascript işlevi oluşturdum. Varsa sağ tarafta gösterecek, yoksa sol tarafta gösterecektir.

Test edilen yer:

  • Firefox (mac)
  • Chorme (mac)
  • Safari (mac)

Javascript:

$(document).ready(function(){
    //little fix for the poisition.
    var newPos     = $(".fixed-menuprofile .dropdown-submenu").offset().left - $(this).width();
    $(".fixed-menuprofile .dropdown-submenu").find('ul').offset({ "left": newPos });

    $(".fixed-menu .dropdown-submenu").mouseover(function() {
        var submenuPos = $(this).offset().left + 325;
        var windowPos  = $(window).width();
        var oldPos     = $(this).offset().left + $(this).width();
        var newPos     = $(this).offset().left - $(this).width();

        if( submenuPos > windowPos ){
            $(this).find('ul').offset({ "left": newPos });
        } else {
            $(this).find('ul').offset({ "left": oldPos });
        }
    });
});

çünkü bu düzeltmeyi, üzerinde yeni bir sınıf oluşturduğum her menü öğesine eklemek istemiyorum. sabit menüyü ul üzerine yerleştirin:

<ul class="dropdown-menu fixed-menu">

Umarım bu senin için sonuçlanır.

ps. Safari ve chrome'da küçük bir hata, ilk hover onu sola mutch yerleştirecek, eğer düzeltirsem bu yazıyı güncelleyecektir.


+1: Birkaç değişiklik yaptım ama bu beni çalışan bir çözüme götürdü.
zimdanen

Harika çözüm!
arefin2k

4

Yalnızca bir seviyeniz varsa ve bootstrap 3 kullanıyorsanız pull-right, ulöğeye ekleyin

<ul class="dropdown-menu pull-right" role="menu">

2

Aslında - eğer dropdownsarmalayıcıyı yüzdürmek sizin için sorun değilse - bunu navbar-right,dropdown .

Gezinme çubuğunda olmadığı için hile gibi görünüyor, ama benim için iyi çalışıyor.

<div class="dropdown navbar-right">
...
</div>

Daha sonra başka bir ile yüzer özelleştirebilirsiniz pull-leftdoğrudan dropdown...

<div class="dropdown pull-left navbar-right">
...
</div>

... ya da etrafına sarıcı olarak ...

<div class="pull-left">
  <div class="dropdown navbar-right">
  ...
  </div>
</div>

1

LESS CSS kullanıyorsanız, açılır menüyü bağlantı okuyla hareket ettirmek için biraz mixin yazdım:

.dropdown-menu-shift( @num-pixels, @arrow-position: 10px ) {  // mixin to shift the dropdown menu
    left: @num-pixels;
    &:before { left: -@num-pixels + @arrow-position; }        // triangle outline
    &:after  { left: -@num-pixels + @arrow-position + 1px; }  // triangle internal
}

Daha sonra örneğin .dropdown-menubir id ile bir a taşımak dropdown-menu-xiçin şunları yapabilirsiniz:

#dropdown-menu-x {
    .dropdown-menu-shift( -100px );
}

1

Sağ tarafta yeterli alan olup olmadığını gösteren bir javascript işlevi oluşturdum. Varsa sağ tarafta gösterecek, yoksa sol tarafta gösterecektir. Yine sağ tarafta yeterli boşluk varsa, sağ tarafta görünecektir. bu bir döngü ...

$(document).ready(function () {

$('body, html').css('overflow', 'hidden');
var screenWidth = $(window).width();
$('body, html').css('overflow', 'visible');

if (screenWidth > 767) {

    $(".dropdown-submenu").hover(function () {

        var dropdownPosition = $(this).offset().left + $(this).width() + $(this).find('ul').width();
        var newPosition = $(this).offset().left - $(this).find('ul').width();
        var windowPosition = $(window).width();

        var oldPosition = $(this).offset().left + $(this).width();
        //document.title = dropdownPosition;
        if (dropdownPosition > windowPosition) {
            $(this).find('ul').offset({ "left": newPosition });
        } else {
            $(this).find('ul').offset({ "left": oldPosition });
        }
    });

}

});


işe yarıyor! Ama sınırlayalım: var newPosition = Math.max (10, ...);
djdance

0

Bootstrap'in en son sürümünü mü kullanıyorsunuz? Html'yi Fluid Layout örneğinden aşağıda gösterildiği gibi uyarladım . Bir açılır menü ekledim ve pull-rightsınıfı ekleyerek en sağ tarafa yerleştirdim . Açılır menünün üzerine gelindiğinde, otomatik olarak sola çekilir ve hiçbir şey gizlenmez - tüm menü metni görünür. Herhangi bir özel css kullanmadım.

<div class="navbar navbar-inverse navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <a class="brand" href="#">Project name</a>
      <div class="nav-collapse collapse">
        <ul class="nav pull-right">
          <li class="active"><a href="#">Home</a></li>
          <li><a href="#about">About</a></li>
          <li><a href="#contact">Contact</a></li>
          <li class="dropdown open">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="#">Action</a></li>
              <li><a href="#">Another action</a></li>
              <li><a href="#">Something else here</a></li>
              <li class="divider"></li>
              <li class="nav-header">Nav header</li>
              <li><a href="#">Separated link</a></li>
              <li><a href="#">One more separated link</a></li>
            </ul>
          </li>
        </ul>
        <p class="navbar-text pull-right">
          Logged in as <a href="#" class="navbar-link">Username</a>
        </p>
      </div><!--/.nav-collapse -->
    </div>
  </div>
</div>

Bu tam olarak ihtiyacım olan şey değil. Bu sadece açılır menü (ben de sağa çek veya sola çek kullanıyorum). Ancak alt menüyü ALT MENÜDEKİ açmam ve onu sola açmam gerekiyor (açılır menüde, standart menüde olduğu gibi sola değil sağa açılmaması gereken alt menünün varlığını gösteren ok olmalıdır).
kovpack

0

Yapman gereken tek şey

 <ul style='left:-100%'> 

SAĞ tarafta görüntülemek istediğiniz menünün.

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.