Twitter önyükleme duyarlı kullanarak navbar çökme eşiği nasıl değiştirilir?


94

Bootstrap-sass ile uygulanan bir Rails 3.1.2 projesinde Twitter Bootstrap 2.0.1 kullanıyorum. Hem yükleme ediyorum bootstrap.cssve bootstrap-responsive.cssdosyalarının yanı sıra bootstrap-collapse.jsJavascript.

Ben benzer bir gezinme çubuğu ile bir akış düzenini sahip örnek . Bu "Duyarlı varyasyon" talimatları navbar izler burada . İyi çalışıyor: Sayfa yaklaşık 940 pikselden daha darsa, navbar daralır ve genişletmek için tıklayabileceğim bir "düğme" görüntüler.

Ancak navbarım 550 piksel genişliğe kadar iyi görünüyor, yani ekran çok dar olmadığı sürece daraltılmasına gerek yok.

Bootstrap'e gezinti çubuğunu yalnızca ekran genişliği 550 pikselden azsa daraltmasını nasıl söylerim?

Bu noktada ben anlamına Not değil mesela elemanları istifleme yerine yan yana görüntülendiği, diğer duyarlı davranışları değiştirmek istiyor.


Harika soru! Sorunuzda verdiğiniz bilgilerden, sıfırdan başlayarak daraltılabilir bir gezinme çubuğu uygulayabildim. Teşekkürler!
methodMan

Yanıtlar:


41

239. satırı arıyorsunuz bootstrap-responsive.css

@media (max-width: 979px) {...}

Nerede max-widthdeğer duyarlı nav tetikler. 550px'e değiştirin ve yeniden boyutlandırması gerekir.


12
Teşekkürler. bootstrap-responsive.cssbootstrap-sass mücevherine gömülüdür. Evet onu düzenleyebilirdim ama sonra mücevher güncellendiğinde, tekrar yapmam gerekecek. @Media sorgusunu geçersiz kılmanın, diğer CSS öğelerini geçersiz kılmaya benzer bir yolu var mı?
Mark Berry

Tüm CSS bildirimlerini yeniden belirtmeden geçersiz kılmanın herhangi bir yolunu düşünemiyorum.
methodofaction

Tamam teşekkürler. Bu yaklaşımı, mücevher kodundaki bu satırı geçersiz kılarak denedim ve işe yarıyor ancak muhtemelen @media (max-width: 767px)bloktaki CSS nedeniyle 767px genişliğinin altındaki navbar'da ekstra yatay dolgu alıyorum . Görünüşe göre Andres Ilich'in cevabında önerildiği gibi daha kapsamlı bir geçersiz kılma yapmam gerekecek.
Mark Berry

2
@Andres Ilich'in cevabına yaptığım yorumda da belirtildiği gibi, kaynak kodunu doğrudan güncellemek, sürdürülebilirlik söz konusu olduğunda iki kötülükten daha az gibi görünüyor, bu yüzden şimdilik bu çözümü kabul edeceğim. Minimum eşik olarak 767px ile yaşayabilirim, ancak bundan etkilenmeyen navbar için özel bir kap oluşturarak bunu muhtemelen daha da azaltabilirim @media (max-width: 767px). Umarım Bootstrap (veya bootstrap-sass) bir gün eşikleri ayarlamak için değişkenleri kullanmak için bir araç içerecektir, ancak bunun medya seçicilerinde enterpolasyon gerektireceğini düşünüyorum .
Mark Berry


73

Önyükleme> 2.1 && <3

  • Daha az önyükleme sürümünü kullanın
  • Değişkenlerdeki @navbarCollapseWidth değişkenini değiştirin.
  • Yeniden derleyin.

2013 Güncellemesi: Kolay yol

  • Http://getbootstrap.com/customize/#less-variables adresini ziyaret edin.
  • Form alanında @navbarCollapseWidth değerini değiştirin
  • "Derle ve İndir" i tıklayın.

(Yorum yoluyla THX'ten Archonic'e)

2014 Güncellemesi: Bootstrap 3.1.1 ve 3.2 (hatta belgelere eklediler )

Konum Eğer varsa özelleştirme veya düzenleme / geçersiz kılma .lessdeğişkenleri, aradığınız:

//** Point at which the navbar becomes uncollapsed.
@grid-float-breakpoint:     @screen-sm-min;
//** Point at which the navbar begins collapsing.
@grid-float-breakpoint-max: (@grid-float-breakpoint - 1);

6
Twitter.github.com/bootstrap/customize.html#variables adresini ziyaret edebilir ve genişliği değiştirip indirebilirsiniz. Derlemeye gerek yok.
Archonic

Bağlantı ve düğme metni güncellendi: getbootstrap.com/customize/#less-variables & "Compile and Download"
digitalextremist

Bu @navbarCollapseWidth: 600px;, boostrap_and_overrides.css.less dosyasına benzer bir şey koyarsanız, twitter-bootstrap-rails gem ile de çalışır.
sffc

Bu artık Bootstrap 3'te bir şey değil gibi görünüyor. :(
CodingWithSpike

Ya Bootstrap 4 için?
Aaron Franke

11

@mediaGezinme çubuğu öğelerini uygun gördüğünüz şekilde aşağı bırakmak için yeni bir sorgu oluşturabilirsiniz, yapmanız gereken tek şey, yeni sorgunuzu istenen bırakma genişliğiyle karşılamak için eski sorguyu sıfırlamaktır. Örneğin şunu al:

CSS

/** Modified Responsive CSS **/

@media (max-width: 979px) {
    .btn-navbar {
        display: none;
    }
    .navbar .nav-collapse {
        clear: none;
    }

    .nav-collapse {
        height: auto;
        overflow: auto;
    }

    .navbar .nav {
        float: left;
        margin: 0 10px 0 0;
    }

    .navbar .brand {
        margin-left: -20px;
        padding: 8px 20px 12px;
    }

    .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
        display: block;
    }

    .navbar .nav > li > a, .navbar .dropdown-menu a {
        border-radius: 0;
        color: #999999;
        font-weight: normal;
        padding: 10px 10px 11px;
    }

    .navbar .nav > li {
        float: left;
    }

    .navbar .dropdown-menu {
        background-clip: padding-box;
        background-color: #FFFFFF;
        border-color: rgba(0, 0, 0, 0.2);
        border-radius: 0 0 5px 5px;
        border-style: solid;
        border-width: 1px;
        box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
        display: none;
        float: left;
        left: 0;
        list-style: none outside none;
        margin: 0;
        min-width: 160px;
        padding: 4px 0;
        position: absolute;
        top: 100%;
        z-index: 1000;
    }

    .navbar-form, .navbar-search {
        border:none;
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.1);
        float: left;
        margin-bottom: 0;
        margin-top:6px;
        padding: 9px 15px;
    }

    .navbar .nav.pull-right {
        float: right;
        margin-left: auto;
    }
}

@media (max-width: 550px) {
    .btn-navbar {
        display: block;
    }
    .navbar .nav-collapse {
        clear: left;
    }

    .nav-collapse {
        height: 0;
        overflow: hidden;
    }

    .navbar .nav {
        float: none;
        margin: 0 0 9px;
    }

    .navbar .brand {
        margin: 0 0 0 -5px;
        padding-left: 10px;
        padding-right: 10px;
    }

    .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
        display: none;
    }

    .navbar .nav > li > a, .navbar .dropdown-menu a {
        border-radius: 3px 3px 3px 3px;
        color: #999999;
        font-weight: bold;
        padding: 6px 15px;
    }

    .navbar .nav > li {
        float: none;
    }

    .navbar .dropdown-menu {
        background-color: transparent;
        border: medium none;
        border-radius: 0 0 0 0;
        box-shadow: none;
        display: block;
        float: none;
        left: auto;
        margin: 0 15px;
        max-width: none;
        padding: 0;
        position: static;
        top: auto;
    }

    .navbar-form, .navbar-search {
        border-bottom: 1px solid #222222;
        border-top: 1px solid #222222;
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.1);
        float: none;
        margin: 9px 0;
        padding: 9px 15px;
    }

    .navbar .nav.pull-right {
        float: none;
        margin-left: 0;
    }

}

Aşağıdaki kodda @media, 979pxişaretin önündeki düşüşü işleyen orijinal sorguyu ve istediğiniz bırakma noktasını desteklemek için yeni sorguyu nasıl dahil ettiğimi görebilirsiniz 550px. Özgün sorguyu doğrudan önyükleme duyarlı css'den değiştirerek navbar öğeleri için bu belirli sorguya uygulanan tüm stilleri sıfırladım ve bunun yerine ihtiyacınız olan bırakma noktasını taşıyan yeni sorguya taşıdım. Bu şekilde, orijinal sorgudan yeni sorguya kadar tüm stilleri, önyüklemeye duyarlı stil sayfasında dolaşmadan değiştirebiliriz, bu şekilde varsayılan değerler, belgenizdeki diğer öğeler için geçerli olmaya devam eder.

İşte 550pxihtiyaç duyduğunuzda bırakılacak bir medya sorgusu içeren kısa bir demo : http://jsfiddle.net/wU8MW/

Not: @mediaYeni değiştirilmiş css'in duyarlı css'den önce yüklenmesi gerektiği için , yukarıdaki değiştirilmiş sorguları css çerçevesinin altına yerleştirdim .


Detaylı cevabınız için teşekkür ederiz. İşe yarıyor gibi görünüyor - hala nasıl olduğunu anlamaya çalışıyorum. Sizi doğru anladıysam, (1) @media (max-width: 979px)yeni @media (max-width: 550px)sorguyu yapmak için orijinal sorguyu klonladınız . Sonra (2) 979px sorgusunun ana sorgudaki etkilerini geçersiz kılmak için yeni bir 979px sorguyu elle kodladınız bootstrap-responsive.css? CSS'nizdeki etiket dizisi içindeki sırayı takip etmiyor bootstrap-responsive.css, bu yüzden ne yaptığınızı görmek için onları karşılaştırmakta güçlük çekiyorum.
Mark Berry

@MarkBerry Doğru yoldasınız. Yazdığım @media (max-width: 550px)sorgu ilk @media (max-width: 979px)sorgu sözdizimini takip etmiyor çünkü yaptığım tek şey ateş böceği ve kopyalama / yapıştırma yoluyla onu el ile geçersiz kılan hızlı bir örnekti, bu konuda tembelleşti, ancak bunu yapmanın doğru yolu ikincisinde bahsettiğin gibi nokta.
Andres Ilich

1
Sürdürülebilirlik söz konusu olduğunda bu zor bir çağrıdır. Korkarım bu tür kapsamlı bir geçersiz kılma, mutlak kontrol sağlarken, her Bootstrap güncellemesinden sonra, @ Duopixel tarafından öneri başına bir veya iki kaynak kodu satırını doğrudan güncellemeye kıyasla çok sayıda manuel kontrol anlamına gelir. Ben çünkü ben kısmen Bootstrap kullanıyorum değil CSS vızıltı Ben şimdilik basit çözüm ile gidersiniz düşünüyorum bu yüzden.
Mark Berry

6

bootstrap-sass bir sonraki sürümde (2.2.1.0) $ navbarCollapseWidth değişkenini destekleyecektir. Bu sürüm yayınlandıktan sonra tam olarak istediğiniz şeyi yapmak için onu güncelleyebileceksiniz!


Lütfen bu değişkeni nereye koyduğunuzu açıklar mısınız?
Andy Hayden

Herhangi bir Bootstrap içe aktarımından önce, örneğin@import "bootstrap";
Ashley


4

Bunun yakında resmi bir şekilde uygulanacağından şüpheleniyorum (ve umuyorum). Bu arada, açılır düğmedeki görünür telefonu ve gezinme çubuğuna yerleştirdiğim ikinci bir düğme setindeki görünür tableti kullanarak basit bir css hack'i yapıyorum. Yani böyle görünmeden önce:

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a href="<%= root_url %>" class="brand brandtag"></a>
      <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>
      <div class="nav-collapse">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
    </div>
  </div>
</div>

Ve şimdi şöyle görünüyor:

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a href="<%= root_url %>" class="brand brandtag"></a>
      <a class="btn btn-navbar visible-phone" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <div class="visible-tablet">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
      <div class="nav-collapse">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
    </div>
  </div>
</div>

Öğelerin sırasının önemli olduğunu unutmayın, aksi takdirde sonraki satıra giden öğelerle ilgili sorun yaşayabilirsiniz.


3

Bootstrap'in ihtiyaç duyduğu tüm bölümleri listeleyen ayrı bir SCSS dosyası oluşturdum, bu şekilde sitemizin ihtiyacına bağlı olarak bölümleri açıp kapatabilirim. Bu şekilde, kesme noktası değişkenini kolayca geçersiz kılabiliyorum. İşte sahip olduğum şey:

// Core variables and mixins
$grid-float-breakpoint: 991px;
@import "bootstrap/variables";
@import "bootstrap/mixins";

// Reset
@import "bootstrap/normalize";
//@import "bootstrap/print";

// Core CSS
@import "bootstrap/scaffolding";
@import "bootstrap/type";
//@import "bootstrap/code";
@import "bootstrap/grid";
@import "bootstrap/tables";
@import "bootstrap/forms";
@import "bootstrap/buttons";

// Components
@import "bootstrap/component-animations";
@import "bootstrap/glyphicons";
@import "bootstrap/dropdowns";
//@import "bootstrap/button-groups";
//@import "bootstrap/input-groups";
@import "bootstrap/navs";
@import "bootstrap/navbar";
@import "bootstrap/breadcrumbs";
@import "bootstrap/pagination";
@import "bootstrap/pager";
@import "bootstrap/labels";
@import "bootstrap/badges";
//@import "bootstrap/jumbotron";
//@import "bootstrap/thumbnails";
@import "bootstrap/alerts";
//@import "bootstrap/progress-bars";
//@import "bootstrap/media";
//@import "bootstrap/list-group";
@import "bootstrap/panels";
//@import "bootstrap/wells";
@import "bootstrap/close";

// Components w/ JavaScript
@import "bootstrap/modals";
@import "bootstrap/tooltip";
//@import "bootstrap/popovers";
//@import "bootstrap/carousel";

// Utility classes
@import "bootstrap/utilities";
@import "bootstrap/responsive-utilities";

2

İşte benim kodum (Diğer tüm çözümler, gezinti çubuğu düşerken korkak bir kaydırma çubuğu gösterdi, böylece kodu düzenledim, böylece yapmadım). Başka bir cevaba gönderemedim, bu yüzden başkalarının bulması için burada yapacağım. Bunu Bootstrap 3.0 ile yapmak için raylar kullanıyorum.

varlıklar / stil sayfaları / çerçeve ve geçersiz kılmalar bunu yapıştırın: (Hedefinize ulaşmak için maksimum genişliği herhangi bir değere ayarlayın.)

@media (max-width: 2500px) {
.navbar-header {
    float: none;
}
.navbar-toggle {
    display: block;
}
.navbar-collapse {
    border-top: 1px solid transparent;
    box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
}
.navbar-collapse.collapse {
    display: none!important;
}
.navbar-collapse.collapse.in {
    display: block!important;
}
.navbar-nav {
    float: none!important;
}
.navbar-nav>li {
    float: none;
}
.navbar-nav>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
}

1

Önyükleme 3.x

DAHA AZ kullanarak @screen-small, minimum boyutunuzu hedeflemek için değerini değiştirebilirsiniz.

misal: @screen-small: 600px;

Bunu yalnızca genişlik 600 pikselden az olduğunda "küçük cihaz" moduna geçmek için kullanıyorum


Bunu SCSS ile nasıl yapacağınızı biliyor musunuz?
bcackerman

üzgünüm yapmam. bootstrap'in LESS kullanılarak geliştirildiğini düşündüm, bu yüzden bunu .css yöntemiyle yapmanız gerekebilir (yukarıdaki önyükleme 2 yanıtlarına bakın)
JasonS

1

Önyükleme 3.x

SASS kullanarak, minimum boyutunuzu hedeflemek için $ screen-sm değerini değiştirebilirsiniz

örnek: $ screen-sm: 600px;

Bu değeri application.scss dosyanıza @import "bootstrap" 'den önce koymanız gerekir;

$screen-sm:600px;
@import "bootstrap";

"@" İle başlayan daha az değişken, içe aktarmadan önce onları geçersiz kılmak için onları "$" olarak değiştirdi.

İşte değişkenlerin listesi.


Bu işlevselliği
bozar

1

Önyükleme 4.x

Bootstrap 4.x'te daraltma eşiğini değiştirmek çok kolaydır. 6 vaka var:

  1. Her zaman genişletin, asla daraltmayın (yani kesme noktası 0 pikseldir): <nav class="navbar navbar-expand">...</nav>
  2. Kesme noktası sm (576px):<nav class="navbar navbar-expand-sm">...</nav>
  3. Kesme noktası md (768 piksel):<nav class="navbar navbar-expand-md">...</nav>
  4. Kesme noktası lg (992 piksel):<nav class="navbar navbar-expand-lg">...</nav>
  5. Kesme noktası xl (1200 piksel):<nav class="navbar navbar-expand-xl">.../nav>
  6. Her zaman daraltın, asla genişletmeyin (yani kesme noktası ∞ pikseldir). : <nav class="navbar">...</nav>(Sadece navbar-expand-*sınıfı kaldırın . Bootstrap 4.x'te olduğu gibi önce mobil)

Carol Skelly tarafından yazılan bu makaleye kredi buldum https://medium.com/wdstack/examples-bootstrap-4-navbar-b3c9dc0edc1a


0

Bu, Bootstrap CSS dosyalarının LESS sürümünü nerede kullanabileceğinizin harika bir örneğidir. Bunun nasıl yapılacağı aşağıda.

Daha da iyisi, bunu Github'da bir çekme isteği olarak göndermek, böylece herkesin yararlanabilmesi ve "özel kodunuz" umarız Bootstrap'in ilerlemesinin bir parçası olur.

  • variables.lessGezinti çubuğunun ne zaman daraltılacağını belirten bir değişken ekleyin . Gibi bir şey:@navCollapseWidth: 979px
  • Sonra değiştirin responsive-navbar.less...
    • Üst değişime kadar @media (max-width: 979px)hiç@media (max-width: @navCollapseWidth)
    • Altta şu şekilde değiştirin @media (min-width: 980px):@media (max-width: @navCollapseWidth - 1)

Elbette ... Önerilen yöntemlerden birini kullanarak LESS'i derlemeniz gerekir .


Görünüşe göre Bootstrap 2.0.4 duyarlı şeyler için dosya yapısını değiştirmiş. Bootstrap-sass yazarı @Thomas McDonald tarafından yapılan yoruma bakın . Henüz bu konuya girmedim, ancak SASS sürümünde bile eşiğin daha kolay değiştirilmesine izin verebilir.
Mark Berry

Üzgünüm; Sorudaki Sass yorumunu tamamen kaçırdım ... Kategori bazında sadece Bootstrap'e odaklandım. Bununla birlikte, dosya yapısı Bootstrap'ta baktığımla aynı görünüyor ... Her iki şekilde de yanıtımı güncelleyeceğim soruya yanıt veriyor.
Jason Capriotti

Telaşa gerek yok. Ve en iyi çözümün, önyükleme için navbar çökme eşiklerini kontrol eden bir değişken veya değişkenler dizisi doğal olarak sunması olduğuna tamamen katılıyorum. CSS, LESS veya SASS veya medya sorguları konusunda bu geliştirmeyi yazacak kişi olacak kadar deneyimli değilim;).
Mark Berry

0

Ana katlanabilir navigasyondaki bir öğeye görünür telefon sınıflı bir blok ve gizli bir telefon sınıfı ekleyerek tyler'ın hack'ini daha da ileri taşıyarak, daraltılmış öğelerden birini veya ikisini telefon gezinme çubuğunda bile görüntülenecek şekilde 'çekebilirsiniz'.

<div class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container-fluid">
      <a href="<%= root_url %>" class="brand brandtag"></a>
      <a class="btn btn-navbar visible-phone" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>
      <div class="visible-tablet">
        <ul class="nav">
          <li>Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
      <div class="visible-phone">
        <ul class="nav">
          <li>Navigation 1</li>
        </ul>
      </div>
      <div class="nav-collapse">
        <ul class="nav">
          <li class="hidden-phone">Navigation 1</li>
          <li>Navigation 2</li>
          <li>Navigation 3</li>
        </ul>
      </div>
    </div>
  </div>
</div>

0

Sadece bu kodu özel style.css dosyanıza yazın ve çalışacaktır.

@media (min-width: 768px) and (max-width: 991px) {
        .navbar-collapse.collapse {
            display: none !important;
        }
        .navbar-collapse.collapse.in {
            display: block !important;
        }
        .navbar-header .collapse, .navbar-toggle {
            display:block !important;
        }
        .navbar-header {
            float:none;
        }
        .navbar-nav {
            float: none !important;
            margin: 0px;
        }
        .navbar-nav {
            margin: 7.5px -15px;
        }
        .nav > li {
            position: relative;
            display: block;
        }
        .navbar-nav > li {
            float: none !important;
        }
        .nav > li > a {
            position: relative;
            display: block;
            padding: 10px 15px;
        }
        .navbar-collapse {
            padding-right: 15px;
            padding-left: 15px;
            overflow-x: visible;
            border-top: 1px solid transparent;
            box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1) inset;
        }
        .nav {
            padding-left: 0px;
            margin-bottom: 0px;
            list-style: outside none none;
        }
    }
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.