2015-04-07 25 views
25

Tôi muốn sử dụng flexbox có một số mục có cùng chiều rộng. Tôi đã nhận thấy rằng flexbox phân phối không gian xung quanh đồng đều, chứ không phải là không gian riêng của nó.Làm thế nào để làm cho các mặt hàng flexbox có cùng kích thước?

Ví dụ:

.header { 
 
    display: flex; 
 
} 
 

 
.item { 
 
    flex-grow: 1; 
 
    text-align: center; 
 
    border: 1px solid black; 
 
}
<div class="header"> 
 
    <div class="item">asdfasdfasdfasdfasdfasdf</div> 
 
    <div class="item">z</div> 
 
</div>

Mục đầu tiên là lớn hơn rất nhiều so với thứ hai. Nếu tôi có 3 mục, 4 mục hoặc n mục, tôi muốn tất cả chúng xuất hiện trên cùng một dòng với số lượng không gian bằng nhau cho mỗi mục.

Bất kỳ ý tưởng nào?

http://codepen.io/anon/pen/gbJBqM

Trả lời

51

Đặt họ để họ flex-basis0 (vì vậy tất cả các yếu tố có điểm khởi đầu giống nhau), và cho phép họ phát triển:

flex: 1 1 0

18

Bạn có thể thêm flex-basis: 100% để đạt được điều này .

Updated Example

.header { 
    display: flex; 
} 

.item { 
    flex-basis: 100% 
    text-align: center; 
    border: 1px solid black; 
} 

Đối với những gì nó có giá trị, bạn cũng có thể sử dụng flex: 1 cho kết quả tương tự là tốt.

Các viết tắt của flex: 1 cũng giống như flex: 1 1 0, tương đương với:

.item { 
    flex-grow: 1; 
    flex-shrink: 1; 
    flex-basis: 0; 
    text-align: center; 
    border: 1px solid black; 
} 
+0

Điều này không đúng. Giá trị flex mặc định là 'flex: 0 1 auto'. Có nghĩa là thiết lập 'flex: 1' sẽ dẫn đến' flex: 1 1 auto'. Điều này sẽ không hoạt động. Câu trả lời đúng là 'flex: 1 1 0' như đã nêu ở trên bởi Adam –

+3

@ r.sendecky Không, bạn là người không chính xác. Như tôi đã nói trong câu trả lời của tôi, viết tắt của 'flex: 1' dẫn đến' flex: 1 1 0' ** not ** 'flex: 1 1 auto' như bạn đang khai báo. Hãy nhìn vào các đặc điểm kỹ thuật W3 chính thức dưới [ 'flex tốc ký' phần] (https://www.w3.org/TR/css-flexbox-1/#flex-property): khi 'flex-basis' là" bỏ qua từ viết tắt flex, giá trị được chỉ định của nó là '0'", không phải 'tự động'. Cảm ơn cho downvote ngẫu nhiên. –

+1

@ r.sendecky - Ngoài ra, hãy nhìn vào [ví dụ này] (https://jsfiddle.net/o25wto2d/) Tôi tạo ra để hình dung các biến thể. –

2

Thêm width: 0 giúp tôi giải quyết vấn đề

.item { 
     flex-grow: 1 1 0; 
     width: 0; 
    } 

đây là liên kết mà giúp tôi giải quyết vấn đề của tôi: Always equal flexbox columns

+0

Điều này có vẻ là cần thiết nếu nội dung của '.item' làm cho nó phát triển rộng hơn' .item' sẽ tự nhiên. – Bungle

Các vấn đề liên quan