2015-07-24 9 views
28

Yani İşaretlemeFlexbox'ta ortam sorgularını kullanarak satır başına öğe sayısı nasıl kontrol edilir?

<div class="container"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

Ve aşağıdaki stilleri(SUKDÖ)

@mixin max-width($width) { 
    @media screen and (max-width: $width) { 
     @content; 
    } 
} 

.container { 
    display: flex; 

    @include max-width(992px) { 
     number: 4; //Hypothetical property that is supposed to control number per row 
    } 

    @include max-width(640px) { 
     number: 2; //Hypothetical property that is supposed to control number per row 
    } 
} 
.item { 
    background-color: tomato; 
    padding: 20px; 
    margin-right: 20px; 
    flex: 1; 
} 

benim varsayımsal number özelliğine gerçek flexbox'a CSS alternatif var mı şu ben hayal olduğunu can Satır başına kaç öğe gösterilecek?

Float benzeri ızgara, width nedeniyle bir için .items sınırına sığabileceğinden kullanışlıdır. Ancak, flexbox ile farklı genişlikteki öğelerin düzenini ve sayısını kontrol etmek için çok sayıda .row sınıfı gibi geçici çözümler kullanmalıyım. Şimdiye kadar şanslıydım, ancak böyle bir yaklaşımla başarısız olacak belirli bir düzen türü var. Yüzde genişlikleri temiz marjları ile elemanlarına uygulamak zor olduğundan

Codepen link to demonstrate

+0

Eh hala biraz sen satır başına elde edeceğiniz ürün kontrol etmek genişliği kullanabilir - esnek-basis' 'yoluyla ... – CBroe

+0

CSS ızgara bugün doğrudan bir şekilde bu sorunu gidermek için bir şey olurdu : https: //developer.mozilla.or g/en-US/docs/Web/CSS/CSS_Grid_Layout/Basic_Concepts_of_Grid_Layout –

cevap

61

Ben, blokların etrafında marjı kurtulmak zorunda kaldı, ama sen http://codepen.io/anon/pen/jPeLYb?editors=110 değişiklikleri görebilirsiniz:

@mixin max-width($width) { 
    @media screen and (max-width: $width) { 
     @content; 
    } 
} 

.container { 
    position: relative; 
    display: flex; 
    flex-flow: row wrap; 
} 
.item { 
    background-color: tomato; 
    box-sizing: border-box; 
    padding: 20px; 
    outline: 2px solid blue; 
    flex: 1; 
} 

@include max-width(992px) { 
    .item { 
     flex-basis: 25%; 
     background-color: red; 
    } 
} 

@include max-width(640px) { 
    .item { 
     flex-basis: 50%; 
     background-color: green; 
    } 
} 

burada önemli parçalardır: FlexBox mul görüntülenmesini sağlar

  • flex-flow: row wrap tiple satırlar Bu durumda gövde kısmı, daha kaba göre genişlikleri yapar

  • position: relative içinde width eşdeğerdir

  • flex-basis (bu screw yuvarlama) (varsayılan nowrap olan)

+2

piksel cinsinden btw marjı, flex ile düzgün çalışıyor. “Margin-right: 100px” yi ekledim ve işe yaradı. Şamandıra düzenlerinde olduğu gibi taşma yok. Cevap için teşekkürler, tam ihtiyacım olan şey. – knitevision

+1

numaralı telefondan tümüyle haberdar olmak için burayı bir kez daha fısıldayan bir kutuya bindikten sonra asla kötü bir hack olan şamandıraları düşünmeyeceksiniz. Bootstrap'in ızgarası yüzenlere dayanmaktadır. Modern tarayıcı desteğiniz varsa, saf flexbox'ı bu şekilde daha kolay ve daha güçlü kullanabilirsiniz. IE10'u yaratacak sass-flex-mixins adında bir paket var. – httpete

+0

@httpete Şamandıralar "kötü bir hack" değil, tam olarak tasarlandığı gibi çalışırlar. Aksine, bu sorunun varlığı, çok iyi tasarlanmış bir standart esnek kutunun ne olduğunu göstermeye yardımcı olur. – mystrdat

İlgili konular