Cara mengatur kolom lebar tetap dengan CSS flexbox

149

CodePen: http://codepen.io/anon/pen/RPNpaP .

Saya ingin kotak merah lebarnya hanya 25 em ketika berada di tampilan berdampingan - Saya mencoba untuk mencapai ini dengan menetapkan CSS di dalam kueri media ini:

@media all and (min-width: 811px) {...}

untuk:

.flexbox .red {
  width: 25em;
}

Tetapi ketika saya melakukan itu, ini terjadi:

http://i.imgur.com/niFBrwt.png

Ada yang tahu apa yang saya lakukan salah?

Ilmu
sumber

Jawaban:

331

Anda harus menggunakan properti flexatau flex-basisbukan width. Baca lebih lanjut tentang MDN .

.flexbox .red {
  flex: 0 0 25em;
}

The flexproperti CSS adalah properti singkatan menentukan kemampuan item fleksibel untuk mengubah dimensi untuk mengisi ruang yang tersedia. Itu mengandung:

flex-grow: 0;     /* do not grow   - initial value: 0 */
flex-shrink: 0;   /* do not shrink - initial value: 1 */
flex-basis: 25em; /* width/height  - initial value: auto */

Demo sederhana menunjukkan cara mengatur kolom pertama ke 50pxlebar tetap.


Lihat codepen yang diperbarui berdasarkan pada kode Anda.

Stiker
sumber
21
Tidak menyadari bahwa saya harus mengganti flex-shrink, terima kasih, jawaban yang bagus.
Paul Redmond
Tidak dapat memperoleh basis-fleksibel: otomatis berfungsi hingga saya menyadari kisi pustaka komponen saya (Semantic UI React) memiliki aturan css yang nakal mengatur lebar default kolom 😅 medium.freecodecamp.org/...
Roman Scher
1

Jika ada yang ingin memiliki flexbox responsif dengan persentase (%), itu jauh lebih mudah untuk permintaan media.

flex-basis: 25%;

Ini akan jauh lebih lancar saat pengujian.

// VARIABLES
$screen-xs:                                         480px;
$screen-sm:                                         768px;
$screen-md:                                         992px;
$screen-lg:                                         1200px;
$screen-xl:                                         1400px;
$screen-xxl:                                        1600px;

// QUERIES
@media screen (max-width: $screen-lg) {
    flex-basis: 25%;
}

@media screen (max-width: $screen-md) {
    flex-basis: 33.33%;
}
chris_r
sumber