2015-07-30 11 views
5

Ana içerik alanını ortada tutan sol ve sağ kanvas kenar çubuklarıyla bir düzenim var.Sabit konumlu (kaydırma yok) Flex Düzeni

Kenar çubukları ve ana içerik, sağdan sola doğru esnek bir düzende yerleştirilmiş esnek öğelerdir.

Kenar çubukları, menüler ve meta bağlantılar içerir.

Soruma şu soru geliyor: içerik alanını kaydırırken, kenar çubuklarını sabit konumda bırakarak üst konumda kalmaları ve aşağı kaydırmamaları mümkün mü?

JS Fiddle: http://jsfiddle.net/Windwalker/gfozfpa6/2/

HTML:

<div class="flexcontainer"> 
    <div class="flexitem" id="canvas-left"> 
     <p>This content should not scroll</p> 
    </div> 
    <div class="flexitem" id="content"> 
     <div> 
      <p>Scrolling Content</p> 
     </div> 
    </div> 
    <div class="flexitem" id="canvas-right"> 
     <p>This content should not scroll</p> 
    </div> 
</div> 

CSS i esnek ile bunu nasıl bilmiyorum, ama burada bir easyer/alternatif css tüm kaldırmak olduğunu

.flexcontainer { 
    display: flex; 
    flex-direction: row; 
    min-height: 100%; 
    align-items: stretch; 
} 
.flexitem { 
    display: flex; 
} 
#canvas-left { 
    background: yellow; 
    order: -1; 
    flex: 0 0 57px; 
} 
#content { 
    background: green; 
    order: 1; 
    padding: 1rem; 
} 
#content div { 
    display: block; 
} 
#canvas-right{ 
    background: blue; 
    order: 2; 
    flex: 0 0 57px; 
} 
+0

Yukarıdakilere rağmen, ben öyle düşünmüyorum. "Position" özelliklerini mutlak veya sabit gibi eklemeye başladığınızda, blok biçimlendirme içeriğini kaldırırsınız ve böylece 'flexbox' artık geçerli olmaz (AFAIK). * Belki * "align-self" ile bir şey ama herhangi bir kod veya yapı görmeden yorum yapmak zor. –

cevap

6

Lütfen benzer soruya verilen çözümle bakın: How to simulate 'position:fixed' behavior on Flexbox-aligned sidebar. ": Sabit konumda":

<div class="flexitem" id="canvas-left"> 
    <div class="fixed"> 
     <p>This content should not scroll</p> 
    </div> 
</div> 

Ve CSS düzgün stil ekleyin: sarmalayıcı

Kodunuzdaki göre ayrıca içinizdeki içeriği sarabilirsiniz İşte

.fixed { 
    position: fixed; 
    width: 57px; /* according to #canvas-left */ 
} 

örneğidir senin Sabit sol kenar çubuğuna sahip kod: http://jsfiddle.net/8hm3849m/. Bu hilenin size kenar çubukları için uygun esnek bir kılavuz sunmayacağını, sarıcının genişliğinin sabitleneceğini (veya JavaScript ile dinamik olarak ayarlanacağını) unutmayın.

+0

Bu çözüm için çok teşekkürler! :-) – Windwalker

0

o flex ... ve bir dış div, iç öğelerde kolaylaştırıcı için dolgu eklememeye çalışın, o zaman çok sayıda div var

olup olmadığını hesaplamak gerekmez
.flexcontainer { 
    display: block; 
    min-height: 100%; 
    align-items: stretch; 
} 
.flexitem { 
    display: flex; 
} 
#canvas-left { 
    background: yellow; 
    order: -1; 
    left: 0px; 
    width: 20%; 
    position: fixed; 
} 
#content { 
    position: absolute; 
    background: green; 
    order: 1; 
    width: 60%; 
    left: 20%; 
} 
#content p { 
    display: block; 
    padding: 1rem; 
} 
#canvas-right{ 
    background: blue; 
    order: 2; 
    right: 0px; 
    width: 20%; 
    position: fixed; 
} 
+0

no problem, senin yardımın :) –

+0

Üzgünüm, giriş tuşuna çok erken vurdum. İşte önerilerinizle ilgili gerçek düşüncem: Sizin yaklaşımınız, başlangıçta esnek bir mizanpaj tekniği seçtiğimi gösteriyor: soldaki sütun, simgeleri, daraltılabilir ve genişletilebilir, yani sol sütunun genişliği değişir ve içerik sütunu her zaman olmalıdır. gerçek genişliğinden bağımsız olarak sol tuval sütununa hizala. – Windwalker

+0

Elbette bunu,% 20 ofset değerini başka bir değere geçirmek için 'menu-expanded' veya 'menu-collapsed' gibi CSS sınıfları ekleyerek yönetebiliyordum ama bu çok zor kodlanmış .....: -/ – Windwalker