แถบด้านข้างเปิดตามค่าเริ่มต้นบนเดสก์ท็อปปิดบนมือถือ


9

ฉันมีปัญหาจริงบางประการในการพยายามทำให้แถบด้านข้าง / เนื้อหาการนำทางของฉัน (โดยใช้ Bootstrap) เพื่อแสดง (ขยาย) ตามค่าเริ่มต้นบนเดสก์ท็อปและปิดโดยค่าเริ่มต้นบนมือถือและมีไอคอนแสดงบนมือถือเท่านั้น ฉันไม่สามารถทำงานนี้ได้

<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>

ฉันได้ลองใช้รหัสจาวาสคริปต์นี้ แต่ก็ไม่มีประโยชน์:

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

สวัสดีฉันได้เพิ่มความคิดเห็นในคำถามของคุณด้วยวิธีแก้ไขปัญหาที่แน่นอน สร้าง codepen ให้คุณเพื่อให้คุณสามารถตรวจสอบรหัสและเอาท์พุท ได้โปรดดู
Priyanka

คุณมี CSS อื่น ๆ หรือไม่
Codeply-er

เพิ่มclassและจัดรูปแบบอย่างง่ายๆ ภายใต้ข้อความค้นหาสื่อwidth:600
Awais

คำตอบ:




0

นี่คือลิงค์สิ่งที่คุณต้องการอย่างแท้จริง ฉันสร้างปากกาให้คุณแล้ว โปรดดูลิงค์ด้านล่าง

    <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

ฉันได้สร้างตัวอย่างให้คุณตามเอกสาร bs4 เกี่ยวกับเนื้อหาภายนอก

<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>

ภายในตัวอย่างนี้รหัสจะยุบจากด้านบน - แทนด้านขวา ที่จริงฉันลาแล้วและลองทำตัวอย่างให้เหมาะกับความต้องการของคุณ

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();
})

ฉันได้สร้างซอซอขึ้นมา เพื่อดูการทำงานโปรดปรับขนาดหน้าต่างด้านในใน jsfiddle


0

รหัส Javascript ปัจจุบันของคุณจะทำงานเสมอโดยไม่คำนึงถึงอุปกรณ์ สิ่งที่คุณต้องการคือวิธีตรวจสอบว่าอุปกรณ์ดังกล่าวเป็นคอมพิวเตอร์หรือโทรศัพท์มือถือหรือไม่

วิธีหนึ่งคือการใช้เบราว์เซอร์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");
    }
});

หรือคุณสามารถพึ่งพาความกว้างของหน้าต่าง (แต่เดสก์ท็อปหน้าต่างขนาดเล็กจะได้รับการปฏิบัติเหมือนรุ่นมือถือ):

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

การดมกลิ่นสตริงตัวแทนผู้ใช้จะนำไปสู่รหัสที่ยากต่อการดูแลรักษา ข้อความค้นหาสื่อดีกว่ามาก
kmoser

"ยากที่จะรักษา" เกี่ยวกับหนึ่งสายคืออะไร? อย่างไรก็ตามคุณสามารถปิดการตรวจสอบนี้ในฟังก์ชันได้ดังนั้นเมื่อใดก็ตามที่คุณต้องการอัปเดตสตริงคุณจะมีโค้ดเพียงบรรทัดเดียวที่จะแก้ไข
Anis R.

นอกจากนี้คุณไม่สามารถใช้การสอบถามสื่อ CSS เพื่อสลับชื่อคลาสเช่น OP ต้องการ
Anis R.

สตริงตัวแทนผู้ใช้ของอุปกรณ์จะเปลี่ยนแปลงตลอดเวลาเมื่อมีการสร้างอุปกรณ์ใหม่ ผลลัพธ์จะเป็นรหัสที่แตกหักทุกครั้งที่มีการเปิดตัวอุปกรณ์ใหม่ แน่นอนว่าคุณสามารถสรุปได้ในฟังก์ชั่น แต่ก็ยังต้องการให้คุณเปลี่ยนเมื่อใดก็ตามที่มีการเปิดตัวอุปกรณ์ใหม่ เป็นการดีกว่าที่จะกำหนดเป้าหมายอุปกรณ์ตามขนาด (โดยใช้คิวรี่สื่อ CSS) ไม่ใช่สตริงตัวแทนผู้ใช้ ไม่จำเป็นต้องมีการอัพเดตเมื่อมีการเปิดตัวอุปกรณ์ใหม่ OP ไม่จำเป็นต้องสลับชื่อคลาส นั่นเป็นความพยายามอย่างที่สุดในการแก้ปัญหาและสิ่งที่ฉันเชื่อว่าด้อยกว่าการสืบค้นสื่อ
kmoser

0

อันดับแรกเพียงไม่กี่คะแนน:

  1. คุณพูดแถบด้านข้าง แต่มาร์กอัปของคุณดูไม่เหมือนแถบด้านข้างสำหรับฉันมันดูเหมือน topnav ที่ตอบสนองได้ ฉันจะพยายามทำให้ดีที่สุดเท่าที่จะทำได้และฉันจะสาธิตให้เห็นถึงแถบด้านข้างที่ใช้งานได้เช่นกันในกรณีที่คุณต้องการ

  2. รายการเมนูของคุณอยู่ใน<ul>(รายการที่ไม่ได้เรียง) โดยไม่มี<li>(รายการในรายการ) bootsrap js / css อาจต้องการ<li>s เพื่อให้ทำงานได้อย่างถูกต้อง ในทางเทคนิค a <ul>โดยไม่ต้อง<li>มี html ที่ถูกต้อง แต่เนื้อหาเดียวที่อนุญาตใน a <ul>นั้นคือ<li>s anchors (หรืออย่างอื่น) ภายใน a <ul>ต้องมีอยู่ภายใน<li>s เพื่อให้ถูกต้อง

  3. ฉันไม่แน่ใจว่าคุณพยายามจะทำอย่างไรกับไอคอนโซเชียลดังนั้นฉันจึงปรับมันเล็กน้อยในแบบที่สมเหตุสมผล

  4. ฉันเพิ่มoverflow-y: scroll;ใน<html>องค์ประกอบเพื่อให้เมื่อคุณเปิดเมนูบนหน้าจอขนาดเล็กจะไม่ทำให้เกิดการเปลี่ยนแปลงหากมีการเพิ่มแถบเลื่อน อาจไม่จำเป็นขึ้นอยู่กับการออกแบบไซต์และโครงร่างเนื้อหาของคุณ


ดังนั้นเริ่มต้นด้วยเมนูตอบสนองขั้นพื้นฐานมาก ๆ

เมนูตอบสนองการบูตพื้นฐาน


ตกลงนั่นดูโอเค แต่คุณมีรูปภาพในเมนู ดังนั้นฉันจะใส่ภาพในเมนูและให้มัน CSS เล็กน้อยเพื่อสไตล์ จากนั้นด้วยภาพเราจะต้องใช้ CSS พิเศษเล็กน้อยเพื่อจัดวางองค์ประกอบของเมนูอย่างดี:

  1. วางตำแหน่งปุ่มแฮมเบอร์เกอร์เพื่อให้อยู่ด้านล่างของแถบนำทาง ฉันจะใช้ 200px ของภาพและลบออกบางส่วน คุณสามารถเปลี่ยนเป็นtop: calc(100px - 1rem);เพื่อtop: 1rem;ให้แฮมเบอร์เกอร์อยู่ด้านบนหรือbottom: 1rem;ถ้าคุณต้องการให้แฮมเบอร์เกอร์ติดที่ด้านล่างของ nav แม้เปิด หรือเพียงแค่ลบกฎทั้งหมดนั้นเพื่อใช้ค่าเริ่มต้นบูตซึ่งทำให้แฮมเบอร์เกอร์อยู่ตรงกลางในแนวตั้ง

  2. วางตำแหน่งรายการเมนูเพื่อวางที่ด้านล่างของแถบเมนูเมื่อไม่ยุบ

  3. วางไอคอนโซเชียลไว้ที่ด้านล่าง แต่ผลักไปทางด้านขวามือ

  4. หมายเลข 2 และ 3 ด้านบนควรใช้เหนือจุดพักกลางเมื่อเมนูไม่ยุบดังนั้นฉันจะใส่ไว้ในแบบสอบถามสื่อเพื่อกำหนดเป้าหมายมากกว่า 768px (จุดพักกลางของ bootstrap) สิ่งนี้สามารถทำได้ด้วย bootstraps sass breakpoint mixins แต่เราจะใช้ css ธรรมดาที่นี่ คุณสามารถดูการวางตำแหน่งขององค์ประกอบเหล่านี้ภายในกฎการสืบค้น @media ใน css ซึ่งคุณสามารถเปลี่ยนมันเพื่อส่งไปยังด้านบนของแถบ หรือเพียงแค่ลบกฎเหล่านั้นกลับไปเป็นค่าเริ่มต้นบู๊ตสแตรปซึ่งจัดองค์ประกอบของเมนูตามแนวตั้งและวางไอคอนโซเชียลไว้ข้างใต้ คุณยังสามารถใส่ไอคอนโซเชียลไว้ใน<li>องค์ประกอบต่างๆในเมนู<ul>หากคุณต้องการให้ไอคอนตกลงไปในเมนูเหมือนกับรายการเมนูอื่น ๆ

ด้วยภาพในเมนู


โอเค แต่คุณบอกว่ามันเป็นแถบข้าง ฉันไม่คุ้นเคยกับ bootstrap แต่ฉันรวบรวมว่า v3 หรือ v4 ไม่ได้ให้ nav ด้านข้างโดยค่าเริ่มต้น หลายบทเรียนบูตแถบด้านข้างสามารถพบได้ที่นี่ ฉันได้ใช้เวอร์ชันพื้นฐานที่สุดจากบทเรียนที่ลิงก์ด้านบนเพื่อสร้างตัวอย่างที่นี่

แถบด้านข้างแบบยุบได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.