Mempertimbangkan flex-direction
Hal pertama yang terlintas dalam pikiran ketika membaca pertanyaan Anda adalah bahwa hal flex-basis
itu tidak selalu berlaku width
.
Ketika flex-direction
adalah row
, flex-basis
kontrol lebar.
Tapi ketika flex-direction
adalah column
, flex-basis
kontrol tinggi.
Perbedaan utama
Berikut adalah beberapa perbedaan penting antara flex-basis
dan width
/ height
:
flex-basis
hanya berlaku untuk item fleksibel. Wadah fleksibel (yang juga bukan item fleksibel) akan diabaikan flex-basis
tetapi dapat digunakan width
dan height
.
flex-basis
hanya bekerja pada poros utama. Misalnya, jika Anda berada di dalam flex-direction: column
, width
properti akan diperlukan untuk mengukur item fleksibel secara horizontal.
flex-basis
tidak berpengaruh pada item fleksibel yang benar-benar diposisikan. width
dan height
properti akan diperlukan. Item fleksibel yang diposisikan benar-benar tidak berpartisipasi dalam tata letak flex .
Dengan menggunakan flex
properti, tiga properti - flex-grow
, flex-shrink
dan flex-basis
- dapat digabungkan dengan rapi menjadi satu deklarasi. Menggunakan width
, aturan yang sama akan membutuhkan banyak baris kode.
Perilaku Browser
Dalam hal bagaimana mereka diterjemahkan, seharusnya tidak ada perbedaan antara flex-basis
dan width
, kecuali flex-basis
ada auto
atau content
.
Dari spec:
7.2.3. The flex-basis
properti
Untuk semua nilai selain auto
dan content
, flex-basis
diselesaikan dengan cara yang sama seperti width
pada mode penulisan horizontal.
Tetapi dampak auto
atau content
mungkin minimal atau tidak sama sekali. Lebih dari spec:
auto
Ketika ditentukan pada item fleksibel, auto
kata kunci mengambil nilai properti ukuran utama sebagai yang digunakan flex-basis
. Jika nilai itu sendiri auto
, maka nilai yang digunakan adalah content
.
content
Menunjukkan ukuran otomatis, berdasarkan konten item fleksibel.
Catatan: Nilai ini tidak ada dalam rilis awal Layout Kotak Fleksibel, dan dengan demikian beberapa implementasi yang lebih lama tidak akan mendukungnya. Efek setara dapat dicapai dengan menggunakan auto
bersama dengan ukuran utama ( width
atau height
) dari auto
.
Jadi, sesuai dengan spesifikasi, flex-basis
dan width
menyelesaikan secara identik, kecuali flex-basis
ada auto
atau content
. Dalam kasus seperti itu, flex-basis
dapat menggunakan lebar konten (yang, mungkin, width
properti juga akan digunakan).
The flex-shrink
faktor
Penting untuk mengingat pengaturan awal wadah fleksibel. Beberapa pengaturan ini meliputi:
flex-direction: row
- item fleksibel akan sejajar secara horizontal
justify-content: flex-start
- item fleksibel akan menumpuk di awal garis pada sumbu utama
align-items: stretch
- item fleksibel akan meluas untuk menutupi ukuran silang wadah
flex-wrap: nowrap
- item fleksibel dipaksa untuk tetap dalam satu baris
flex-shrink: 1
- item fleksibel diperbolehkan menyusut
Perhatikan pengaturan terakhir.
Karena item fleksibel diperbolehkan menyusut secara default (yang mencegahnya meluap wadah), flex-basis
/ width
/ yang ditentukan height
mungkin ditimpa.
Misalnya, flex-basis: 100px
atau width: 100px
, ditambah dengan flex-shrink: 1
, tidak harus 100px.
Untuk membuat lebar yang ditentukan - dan tetap memperbaikinya - Anda harus menonaktifkan penyusutan:
div {
width: 100px;
flex-shrink: 0;
}
ATAU
div {
flex-basis: 100px;
flex-shrink: 0;
}
ATAU, seperti yang direkomendasikan oleh spesifikasi:
flex: 0 0 100px; /* don't grow, don't shrink, stay fixed at 100px */
7.2. Komponen Fleksibilitas
Penulis didorong untuk mengontrol fleksibilitas menggunakan flex
steno daripada dengan properti tangan langsung secara langsung, karena steno dengan benar me-reset komponen yang tidak ditentukan untuk mengakomodasi penggunaan umum .
Bug Peramban
Beberapa browser mengalami kesulitan menentukan ukuran item fleksibel dalam wadah fleksibel bersarang.
flex-basis
diabaikan dalam wadah fleksibel bersarang. width
bekerja.
Saat menggunakan flex-basis
, wadah mengabaikan ukuran anak-anaknya, dan anak-anak meluap wadah. Tetapi dengan width
properti itu, wadah itu menghormati ukuran anak-anaknya dan memperluasnya.
Referensi:
Contoh:
item fleksibel menggunakan flex-basis
dan white-space: nowrap
meluap inline-flex
wadah. width
bekerja.
Tampaknya wadah fleksibel diatur untuk inline-flex
tidak mengenali flex-basis
seorang anak saat memberikan saudara kandung white-space: nowrap
(meskipun itu bisa saja item dengan lebar yang tidak ditentukan). Wadah tidak berkembang untuk mengakomodasi barang.
Tetapi ketika width
properti itu digunakan alih-alih flex-basis
, wadah itu menghargai ukuran anak-anaknya dan memperluasnya. Ini bukan masalah di IE11 dan Edge.
Referensi:
Contoh:
flex-basis
(dan flex-grow
) tidak bekerja pada elemen tabel
Referensi:
flex-basis
gagal di Chrome dan Firefox ketika wadah kakek-nenek adalah elemen menyusut-agar-cocok. Set-up berfungsi dengan baik di Edge.
Seperti pada contoh yang disajikan dalam tautan di atas, yang melibatkan position: absolute
, penggunaan float
dan inline-block
, juga akan membuat output cacat yang sama ( demo jsfiddle ).
Bug yang memengaruhi IE 10 dan 11: