Flex: 1 có nghĩa là gì?


129

Như chúng ta đều biết, flexbất động sản là một cách viết tắt cho flex-grow, flex-shrinkvà các flex-basistài sản. Giá trị mặc định của nó là 0 1 auto, có nghĩa là

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

nhưng tôi nhận thấy, ở nhiều nơi flex: 1được sử dụng. Nó là viết tắt của 1 1 autohoặc 1 0 auto? Tôi không thể hiểu nó có nghĩa là gì và tôi không nhận được gì khi tôi google.


1
trích dẫn w3schools.com "Thuộc tính flex là viết tắt của flex-nuôi, flex-thu nhỏ, và các tính chất flex-cơ sở"
Imran Ali

Câu trả lời:


86

Đây là lời giải thích:

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

flex: <positive-number>
Tương đương với flex: <positive-number> 1 0. Làm cho mục flex trở nên linh hoạt và đặt cơ sở flex bằng 0, dẫn đến mục nhận được tỷ lệ không gian trống trong vùng chứa flex được chỉ định. Nếu tất cả các mặt hàng trong container flex sử dụng mẫu này, kích thước của chúng sẽ tỷ lệ với hệ số flex được chỉ định.

Do đó flex:1tương đương vớiflex: 1 1 0


10
flex: 1; không bằng flex: 1 1 0; xem câu trả lời của tôi dưới đây ro xem tại sao.
DreamTeK

Một lưu ý nhỏ: Tôi nghĩ rằng khi bạn áp dụng giống nhau flexcho tất cả trẻ em, điều quan trọng thực sự là flex: 1 ? 0;"ở đâu?" có thể là bất cứ điều gì, nó sẽ không tạo ra bất kỳ sự khác biệt nào
flen

@DreamTeK Chỉ trong các trình duyệt không tuân thủ tiêu chuẩn như Chrome.
TylerH

1
@TylerH Tuy nhiên, câu trả lời của tôi đúng và được ghi chú trong câu trả lời của tôi what does flex:1 mean?. Op không yêu cầu thông số kỹ thuật, chỉ cho những gì đang xảy ra. Thật không may, Chrome hiện là trình duyệt phổ biến nhất và cần phải hỗ trợ. Bản thân tôi không phải là người hâm mộ hay người dùng Chrome!
DreamTeK

1
@TylerH Đó là lý do tại sao trong câu trả lời của tôi, nó được đề cập đến trạng thái "Cần lưu ý rằng điều này không thành công vì các trình duyệt này đã không tuân thủ đặc điểm kỹ thuật." cùng với một liên kết đến thông số kỹ thuật!
DreamTeK

99

flex: 1 nghĩa là như sau:

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 Không, flex: 1có nghĩa là 1 1 0... nhưng trên IE thì đúng là như vậy1 1 0px
Ason

@LGSon, Bạn có thể bỏ qua đơn vị khỏi giá trị cơ bản 1 1 01 1 0pxtương đương. IE chỉ xảy ra để hỗ trợ một trong những đơn vị.
CookieMonster

@CookieMonster Tôi biết cách hoạt động của Flexbox, tôi chỉ sửa lại nhận xét đầu tiên của bạn, đó là sai.
Ason

@LGSon, flex: 1 có nghĩa là sai 1 1 0px khi 1 1 0px1 1 0tương đương như thế nào?
CookieMonster

2
@CookieMonster Chúng có thể hiển thị giống nhau, nhưng không tương đương, vì khi sử dụng giá trị không đơn vị cho flex-basis, nội dung bị bỏ qua và kích thước phần tử dựa trên flex-grow/ của nó flex-shrink.
Ason

78

HÃY CẨN THẬN

Trong một số trình duyệt:

flex:1; không bằngflex:1 1 0;

flex:1;= flex:1 1 0n;(với n là đơn vị độ dài).

  • flex-grow: Một con số chỉ định mục sẽ tăng bao nhiêu so với phần còn lại của các mục linh hoạt.
  • flex-co Một số chỉ định mục sẽ co lại bao nhiêu so với phần còn lại của các mục linh hoạt
  • flex-base Chiều dài của mục. Giá trị pháp lý: "auto", "inherit" hoặc một số theo sau là "%", "px", "em" hoặc bất kỳ đơn vị độ dài nào khác.

Điểm mấu chốt ở đây là cơ sở linh hoạt yêu cầu một đơn vị độ dài .

Trong Chrome chẳng hạn flex:1flex:1 1 0tạo ra các kết quả khác nhau. Trong hầu hết các trường hợp, nó có vẻ flex:1 1 0;đang hoạt động nhưng hãy kiểm tra xem điều gì thực sự xảy ra:

THÍ DỤ

Cơ sở uốn dẻo bị bỏ qua và chỉ áp dụng uốn phát triển và thu nhỏ uốn.

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

Điều này thoạt nhìn có vẻ ổn tuy nhiên nếu đơn vị được áp dụng của vùng chứa được lồng vào nhau; sẵn sàng cho những chuyện bất ngờ!

Hãy thử ví dụ này trong CHROME

.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>

TƯƠNG THÍCH

Cần lưu ý rằng điều này không thành công vì một số trình duyệt đã không tuân thủ đặc điểm kỹ thuật .

Các trình duyệt sử dụng đặc tả linh hoạt đầy đủ:

  • Firefox - ✓
  • Edge - ✓ (Tôi biết, tôi cũng bị sốc.)
  • Chrome - x
  • Dũng cảm - x
  • Opera - x
  • IE - (lol, nó hoạt động mà không có đơn vị độ dài nhưng không hoạt động với một đơn vị.)

CẬP NHẬT 2019

Các phiên bản mới nhất của Chrome dường như cuối cùng đã khắc phục được vấn đề này nhưng các trình duyệt khác vẫn chưa khắc phục được.

Đã thử nghiệm và hoạt động trong Chrome Ver 74.


1
Khi giá trị là 0, đơn vị không bắt buộc. Đặc điểm kỹ thuật nói flex: 1là giống nhau flex: 1 1 0. Trong ví dụ của bạn nếu bạn loại bỏ .Wraplớp trong .Flex110x,.Flex1, .Flex110, .Wrapquy tắc hoạt động như mong đợi.

Vui lòng cung cấp liên kết, tôi không thể tìm thấy thông số kỹ thuật mà bạn đang nói. Tôi đã không phát minh ra bất cứ điều gì, câu trả lời của tôi được dựa trên đặc điểm kỹ thuật flexbox

@Obsidian Đây là liên kết: w3.org/TR/css-flexbox-1 Nếu bạn chuyển đến phần 'tốc ký', bạn sẽ tìm thấy: "flex: [positive-number] Tương đương với flex: [positive-number] 1 0 ...
MikeB

1
@Toskan Để có khả năng tương thích tối đa, hãy sử dụng cú pháp đầy đủflex:1 1 0n;
DreamTeK

2
Cảm ơn bạn đã chỉ ra sự khác biệt này, tôi không thể tìm ra vấn đề của mình bắt nguồn từ đâu. Có một số tiền thưởng.
Nit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.