แก้ไขการนำทางแถบด้านข้างในของไหล twitter bootstrap 2.0


คำตอบ:


168

หมายเหตุ:มีบูตเป็น jQuery ปลั๊กอินที่ไม่นี้และอื่น ๆ อีกมากมายที่ถูกนำมาไม่กี่รุ่นหลังจากคำตอบนี้ถูกเขียน (เกือบสองปีที่ผ่านมา) เรียกว่าติด คำตอบนี้ใช้ได้เฉพาะเมื่อคุณใช้ Bootstrap 2.0.4 หรือต่ำกว่า


ใช่เพียงสร้างคลาสคงที่ใหม่สำหรับแถบด้านข้างของคุณและเพิ่มคลาสออฟเซ็ตให้กับ div เนื้อหาของคุณเพื่อสร้างขอบด้านซ้ายดังนี้:

CSS

.sidebar-nav-fixed {
    padding: 9px 0;
    position:fixed;
    left:20px;
    top:60px;
    width:250px;
}

.row-fluid > .span-fixed-sidebar {
    margin-left: 290px;
}

Demo: http://jsfiddle.net/U8HGz/1/show/ แก้ไขที่นี่: http://jsfiddle.net/U8HGz/1/

อัปเดต

แก้ไขการสาธิตของฉันเพื่อรองรับแผ่น bootstrap ที่ตอบสนองตอนนี้มันไหลพร้อมกับคุณสมบัติตอบสนองของ bootstrap

หมายเหตุ: การสาธิตนี้ไหลไปพร้อมกับแถบนำทางคงที่ด้านบนดังนั้นองค์ประกอบทั้งสองจึงกลายเป็นposition:staticตามการปรับขนาดหน้าจอฉันจึงวางการสาธิตอื่นไว้ด้านล่างซึ่งจะรักษาแถบด้านข้างที่คงที่จนกว่าหน้าจอจะลดลงสำหรับมุมมองมือถือ

CSS

.sidebar-nav-fixed {
     position:fixed;
     top:60px;
     width:21.97%;
 }

 @media (max-width: 767px) {
     .sidebar-nav-fixed {
         width:auto;
     }
 }

 @media (max-width: 979px) {
     .sidebar-nav-fixed {
         position:static;
        width: auto;
     }
 }

HTML

<div class="container-fluid">
<div class="row-fluid">
 <div class="span3">
   <div class="well sidebar-nav sidebar-nav-fixed">
    ...
   </div><!--/.well -->
 </div><!--/span-->
 <div class="span9">
    ...
 </div><!--/span-->
</div><!--/row-->

</div><!--/.fluid-container-->

สาธิตแก้ไขที่นี่

หมายเหตุเล็กน้อย: ความกว้างของแถบด้านข้างคงที่มีความแตกต่างกันประมาณ 10px / 1% เนื่องจากความจริงที่ว่าเนื่องจากไม่ได้รับความกว้างจาก div ของคอนเทนเนอร์ span3 เนื่องจากได้รับการแก้ไขแล้วฉันจึงต้องสร้าง ความกว้าง ก็ใกล้พอแล้ว

และนี่เป็นอีกวิธีหนึ่งหากคุณต้องการให้แถบด้านข้างคงที่จนกว่าเส้นตารางจะลดลงสำหรับมุมมองหน้าจอขนาดเล็ก / มือถือ

CSS

.sidebar-nav-fixed {
    position:fixed;
    top:60px;
    width:21.97%;
}

@media (max-width: 767px) {
    .sidebar-nav-fixed {
        position:static;
        width:auto;
    }
}

@media (max-width: 979px) {
    .sidebar-nav-fixed {
        top:70px;
    }
}

สาธิตแก้ไขที่นี่


สำหรับฉันทั้ง Chrome และ Firefox ซอนั้นมักจะมีแถบเลื่อนแนวนอน (Chrome) ต่ำกว่าความกว้างประมาณ 1,016 พิกเซล (ดูง่ายกว่าที่นี่: jsfiddle.net/U8HGz/130/showซึ่งเป็นเพียง / 1 แต่แสดงความกว้างและความสูงของหน้าต่างด้านล่าง "Hello World; I don't know what / 2 - / 129 are.)
TJ Crowder

1
@TJCrowder ซึ่งเกิดจากการmargin-left:290pxประกาศใน.span-fixed-sidebarคลาสที่สร้างขึ้นเพื่อหลีกทางให้แถบด้านข้างหากไม่มีอยู่เนื้อหาจะซ้อนทับแถบด้านข้างบนหน้าจอขนาดเล็ก คุณสามารถกำจัดแถบเลื่อนแนวนอนแม้ชัดเจนหลบซ่อนตัวอยู่บนแท็กชอบดังนั้น:body body { overflow-x: hidden; }
Andres Ilich

ขอบคุณ. ซึ่งอาจใช้ได้กับคิวรีสื่อหรืออะไรบางอย่าง (ดังนั้นจึงมีในหน้าต่างที่แคบมาก ) แต่เมื่อถึงจุดนั้นเราอาจต้องการย้ายแถบด้านข้างอยู่ดี
TJ Crowder

1
@mauris แก้ไขการสาธิตของฉันที่รองรับคุณสมบัติตอบสนองของ bootstrap
Andres Ilich

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

46

Boostrap ล่าสุด (2.1.0) มีคุณสมบัติ "affix" ใหม่สำหรับแอปพลิเคชันประเภทนี้โดยเฉพาะ FYI


@AlexanderRechsteiner ไม่ได้จริงๆ OP กล่าวถึง Bootstrap 2.0 โดยเฉพาะ
Kyle

27

สิ่งนี้จะทำให้ Webdesign ตอบสนองได้เร็วขึ้น ตัดแถบด้านข้างที่คงที่ในแบบสอบถามสื่อได้ดีขึ้น

CSS

@media (min-width: 768px) { 
  .sb-fixed{
    position: fixed;
  } 
}

HTML

<div class="span3 sb-fixed">
   <div class="well sidebar-nav">
      <!-- Sidebar Contents -->
   </div>
</div>

ตอนนี้แถบด้านข้างได้รับการแก้ไขแล้วหากมุมมองใหญ่กว่า 768px


1

สิ่งนี้เป็นไปไม่ได้หากไม่มีจาวาสคริปต์ ฉันพบว่า affix.js ซับซ้อนเกินไปดังนั้นฉันจึงค่อนข้างใช้:

เหนียว


0

ฉันเริ่มต้นด้วยคำตอบของ Andres และได้รับแถบด้านข้างที่เหนียวเช่นนี้:

HTML:

<div class="span3 sidebar-width">
  <div class="well sidebar-nav-fixed">
    Sidebar
  </div>
</div>

<div class="span9 span-fixed-sidebar">
  Content
</div> <!-- /span -->

CSS:

.sidebar-nav-fixed {
  position:fixed;
}

JS / jQuery:

sidebarwidth = $(".sidebar-width").css('width');
$('.sidebar-nav-fixed').css('width', sidebarwidth);
contentmargin = parseInt(sidebarwidth) + 60;
$('.span-fixed-sidebar').css('marginLeft', contentmargin);

ฉันสมมติว่าฉันต้องการ JS เพื่ออัปเดตตัวแปร 'sidebarwidth' เมื่อปรับขนาดวิวพอร์ต


0

ง่ายมากที่จะรับ fix nav หรือทุกแท็กที่คุณต้องการ สิ่งที่คุณต้องมีคือเขียนฟิกซ์แท็กของคุณแบบนี้และวางไว้ในส่วนเนื้อหาของคุณ

   <div style="position: fixed">
       test - try  scroll again. 
   </div>

0

ด้วย Bootstrap เวอร์ชันปัจจุบัน (3.3.2) มีวิธีที่ดีในการทำให้แถบด้านข้างคงที่สำหรับการนำทาง

โซลูชันนี้ยังใช้งานได้ดีกับคลาส container-fluid ที่นำมาใช้ใหม่ซึ่งหมายความว่าจะมีเค้าโครงแบบเต็มหน้าจอที่ตอบสนองได้อย่างง่ายดาย

โดยปกติคุณจะต้องใช้ความกว้างและระยะขอบคงที่ไม่เช่นนั้นการนำทางจะทับซ้อนเนื้อหา แต่ด้วยความช่วยเหลือของคอลัมน์ตัวยึดที่ว่างเนื้อหาจะถูกจัดวางในตำแหน่งที่ถูกต้องเสมอ

การตั้งค่าด้านล่างจะรวมเนื้อหาไว้รอบ ๆ เมื่อคุณปรับขนาดหน้าต่างให้น้อยกว่า 768px และเผยแพร่การนำทางคงที่

ดูhttp://www.bootply.com/ePvnTy1VIIสำหรับตัวอย่างการทำงาน

CSS

@media (min-width: 767px) { 
    #navigation{
        position: fixed;
    }
}

HTML

<div class="container-fluid">
 <div class="row">
  <div id="navigation" class="col-lg-2 col-md-3 col-sm-3">
    <ul>
      <li><a href="#">Link 1</a></li>
      <li><a href="#">Link 1</a></li>
      <li><a href="#">Link 1</a></li>
    </ul>
  </div>

  <div class="col-lg-2 col-md-3 col-sm-3 hidden-xs">
    <!-- Placeholder - keep empty -->
  </div> 

  <div id="main" class="col-lg-10 col-md-9 col-sm-9 fill">
     ...
     Huge Content
     ...
  </div> 
 </div>
</div>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.