Kenar Çubuğu Masaüstünde Varsayılan Olarak Açık, Mobilde Kapalı


9

Kenar çubuğum / gezinme içeriğimi (Bootstrap kullanarak) varsayılan olarak masaüstünde gösterilecek (genişletilecek) ve mobilde varsayılan olarak kapatılan ve yalnızca mobil cihazlarda gösterilen simgeyi almaya çalışırken gerçek bir sorun yaşıyorum. Bunun işe yaramasını sağlayamıyorum.

<nav class="menu menu-open" id="theMenu">
      <div class="menu-wrap">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
          <i class="fa fa-bars menu-close d-lg-none" id="menu-toggle"></i>
            </button>
          <div id="menu-logo">
            <img src="Final_Logo.png" width="210" height="214" alt="">
          </div>
          <div id="navbarToggleExternalContent">
          <ul id="main-menu">
              <a href="#">Home</a>
              <a href="#">About</a>
              <a href="#">Writing</a>
              <a href="#">Events</a>
              <a href="#">Speaking</a>
              <a href="#">Music</a>
          </ul>
          <ul id="social-icons">
              <li class="facebook"><a href="#"><i class="fab fa-facebook fa-2x"></i></a></li>
              <li class="twitter"><a href="#"><i class="fab fa-twitter fa-2x"></i></a></li>
              <li class="instagram"><a href="#"><i class="fab fa-instagram fa-2x"></i></a></li>
          </ul>
        </div>
      </div>
  </nav>

Bu JavaScript kodunu kullanarak denedim, ama boşuna:

 $('.menu-close').on('click', function(){
    $('#menuToggle').toggleClass('active');
    $('body').toggleClass('body-push-toright');
    $('#theMenu').toggleClass('menu-open');
    alert("Test");
    });

Hey, tam çözüm ile sorunuza yorum ekledim. Kod ve çıktıyı kontrol edebilmeniz için kod oluşturdu. Lütfen bak
Priyanka

Başka CSS'niz var mı?
Zim

Basit ekleme classve medya sorgusu altında stilwidth:600
Awais

Yanıtlar:



1

CSS Medya Sorgusu'nu, içeriği farklı görünüm / cihazlarda gizlemek / göstermek için kullanabilirsiniz.


0

İşte size tam olarak ihtiyacınız olan bağlantı. Senin için kalem yarattım. Lütfen aşağıdaki bağlantıya bakın.

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<nav class="navbar navbar-expand-lg navbar-light bg-light" id="theMenu">
  <a class="navbar-brand" id="menu-logo">
            <img src="Final_Logo.png" width="210" height="214" alt="">
          </a>      
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarSupportedContent">
          <ul class="navbar-nav mr-auto" id="main-menu">
            <li class="nav-item"><a class="nav-link" href="#">Home</a></li>
            <li class="nav-item"><a class="nav-link" href="#">About</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Writing</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Events</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Speaking</a></li>
            <li class="nav-item"><a class="nav-link" href="#">Music</a></li>
            <li class="facebook"><a href="#"><i class="fab fa-facebook fa-2x"></i></a></li>
              <li class="twitter"><a href="#"><i class="fab fa-twitter fa-2x"></i></a></li>
              <li class="instagram"><a href="#"><i class="fab fa-instagram fa-2x"></i></a></li>
          </ul>
  </div>
  </nav>

https://codepen.io/pgurav/pen/abbQZJL


0

Dış içerikle ilgili bs4 belgelerine dayanarak sizin için bir örnek oluşturdum.

<div class="pos-f-t">
  <div class="collapse" id="navbarToggleExternalContent">
    <div class="bg-dark p-4">
      <h5 class="text-white h4">Collapsed content</h5>
      <span class="text-muted">Toggleable via the navbar brand.</span>
    </div>
  </div>
  <nav class="navbar navbar-dark bg-dark navbar-expand-lg">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
  </nav>
</div>

Bu örnekte, kod sağdan değil üstten üstten daraltır. Aslında izinliyim ve ihtiyaçlarınızı karşılamak için örneği tamamlamaya çalışacağım.

Ek JavaScript:

var externalContent = $('#navbarToggleExternalContent'),
    execOnResize = function(){
// also the next line was only for use in jsfiddle
// in the real world you need to use window.outerWidth
// 992 pixel is the width of breakpoint corresponding to the class "navbar-expand-lg". Feel free to adapt it to fit your needs.
    if(window.innerWidth >= 992){
        externalContent.addClass('show');
    }else{
        externalContent.removeClass('show');
    }
};
// the next line was only addded for jsfiddle       
execOnResize();

window.onresize = function(event) {
    execOnResize();
};

window.addEventListener('load', function() {
    execOnResize();
})

Ben de bir keman keman yarattık Eylem görmek için, lütfen jsfiddle iç pencereyi yeniden boyutlandırmak


0

Geçerli Javascript kodunuz, cihazdan bağımsız olarak her zaman çalışır. İhtiyacınız olan şey, cihazın bir bilgisayar mı yoksa bir cep telefonu mu olduğunu kontrol etmenin bir yoludur.

Bunun bir yolu tarayıcının kullanılmasıdır UserAgent:

$('.menu-close').on('click', function(){
    if(navigator.userAgent.match(/(iPod|iPhone|iPad|Android)/)) {
        //mobile
        $('#menuToggle').toggleClass('active');
        $('body').toggleClass('body-push-toright');
        $('#theMenu').toggleClass('menu-open');
        alert("Test");
    }
});

Veya pencerenin genişliğine güvenebilirsiniz (ancak küçük masaüstü pencereleri mobil sürüm gibi ele alınır):

if(window.innerWidth <= 767) { // a certain threshold value, in pixels
    //mobile
    //do something
}

User Agent dizesini koklamak, bakımı zor olan koda yol açar. Medya sorguları çok daha iyi.
kmoser

Bir dize hakkında "bakımı zor" nedir? Her neyse, bu denetimi bir işlevde sarabilirsiniz, böylece dizeyi güncellemeniz gerektiğinde, düzenlemek için yalnızca bir kod satırınız olur.
Anis R.

Ayrıca, OP'nin istediği gibi sınıf adlarını değiştirmek için CSS medya sorgularını kullanamazsınız
Anis R.

Yeni cihazlar üretilirken cihazların Kullanıcı Aracısı dizeleri zamanla değişir. Bu, her yeni cihaz eklendiğinde kodun kırılmasına neden olur. Elbette, bunu bir işlevde sarabilirsiniz, ancak yine de yeni bir cihaz çıktığında değiştirmenizi gerektirir. Cihazları, kullanıcı aracısı dizesine değil, boyutlarına göre (CSS medya sorgularını kullanarak) hedeflemek daha iyidir. Yeni bir cihaz piyasaya sürüldüğünde güncelleme gerekmez. OP mutlaka sınıf isimlerini değiştirmek istemedi; bu onların çözüm yolundaki en iyi girişimleriydi ve medya sorgularından daha düşük olduğuna inandığım bir çözümdü.
kmoser

0

İlk önce sadece birkaç nokta:

  1. Kenar çubuğu söylediniz, ancak işaretlemeniz bana bir kenar çubuğu gibi görünmüyor, duyarlı bir topnav gibi görünüyor. Bunu olabildiğince iyi anlamaya çalışacağım ve gerçekten istediğiniz şey olması durumunda, çalışan bir kenar çubuğu da göstereceğim.

  2. Menü öğeleriniz (liste öğeleri) <ul>olmadan bir (sıralanmamış listede <li>). Bootsrap js / css muhtemelen <li>düzgün çalışması için s'ye ihtiyaç duyar . Teknik olarak bir <ul>herhangi olmadan <li>geçerli html, ama izin yalnızca içerik <ul>bulunmaktadır <li>bir iç çapa (veya başka bir şey) böylece ler <ul>içinde bulunmalıdır <li>geçerli olabilmesi için s.

  3. Sosyal ikonlarla tam olarak ne yapmaya çalıştığınızdan emin değilim, bu yüzden onları biraz mantıklı görünecek şekilde ayarladım.

  4. Ben ekledi overflow-y: scroll;üzerinde <html>küçük bir ekranda menüyü açtığınızda bir kaydırma çubuğu eklendi alırsa o neden kayması olmaz ki eleman. Site tasarımınıza ve içerik düzeninize bağlı olarak gerekli olmayabilir.


Bu yüzden çok basit bir duyarlı menü ile başlayalım.

Temel Önyükleme Duyarlı Menüsü


Tamam, bu iyi görünüyor, ama menüde bir görüntü vardı. Bu yüzden menüye bir görüntü koyacağım ve stil vermek için biraz css vereceğim. Ardından görüntü ile menü öğelerini güzel bir şekilde konumlandırmak için biraz ekstra CSS'ye ihtiyacımız olacak:

  1. Hamburger düğmesini gezinme çubuğunun altına oturacak şekilde yerleştirin. Resmin 200 pikselini kullanacağım ve birkaç özetini özetleyeceğim. Sen değişebilir top: calc(100px - 1rem);için top: 1rem;üstüne hamburger koymak veya bottom: 1rem;size gezinme altına sopa hamburger istiyorsa açıldı bile. Ya da hamburgeri dikey ortada tutan önyükleme varsayılanını kullanmak için tüm kuralı silin.

  2. Menü öğelerini daraltılmadığında da menü çubuğunun altında kalacak şekilde konumlandırın.

  3. sosyal simgeleri de alt tarafa yerleştirin ancak sağ tarafa doğru itin.

  4. Yukarıdaki 2 ve 3 sayıları, menü daraltılmadığında yalnızca orta kesme noktasının üzerinde uygulanmalıdır, bu yüzden onları 768px (bootstrap'ın orta kesme noktası) üzerinde hedeflemek için bir medya sorgusuna koyacağım. Bu, bootstraps sass breakpoint mixins ile de yapılabilir, ancak burada sadece düz css kullanacağız. Bu öğelerin, css'deki @media sorgu kuralı içindeki konumlarını görebilirsiniz; burada bunları çubuğun üst kısmına itecek şekilde değiştirebilirsiniz. Veya menü öğelerini dikey olarak ortalayan ve sosyal simgeleri altına yerleştiren önyükleme varsayılanlarına geri dönmek için bu kuralları kaldırın. Simgelerin diğer menü öğeleri gibi doğrudan menüye girmesini istiyorsanız , sosyal simgeleri <li>menü içindeki öğelere de koyabilirsiniz <ul>.

menüde görüntü ile


Tamam, ama bunun kenar çubuğu olduğunu söyledin. Bootstrap'e aşina değilim, ancak ne v3 ne de v4'ün varsayılan olarak bir kenar çubuğu navu sağlamadığını topluyorum. Çeşitli önyükleme kenar çubuğu öğreticiler bulunabilir burada . Ben sadece burada bir örnek oluşturmak için yukarıda bağlantılı öğreticiler en temel sürümünü kullandık.

Katlanabilir Kenar Çubuğu

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.