Flex: 1 ne anlama geliyor?


130

Hepimizin bildiği gibi, flexmülkiyet için bir kısaltmadır flex-grow, flex-shrinkve flex-basisözellikleri. Varsayılan değeri, 0 1 autoyani

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

ama fark ettim, birçok yerde flex: 1kullanılıyor. 1 1 autoVeya için kısaltma mı 1 0 auto? Ne anlama geldiğini anlayamıyorum ve google'da hiçbir şey alamıyorum.


1
w3schools.com'dan alıntı yapıyor "Esnek özelliği, esnek büyüme, esnek küçültme ve esnek temel özellikleri için bir kısaltmadır"
Imran Ali

Yanıtlar:


87

İşte açıklama:

https://www.w3.org/TR/css-flexbox-1/#flex-common

esnek: <pozitif-sayı>
esnek ile eşdeğer: <pozitif-sayı> 1 0. Esnek öğeyi esnek hale getirir ve esnek temelini sıfır olarak ayarlayarak, esnek kapsayıcıdaki boş alanın belirtilen oranını alan bir öğeyle sonuçlanır. Esnek kapsayıcıdaki tüm öğeler bu deseni kullanıyorsa boyutları belirtilen esnek faktörle orantılı olacaktır.

Bu nedenle flex:1eşdeğerdirflex: 1 1 0


10
esnek: 1; flex eşit değildir: 1 1 0; Aşağıdaki cevabıma bakın ro nedenini görün.
DreamTeK

Bir yan not olarak: Sanırım aynısını flextüm çocuklara uygularken, önemli olan aslında flex: 1 ? 0;nerede "?" herhangi bir şey olabilir, hiçbir fark
yaratmaz

@DreamTeK Yalnızca Chrome gibi standartlarla uyumlu olmayan tarayıcılarda.
TylerH

1
@TylerH Cevabımda doğru ve not edildi ancak what does flex:1 mean?yoruma açık. Operasyon şartnameyi sormaz, sadece neler olduğunu sorar. Maalesef Chrome artık en popüler tarayıcıdır ve destek gerekmektedir. Ben de Chrome hayranı veya kullanıcısı değilim!
DreamTeK

1
@TylerH Bu yüzden cevabımda "Bu tarayıcıların şartnameye uymadığı için bunun başarısız olduğuna dikkat edilmelidir." şartname bağlantısı ile birlikte!
DreamTeK

100

flex: 1 şu anlama gelir:

flex-grow : 1;    ➜ The div will grow in same proportion as the window-size       
flex-shrink : 1;  ➜ The div will shrink in same proportion as the window-size 
flex-basis : 0;   ➜ The div does not have a starting value as such and will 
                     take up screen as per the screen size available for
                     e.g:- if 3 divs are in the wrapper then each div will take 33%.

1
@CookieMonster Hayır, flex: 1demek 1 1 0... ama IE'de öyle1 1 0px
Ason

@LGSon, birimi temel değerden çıkarabilir 1 1 0ve 1 1 0pxeşdeğerdir. IE sadece bir birimi olanı destekliyor.
CookieMonster

@CookieMonster Flexbox'ın nasıl çalıştığını biliyorum, sadece ilk yorumunuzu düzeltiyordum, bu yanlış.
Ason

@LGSon, flex: 1, 1 1 0px ne zaman 1 1 0pxve 1 1 0eşdeğerdir yanlış anlamına gelir ?
CookieMonster

2
@CookieMonster Aynı şeyi oluşturabilirler , ancak eşdeğer değildirler, çünkü için birimsiz bir değer kullanırken flex-basis, içerik yok sayılır ve öğe boyutu, flex-grow/ flex-shrink.
Ason

78

DİKKATLİ OL

Bazı tarayıcılarda:

flex:1; eşit değilflex:1 1 0;

flex:1;= flex:1 1 0n;(burada n bir uzunluk birimidir).

  • esnek büyüme: Öğenin esnek öğelerin geri kalanına göre ne kadar büyüyeceğini belirten bir sayı.
  • flex-shrink Öğenin, esnek öğelerin geri kalanına göre ne kadar küçüleceğini belirten bir sayı
  • flex-base Öğenin uzunluğu. Yasal değerler: "auto", "inherit" veya bir sayı ve ardından "%", "px", "em" veya başka bir uzunluk birimi.

Buradaki kilit nokta, esnek temelin bir uzunluk birimi gerektirmesidir .

Örneğin Chrome'da flex:1ve flex:1 1 0farklı sonuçlar üretin. Çoğu durumda işe flex:1 1 0;yarıyor gibi görünebilir, ancak gerçekte ne olduğunu inceleyelim:

MİSAL

Flex temeli ihmal edilir ve sadece flex-Grow ve flex-shrink uygulanır.

flex:1 1 0;= flex:1 1;=flex:1;

Bu ilk bakışta uygun görünebilir, ancak kabın uygulanan birimi yuvalanmışsa; beklenmeyeni bekle!

Bu örneği CHROME'da deneyin

.Wrap{
  padding:10px;
  background: #333;
}
.Flex110x, .Flex1, .Flex110, .Wrap {
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  flex-direction: column;
}
.Flex110 {
  -webkit-flex: 1 1 0;
  flex: 1 1 0;
}
.Flex1 {
  -webkit-flex: 1;
  flex: 1;
}
.Flex110x{
  -webkit-flex: 1 1 0%;
  flex: 1 1 0%;
}
FLEX 1 1 0
<div class="Wrap">
  <div class="Flex110">
    <input type="submit" name="test1" value="TEST 1">
  </div>
</div>

FLEX 1
<div class="Wrap">
  <div class="Flex1">
    <input type="submit" name="test2" value="TEST 2">
  </div>
</div>

FLEX 1 1 0%
<div class="Wrap">
  <div class="Flex110x">
    <input type="submit" name="test3" value="TEST 3">
  </div>
</div>

UYUMLULUK

Bazı tarayıcıların spesifikasyona uymaması nedeniyle bunun başarısız olduğu unutulmamalıdır .

Tam esnek özelliği kullanan tarayıcılar:

  • Firefox - ✓
  • Edge - ✓ (Biliyorum, ben de şok oldum.)
  • Chrome - x
  • Cesur - x
  • Opera - x
  • IE - (lol, uzunluk birimi olmadan çalışır ancak bir birimle çalışmaz.)

GÜNCELLEME 2019

Chrome'un son sürümleri nihayet bu sorunu çözmüş gibi görünüyor, ancak diğer tarayıcılar hala düzeltmedi.

Chrome Ver 74'te test edildi ve çalışıyor.


1
Değer 0 olduğunda, birim zorunlu değildir. Şartname bunun flex: 1aynı olduğunu söylüyor flex: 1 1 0. Örneğinizde .Wrap, .Flex110x,.Flex1, .Flex110, .Wrapkuraldaki sınıfı kaldırırsanız beklendiği gibi çalışır.

Lütfen bir bağlantı verin, şartnamede ne söylediğinizi bulamıyorum. Hiçbir şey icat etmedim, cevabım flexbox spesifikasyonuna dayanıyor

@Obsidian İşte bağlantı: w3.org/TR/css-flexbox-1 'Steno' kısmına giderseniz şunu bulacaksınız: "esnek: [pozitif sayı] Esnekle eşdeğer: [pozitif sayı] 1 0 ...
MikeB

1
@Toskan Maksimum uyumluluk için tam sözdizimini kullanınflex:1 1 0n;
DreamTeK

2
Bu farklılığa işaret ettiğiniz için teşekkürler, sorunlarımın nereden kaynaklandığını anlayamadım. Ödül al.
Nit
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.