Ngăn chiều cao vật phẩm uốn cong mở rộng để khớp với các vật phẩm linh hoạt khác


81

Tôi có hai phần tử bên trong một vùng chứa, chúng được đặt cạnh nhau bằng cách sử dụng hộp flex. Trên phần tử thứ hai ( .flexbox-2), tôi đang đặt chiều cao của nó trong CSS. Tuy nhiên, phần tử đầu tiên ( .flexbox-1) sẽ khớp với chiều cao của .flexbox-2. Làm thế nào để tôi dừng .flexbox-1việc khớp với chiều cao .flexbox-2và thay vào đó chỉ giữ lại chiều cao tự nhiên của nó?

Đây là những gì tôi có cho đến nay (cũng có sẵn dưới dạng jsFiddle )

.container {
  display: -webkit-flex;
  -webkit-flex-direction: row;
}
.flexbox-1 {
  -webkit-flex: 1;
  border: solid 3px red;
}
.flexbox-2 {
  -webkit-flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>


Câu trả lời:


56

Đây là một giải pháp cũ. Câu trả lời của tôi được thay thế bằng câu trả lời mớialign-self này của Aaron . Đó là một giải pháp tốt hơn mà không dựa vào CSS.

Miễn là thùng chứa flex không có chiều cao , bạn có thể đặt height: 0%trên mục flex đầu tiên. Bởi vì nó không có chiều cao để thừa kế từ cha mẹ của nó, bất kỳ phần trăm chiều cao nào cũng sẽ khiến nó bị sụp đổ. Sau đó nó sẽ phát triển với nội dung của nó.

Thí dụ

Trong ví dụ này, tôi đã loại bỏ -webkittiền tố. Nó chỉ thực sự cần thiết cho Safari và tiền tố có thể được thêm vào phía trên phiên bản không có tiền tố. Tôi cũng đã loại bỏ flex-direction: rowvì nó là giá trị mặc định.


144

Tôi biết đây là một câu hỏi cũ nhưng một giải pháp tốt hơn là đặt mục flex để căn chỉnh ở trên cùng bằng cách sử dụng flex-start.

/* Default Styles */
.container {
  display: flex;
}
.flexbox-2 {
  flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
 .flexbox-1 {
  flex: 1;  
  align-self: flex-start;  
  border: solid 3px red;
}
<div class="container">
  <div class="flexbox-1">"align-self: flex-start;"</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>


1
Cảm ơn @MrGood Câu trả lời được chấp nhận đã hơn 3 năm và vào thời điểm đó là một cách tốt để đạt được kết quả mong muốn.
Aaron

1
Câu trả lời tuyệt vời!
Alexander Wigmore

5
Lưu ý rằng bạn cũng có thể thực hiện 'align-items: flex-start' trên phần tử cha để ngăn tất cả trẻ em phát triển - cần thiết trong trường hợp của tôi.
Daniel Sokolowski

5
align-items: center, baseline, flex-start, flex-endcũng đang hoạt động
ViES

2
Điều này là cần thiết vì giá trị mặc định cho align-itemsstretch.
DylanReile

1

Bạn có thể dễ dàng khắc phục điều đó bằng cách thêm vào các mục căn chỉnh chính: flex-start;

Đó là tất cả


1
Chào mừng bạn đến với Stack Overflow. Khi thêm câu trả lời cho một câu hỏi năm tuổi với các câu trả lời hiện có, điều quan trọng là phải giải thích khía cạnh mới của câu hỏi mà bạn đang giải quyết và cách trả lời của bạn hoạt động và tại sao nên sử dụng câu trả lời đó. Định dạng mã chính xác cũng thực sự hữu ích vì ngay bây giờ bạn chỉ có văn bản in đậm trong một câu mà không cung cấp ngữ cảnh về quy tắc css nào để thêm nó vào.
Jason Aller

0

Đặt heighttrẻ em thành max-contentsẽ ngăn chúng co lại.

.container {
  display: -webkit-flex;
  -webkit-flex-direction: row;
}
.flexbox-1 {
  -webkit-flex: 1;
  border: solid 3px red;
  height: max-content;
}
.flexbox-2 {
  -webkit-flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>

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.