Bootstrap Element 100% กว้าง


96

ฉันต้องการสร้างบล็อคสี 100% แบบสลับกัน สถานการณ์ "ในอุดมคติ" แสดงเป็นสิ่งที่แนบมาเช่นเดียวกับสถานการณ์ปัจจุบัน

การตั้งค่าที่ต้องการ:

http://i.imgur.com/aiEMJ.jpg

ปัจจุบัน:

http://i.imgur.com/3Sl27.jpg

ความคิดแรกของฉันคือสร้างคลาส div กำหนดสีพื้นหลังและกำหนดความกว้าง 100%

.block {
    width: 100%;
    background: #fff;
}

อย่างไรก็ตามคุณจะเห็นได้ว่าสิ่งนี้ไม่ได้ผล มัน จำกัด อยู่ในพื้นที่คอนเทนเนอร์ ฉันพยายามปิดคอนเทนเนอร์ แต่ก็ไม่ได้ผลเช่นกัน


คุณสามารถใส่รหัสที่ใช้งานได้หรือไม่? หากไม่มีสิ่งนั้นสิ่งที่ฉันสามารถพูดได้ก็คือคุณต้องแน่ใจว่าแท็กที่มีสำหรับ div นั้นไม่มีการตั้งค่าความกว้างนอกเหนือจาก 100%
Michael Peterson

เฮ้ไมเคิลขอบคุณสำหรับการตอบกลับ นี่คือส่วนของรหัสที่ฉันใช้งาน: <div class="container"> <div class="row"> <div class="span12"><img src="img/logo.png" width="960px"></center></div> <div class="block">content</div>
user1589214

คำตอบ:


78

containerระดับคือเจตนาไม่ 100% ความกว้าง เป็นความกว้างคงที่ที่แตกต่างกันขึ้นอยู่กับความกว้างของวิวพอร์ต

หากคุณต้องการทำงานกับความกว้างเต็มหน้าจอให้ใช้.container-fluid:

Bootstrap 3:

<body>
  <div class="container-fluid">
    <div class="row">
      <div class="col-lg-6"></div>
      <div class="col-lg-6"></div>
    </div>
    <div class="row">
      <div class="col-lg-8"></div>
      <div class="col-lg-4"></div>
    </div>
    <div class="row">
      <div class="col-lg-12"></div>
    </div>
  </div>
</body>

Bootstrap 2:

<body>
  <div class="row">
    <div class="span6"></div>
    <div class="span6"></div>
  </div>
  <div class="row">
    <div class="span8"></div>
    <div class="span4"></div>
  </div>
  <div class="row">
    <div class="span12"></div>
  </div>
</body>

1
.row ต้องการ .container หรือในกรณีนี้ .container-fluid
netAction

1
หากคุณใช้สไตล์ชีท bootstrap เวอร์ชันเก่าcontainer-fluidจะทำให้เกิดแถบเลื่อนแนวนอน หากต้องการแก้ไขสิ่งนี้ให้เพิ่มสิ่งนี้ลงในสไตล์ชีตของคุณ.container-fluid{ padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; }
Charlie

29

นี่คือวิธีการตั้งค่าที่คุณต้องการด้วยBootstrap 3 :

<div class="container-fluid">
    <div class="row"> <!-- Give this div your desired background color -->
        <div class="container">
            <div class="row">
                <div class="col-md-12">
                    ... your content here ...
                </div>
            </div>
        </div>
    </div>
</div>

container-fluidส่วนหนึ่งที่ทำให้แน่ใจว่าคุณสามารถเปลี่ยนพื้นหลังมากกว่าเต็มความกว้าง containerส่วนทำให้แน่ใจว่าเนื้อหาของคุณจะยังคงอยู่ในห่อมีความกว้างคงที่

วิธีนี้ใช้ได้ผล แต่โดยส่วนตัวแล้วฉันไม่ชอบการทำรังทั้งหมด อย่างไรก็ตามฉันยังไม่พบวิธีแก้ปัญหาที่ดีกว่านี้


3
ดูเหมือนว่า "ไม่มีคอนเทนเนอร์ใดที่ซ้อนกันได้ " getbootstrap.com/css/#overview-containerดังนั้นคาดว่าจะมีปัญหาเล็กน้อยที่นี่ (แต่ฉันคิดว่าฉันจะยังคงใช้วิธีแก้ปัญหาของคุณ)
Thibaut Barrère

เป็นที่น่าสังเกตว่าคลาสของ container-fluid ไม่มีใน bootstrap 3.0 แต่มีให้ใน 3.1 ขึ้นไป
Dev

29

คำตอบที่รวดเร็ว

  1. ใช้ไม่ได้ซ้อนทับหลายตัว .container s
  2. ตัดสิ่งที่.containerคุณต้องการให้มีพื้นหลังแบบเต็มความกว้างในไฟล์div
  3. เพิ่มพื้นหลัง CSS ใน div การตัด

Fiddles: Simple: https://jsfiddle.net/vLhc35k4/ , Container borders: https://jsfiddle.net/vLhc35k4/1/
HTML:

<div class="container">
  <h2>Section 1</h2>
</div>
<div class="specialBackground">
  <div class="container">
    <h2>Section 2</h2>
  </div>
</div>

CSS: .specialBackground{ background-color: gold; /*replace with own background settings*/ }

ข้อมูลเพิ่มเติม

อย่าใช้ตู้คอนเทนเนอร์

หลายคน ( ผิด ๆ ) จะแนะนำว่าคุณควรใช้ภาชนะที่ซ้อนกัน
ทางที่ดีคุณควรไม่
พวกเขาไม่คิดจะซ้อน (โปรดดูที่ " ตู้คอนเทนเนอร์ส่วน " " ในเอกสาร)

มันทำงานอย่างไร

divเป็นองค์ประกอบบล็อกซึ่งโดยค่าเริ่มต้นจะครอบคลุมถึงความกว้างเต็มของเนื้อหาเอกสารมีคุณลักษณะเต็มความกว้าง นอกจากนี้ยังมีความสูงของเนื้อหา (หากคุณไม่ได้ระบุไว้เป็นอย่างอื่น)

คอนเทนเนอร์ bootstrap ไม่จำเป็นต้องเป็นลูกโดยตรงของร่างกายเป็นเพียงคอนเทนเนอร์ที่มีช่องว่างภายในบางส่วนและอาจมีความกว้างคงที่ของตัวแปรความกว้างหน้าจอ

หากเส้นตารางพื้นฐาน.containerมีความกว้างคงที่บางส่วนก็จะจัดกึ่งกลางอัตโนมัติในแนวนอน
ดังนั้นจึงไม่มีความแตกต่างไม่ว่าคุณจะวางเป็น:

  1. ลูกโดยตรงของร่างกาย
  2. ลูกโดยตรงของพื้นฐาน divที่เป็นลูกโดยตรงของร่างกาย

โดย "พื้นฐาน" divหมายความdivว่าไม่มี CSS ที่เปลี่ยนแปลงเส้นขอบช่องว่างขนาดตำแหน่งหรือขนาดเนื้อหา เป็นเพียงองค์ประกอบ HTML ที่มีdisplay: block;CSS และอาจเป็นพื้นหลัง
แต่แน่นอนว่าการตั้งค่า CSS แบบแนวตั้ง (ความสูงช่องว่างด้านบน ... ) ไม่ควรทำลายตาราง bootstrap :-)

Bootstrap เองก็ใช้แนวทางเดียวกัน

... ทั้งหมดนี้เป็นเว็บไซต์ของตัวเองและในตัวอย่าง "JUMBOTRON":
http://getbootstrap.com/examples/jumbotron/


1
คำตอบนี้มีความละเอียดถี่ถ้วนและยืนกรานว่าการซ้อนคอนเทนเนอร์ภายในคอนเทนเนอร์อื่นเป็น 'ความคิดที่แย่มาก' (เช่น 'การข้ามสตรีม' ที่ไม่ดีใน Ghostbusters) และเขาชี้ไปที่การอ้างอิงเว็บไซต์ Bootstrap ที่สำรองข้อมูลนี้ การรวมคอนเทนเนอร์ไว้ใน div ง่ายๆคือคำแนะนำและการที่ Boostrap ใช้เทคนิคนี้ในตัวอย่าง Jumbotron บอกฉันว่า jave.web เป็นผู้ชนะของวันนี้!
Volksman

ตัวอย่าง jumbotron นั้นลบคำถามของฉันทั้งหมด
Alexander Kim

บางครั้งก็ไม่สามารถปิด Container และเปิด Full-with Container ใหม่ได้ วิธีแก้ปัญหา ในคำตอบต่อไปนี้ดีกว่า!
RubbelDeCatc

21

มีวิธีแก้ปัญหาโดยใช้ vw มีประโยชน์เมื่อคุณไม่สามารถสร้างที่เก็บของเหลวใหม่ได้ ภายใน div 'container' แบบคลาสสิกจะมีขนาดเต็ม

.row-full{
 width: 100vw;
 position: relative;
 margin-left: -50vw;
 left: 50%;
}

หลังจากนี้มีปัญหาแถบด้านข้าง (ขอบคุณ @Typhlosaurus) แก้ไขด้วยฟังก์ชั่น js นี้เรียกมันเมื่อโหลดเอกสารและปรับขนาด:

function full_row_resize(){
    var body_width = $('body').width();
    $('.row-full').css('width', (body_width));
    $('.row-full').css('margin-left', ('-'+(body_width/2)+'px'));
    return false;
}

3
นี่เป็นคำตอบที่ใกล้เคียงอย่างยิ่งซึ่งไม่จำเป็นต้องมีการเปลี่ยนแปลงเค้าโครงหน้าโดยรวมและบางครั้งก็เพียงพอ แต่มีปัญหาเล็กน้อยเกี่ยวกับแถบเลื่อน .row-full จะเติมเต็มทั้งหน้าต่างโดยไม่สนใจแถบเลื่อนซึ่งแตกต่างจากของไหลในตู้คอนเทนเนอร์ซึ่งจะเติมทั้งหน้าต่างโดยมีหรือไม่มีแถบเลื่อนขึ้นอยู่กับว่าแถบเลื่อนนั้นทึบหรือไม่
Typhlosaurus

ว้าว. js ทำเคล็ดลับฉันค้นหาวิธีแก้ปัญหามาหลายชั่วโมงแล้ว ปัญหาของฉันคือเนื้อหาถูกป้อนภายใน cms ดังนั้นจึงไม่สามารถเปลี่ยน html ภายนอกได้ อยากทราบจริงๆว่ามีวิธีแก้โดยไม่ต้องใช้ js.
drooh


6

หากคุณไม่สามารถเปลี่ยนเค้าโครง HTML:

.full-width {
    width: 100vw;
    margin-left: -50vw;
    left: 50%;
}
<div class="container">
  <div class="row">
    <div class="col-xs-12">a</div>
    <div class="col-xs-12">b</div>
    <div class="col-xs-12 full-width">c</div>
    <div class="col-xs-12">d</div>
  </div>
</div>

การสาธิต: http://www.bootply.com/tVkNyWJxA6


2

แทน

style="width:100%"

ลองใช้

class="col-xs-12"

มันจะช่วยคุณได้ 1 ตัว :)


คำตอบนี้ไม่ใช่สิ่งที่ OP ขอ สิ่งนี้จะสร้างคอลัมน์ที่มีความกว้างเต็มของ.containerdiv ด้านนอกแต่ไม่เหมือนกับความกว้างเต็มของหน้าในเบราว์เซอร์ซึ่งเป็นคำถามที่ถาม
Hartley Brody

ฉันไม่เห็นว่า OP ขอ "ความกว้างเต็มของหน้าในเบราว์เซอร์" คุณเข้าใจมันอย่างไร?
Yevgeniy Afanasyev

2

บางครั้งก็ไม่สามารถปิดที่เก็บเนื้อหาได้ วิธีแก้ปัญหาที่เราใช้นั้นแตกต่างกันเล็กน้อย แต่ป้องกันไม่ให้ล้นเนื่องจากขนาดแถบเลื่อนของ firefox!

.full-width {
 margin-top: 15px;
 margin-bottom: 15px;
 position: relative;
 width: calc(100vw - 10px);
 margin-left: calc(-50vw + 5px);
 left: 50%;
}

นี่คือตัวอย่าง: https://jsfiddle.net/RubbelDeKatz/wvt9253q


ด้วย Bootstrap 4 นี่เป็นคำตอบที่ดีที่สุด ไชโย!
Metro Smurf

1

ขออภัยควรขอ css ของคุณด้วย ตามที่เป็นอยู่โดยทั่วไปสิ่งที่คุณต้องดูคือการให้คอนเทนเนอร์ของคุณเป็นสไตล์.container { width: 100%; }ใน css ของคุณจากนั้น div ที่แนบมาจะสืบทอดสิ่งนี้ตราบเท่าที่คุณไม่ได้ให้ความกว้างของมันเอง นอกจากนี้คุณยังขาดแท็กปิดบางแท็กและแท็ก</center>ปิด<center>โดยที่ไม่เคยเปิดอย่างน้อยก็ในส่วนนี้ของโค้ด ฉันไม่แน่ใจว่าคุณต้องการรูปภาพใน div เดียวกันที่มีเนื้อหาของคุณหรือแยกกันฉันจึงสร้างสองตัวอย่าง ฉันเปลี่ยนความกว้างของ img เป็น 100px เพียงเพราะ jsfiddle มีพื้นที่ดูขนาดเล็ก แจ้งให้เราทราบหากไม่ใช่สิ่งที่คุณกำลังมองหา

เนื้อหาและรูปภาพแยกจากกัน: http://jsfiddle.net/QvqKS/2/

เนื้อหาและรูปภาพใน div เดียวกัน (img ลอยไปทางซ้าย): http://jsfiddle.net/QvqKS/3/


0

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

ในสถานการณ์ของฉันฉันต้องการให้เนื้อหาทั้งหมด(ของทุกหน้า)แสดงผลภายในคอนเทนเนอร์ดังนั้นนี่คือส่วนของโค้ดจาก _Layout.cshtml ของฉัน:

<div id="body">

    @RenderSection("featured", required: false)

    <section class="content-wrapper main-content clear-fix">
        <div class="container">
            @RenderBody()
        </div>
    </section>
</div>

ในหน้าดัชนีหน้าแรกของฉันฉันมีภาพส่วนหัวพื้นหลังที่ฉันต้องการเติมเต็มความกว้างของหน้าจอดังนั้นวิธีแก้ปัญหาคือทำให้ Index.cshtml เป็นดังนี้:

@section featured {
<!-- This content will be rendered outside the "container div" -->
<div class="intro-header">
    <div class="container">SOME CONTENT WITH A NICE BACKGROUND</div>
</div>
}

<!-- The content below will be rendered INSIDE the "container div" -->
<div class="content-section-b">
    <div class="container">
        <div class="row">
          MORE CONTENT
        </div>
    </div>
</div>

ฉันคิดว่าสิ่งนี้ดีกว่าการพยายามหาวิธีแก้ปัญหาเนื่องจากส่วนต่างๆถูกสร้างขึ้นโดยมีวัตถุประสงค์เพื่อให้ (หรือบังคับ) มุมมองเพื่อแทนที่เนื้อหาบางส่วนในเค้าโครงแบบไดนามิก


0

แม้ว่าจะมีคนบอกว่าคุณจะต้องใช้. container-fluid ในกรณีนี้ แต่คุณจะต้องลบช่องว่างภายในออกจาก bootstrap ด้วย


0

คำตอบต่อไปนี้ไม่ได้เหมาะสมที่สุดสำหรับการวัดใด ๆ แต่ฉันต้องการสิ่งที่รักษาตำแหน่งภายในคอนเทนเนอร์ในขณะที่มันยืด div ด้านในจนสุด

https://jsfiddle.net/fah5axm5/

$(function() {
    $(window).on('load resize', ppaFullWidth);

    function ppaFullWidth() {
        var $elements = $('[data-ppa-full-width="true"]');
        $.each( $elements, function( key, item ) {
            var $el = $(this);
            var $container = $el.closest('.container');
            var margin = parseInt($container.css('margin-left'), 10);
            var padding = parseInt($container.css('padding-left'), 10)
            var offset = margin + padding;

            $el.css({
                position: "relative",
                left: -offset,
                "box-sizing": "border-box",
                width: $(window).width(),
                "padding-left": offset + "px",
                "padding-right": offset + "px"
            });
        });
    }
});

0

ฉันจะใช้ div 'คอนเทนเนอร์' สองรายการแยกกันดังนี้:

<div class="container">
   /* normal*/
</div>
<div class="container-fluid">
   /*full width container*/
</div>

โปรดทราบว่าคอนเทนเนอร์ของไหลไม่ติดตามจุดพักของคุณและเป็นคอนเทนเนอร์แบบเต็มความกว้าง

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