Bootstrap 3.0 - Sabit Sütun Boyutlarını içeren Değişken Izgara


126

Bootstrap'i nasıl kullanacağımı öğreniyorum. Şu anda, düzenler arasında ilerliyorum. Bootstrap oldukça havalı olsa da, gördüğüm her şey eski görünüyor. Hayatım boyunca, anlayamadığım temel bir düzen olduğunu düşündüğüm bir şeye sahibim. Düzenim aşağıdaki gibi görünüyor:

---------------------------------------------------------------------------
|       |       |                                                         |
|       |       |                                                         |
| 240px | 160px | All Remaining Width of the Window                       |
|       |       |                                                         |
|       |       |                                                         |
--------------------------------------------------------------------------|

Bu ızgaranın, pencerenin tüm yüksekliğini kaplaması gerekir. Anladığım kadarıyla sabit ve akışkan genişlikleri karıştırmam gerekiyor. Ancak Bootstrap 3.0 artık akışkan sınıfına sahip görünmüyor. Olsa bile, akışkan ve sabit kolon boyutlarını nasıl karıştıracağımı çözemiyorum. Bootstrap 3.0'da bunu nasıl yapacağını bilen var mı?


Satırların ve sütunların yanında tabloları kullanmayı inceleyin.
kalu

İşte Bootstrap 3 için sabit akışkan bir örnek: codeply.com/go/GN4QinVrjI
Zim

Yanıtlar:


32

Bootstrap 3 ile akışkan ve sabit genişlikleri karıştırmanın gerçekten kolay bir yolu yoktur. Izgara sistemi akıcı ve duyarlı bir şey olacak şekilde tasarlandığından, bunun böyle olması amaçlanmıştır. Bir şeyi hacklemeyi deneyebilirsiniz, ancak bu, Responsive Grid sisteminin yapmaya çalıştığı şeye ters düşecektir, amacı bu düzeni farklı cihaz türleri arasında akıtmaktır.

Bu düzene bağlı kalmanız gerekiyorsa, sayfanızı özel CSS ile düzenlemeyi ve ızgarayı kullanmamayı düşünürüm.


5
Sanırım bu tür bir şey, Flexbox'ın tam desteğe sahip olmasını beklemek zorunda kalacak, ancak yine de gerçekten yetersiz. Bootstrap'in modeli, sütun sayısı statik olduğunda harikadır, ancak, örneğin, sütunları dinamik olarak gizleyip gösterebilirseniz, en az bir sütunun akıcı olması için desteğin olması çok daha anlamlı olmaya başlar.
Nate Bundy

1
Lütfen çözümle birlikte bu bağlantıya bir referans eklemek için yanıtınızı düzenleyin. Saygılarımızla: stackoverflow.com/questions/8740779/…
Morty,

151

düzenleme: Pek çok insan bunu yapmak istiyor gibi göründüğünden, burada daha genel bir kullanım senaryosu olan kısa bir kılavuz yazdım https://www.atlascode.com/bootstrap-fixed-width-sidebars/ . Umarım yardımcı olur.

Bootstrap3 ızgara sistemi, sabit genişlikte yan menülere izin vermek için kök satırı ayarlamanıza izin veren satır iç içe geçirmeyi destekler.

Kök satıra sol dolgu koymanız, ardından normal ızgara düzeni öğelerinizi içeren bir alt satıra sahip olmanız gerekir.

Bunu genellikle böyle yapıyorum http://jsfiddle.net/u9gjjebj/

html

<div class="container">
    <div class="row">
        <div class="col-fixed-240">Fixed 240px</div>
        <div class="col-fixed-160">Fixed 160px</div>
        <div class="col-md-12 col-offset-400">
            <div class="row">
            Standard grid system content here
            </div>
        </div>
    </div>
</div>

css

.col-fixed-240{
    width:240px;
    background:red;
    position:fixed;
    height:100%;
    z-index:1;
}

.col-fixed-160{
    margin-left:240px;
    width:160px;
    background:blue;
    position:fixed;
    height:100%;
    z-index:1;
}

.col-offset-400{
    padding-left:415px;
    z-index:0;
}

Bu güzel, ancak sabit sütunun içine koyarsanız, örneğin bu <p> <a class="btn btn-default" href="#" role="button"> Ayrıntıları görüntüleyin & raquo; </a> </p> veya Bootstrap açılır menüsü varsa bunlar sabit sütunda çalışmıyor. Bunun bir çözümü var mı?
Vaclav Elias

@VaclavElias konumuna tam boyutlu bir fark koymayı deneyin: göreli ve ardından açılır menü? Eğer sorun göstermek için bir jsfiddle kurarsın olur
w00t

Bunun tüm tarayıcılarda nasıl çalıştığını henüz görmedim, ancak aksi halde, iyi iş, aferin.
Phil Cooper

Bunu sağ taraftaki sabit sütunlarla yapmanın bir yolu var mı?
Sean

3
position: fixedbu sütunun içeriğini kaydırırken sayfanın geri kalanının üzerinde kayması anlamına gelir. Benim durumumda kullanarak düzelttim position: absolute.
laurent

26

veya table-cell ile display özelliğini kullanın;

css

.table-layout {
    display:table;
    width:100%;
}
.table-layout .table-cell {
    display:table-cell;
    border:solid 1px #ccc;
}

.fixed-width-200 {
    width:200px;
}

html

<div class="table-layout">
    <div class="table-cell fixed-width-200">
        <p>fixed width div</p>
    </div>
    <div class="table-cell">
        <p>fluid width div</p>    
    </div>
</div>

http://jsfiddle.net/DnGDz/


1
Sorun Eski sevgilisini kullanırken olduğunu. ".visible-xs , becouse display: table-cell` olur display:block...
Dariusz Filipiak

21

Biraz farklı bir sorun yaşadım:

  • Sabit ve değişken sütunları tam pencere düzeninin parçası olarak değil, bir tablonun parçası olarak birleştirmem gerekiyordu
  • Hem sola hem de sağa sabitlenmiş sütunlara ihtiyacım vardı
  • İçeren satırın tam yüksekliğini kullanan sütun arka planları konusunda endişelenmedim

Sonuç olarak, floatsol ve sağ sütunlara başvurdum ve rowaradaki akışkan sütunları yapmak için Bootstrap'leri kullanabilirim .

<div>
    <div class="pull-left" style="width:240px">Fixed 240px</div>
    <div class="pull-right" style="width:120px">Fixed 120px</div>
    <div style="margin-left:240px;margin-right:120px">
        <div class="row" style="margin:0px">
            Standard grid system content here
        </div>
    </div>
</div>

4
@Schemetrical Bir sorum olmadı. Biraz farklı bir sorunum olduğunu anlattım ve Google'dan buraya gelen diğer insanlara yardım etmek için geldiğim çözümü ekledim.
Paddy Mann

1
Cevabınız çok değerli. Oldukça basit ama sorunumu çözüyor. Çok teşekkürler.
Charles

Neden div satırına cevabınızda içeren div'in sahip olduğu kenar boşluklarını veremiyorsunuz?
GreenAsJade

Bu cevap cidden meşru. Önyükleme sütunlarını kullanmanız gerekiyorsa, ancak bunların belirli ekran genişliklerinde daralmasını istemiyorsanız, ihtiyacınız olan şey budur (örneğin, col-md-3 yerine sola / sağa çek kullanın).
Sam

Bu harika bir cevap gibi görünüyor. Ortada marginve paddingbenim sıramda bazı sorunlar yaşıyorum ama bu çözülebilir bir problem olmalı. Bu yaklaşımı kullanmanın istenmeyen sonuçları nelerdir?
Vishal

15

Güncellenmiş 2018

IMO, Bootstrap 3'te buna yaklaşmanın en iyi yolu, Bootstrap'in kesme noktaları ile hizalanan ortam sorgularını kullanmaktır, böylece yalnızca sabit genişlikteki sütunları daha büyük ekranlar olarak kullanırsınız ve daha sonra mizanpajın daha küçük ekranlarda yanıt vermesine izin verirsiniz. Bu şekilde duyarlılığı korursunuz ...

@media (min-width:768px) {
  #sidebar {
      width: inherit;
      min-width: 240px;
      max-width: 240px;
      min-height: 100%;
      position:relative;
  }
  #sidebar2 {
      min-width: 160px;
      max-width: 160px;
      min-height: 100%;
      position:relative;
  }
  #main {
      width:calc(100% - 400px);
  }
}

Working Bootstrap Fixed-Fluid Demo

Bootstrap 4 flexbox'a sahip olduğundan, bunun gibi düzenler çok daha kolay olacaktır: http://www.codeply.com/go/eAYKvDkiGw


3

Tamam, cevabım çok güzel:

<style>
    #wrapper {
        display:flex;    
        width:100%;
        align-content: streach;
        justify-content: space-between;
    }    

    #wrapper div {
        height:100px;
    }

    .static240 {
        flex: 0 0 240px;
    }
    .static160 {
        flex: 0 0 160px;
    }

    .growMax {
        flex-grow: 1;
    }

</style>

<div id="wrapper">
  <div class="static240" style="background:red;" > </div>
  <div class="static160"  style="background: green;" > </div> 
  <div class="growMax"  style="background:yellow;"  ></div>
</div>

jsfiddle oyun alanı

tüm tarayıcıları desteklemek istiyorsanız, https://github.com/10up/flexibility kullanın


1

GÜNCELLEME 2014-11-14: Aşağıdaki çözüm çok eski, esnek kutu düzen yöntemini kullanmanızı tavsiye ederim. İşte bir genel bakış: http://learnlayout.com/flexbox.html


Çözümüm

html

<li class="grid-list-header row-cw row-cw-msg-list ...">
  <div class="col-md-1 col-cw col-cw-name">
  <div class="col-md-1 col-cw col-cw-keyword">
  <div class="col-md-1 col-cw col-cw-reply">
  <div class="col-md-1 col-cw col-cw-action">
</li>

<li class="grid-list-item row-cw row-cw-msg-list ...">
  <div class="col-md-1 col-cw col-cw-name">
  <div class="col-md-1 col-cw col-cw-keyword">
  <div class="col-md-1 col-cw col-cw-reply">
  <div class="col-md-1 col-cw col-cw-action">
</li>

SCSS

.row-cw {
  position: relative;
}

.col-cw {
  position: absolute;
  top: 0;
}


.ir-msg-list {

  $col-reply-width: 140px;
  $col-action-width: 130px;

  .row-cw-msg-list {
    padding-right: $col-reply-width + $col-action-width;
  }

  .col-cw-name {
    width: 50%;
  }

  .col-cw-keyword {
    width: 50%;
  }

  .col-cw-reply {
    width: $col-reply-width;
    right: $col-action-width;
  }

  .col-cw-action {
    width: $col-action-width;
    right: 0;
  }
}

Çok fazla önyükleme düzen kodunu değiştirmeden.


Güncelleme (OP'den değil): Bu cevabın anlaşılmasını kolaylaştırmak için aşağıya kod parçacığı ekleme. Ancak beklendiği gibi çalışmıyor.


-1 Bu cevap bana hiç mantıklı gelmiyor. Sütunların toplamı 12'ye kadar çıkmıyor. Ad ve klavye sütunları çakışıyor. Nasıl +2 oy aldığını anlamıyorum.
Mariano Desanze

-3

Neden sadece sol iki sütunu kendi css'nizde sabit olarak ayarlayıp ardından içeriğin geri kalanı için 12 sütunun tamamını içeren yeni bir ızgara düzeni oluşturmuyorsunuz?

<div class="row">
    <div class="fixed-1">Left 1</div>
    <div class="fixed-2">Left 2</div>
    <div class="row">
        <div class="col-md-1"></div>
        <div class="col-md-11"></div>
    </div>
</div>

Bootstrap'te yalnızca sütunlar satırların hemen alt öğeleri olabilir.
Sai Dubbaka
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.