Ngăn không cho các mặt hàng uốn cong bị kéo giãn


94

Mẫu vật:

div {
  display: flex;
  height: 200px;
  background: tan;
}
span {
  background: red;
}
<div>
  <span>This is some text.</span>
</div>

Tôi có hai câu hỏi, vui lòng:

  1. Tại sao nó về cơ bản xảy ra với span?
  2. Cách tiếp cận phù hợp để ngăn nó kéo giãn mà không ảnh hưởng đến các vật phẩm uốn dẻo khác trong thùng chứa linh hoạt là gì?

Câu trả lời:


166

Bạn không muốn kéo dài nhịp theo chiều cao?
Bạn có khả năng tác động đến một hoặc nhiều mục linh hoạt để không kéo dài hết chiều cao của thùng chứa.

Để ảnh hưởng đến tất cả các mục linh hoạt của vùng chứa, hãy chọn tùy chọn này:
Bạn phải đặtalign-items: flex-start;thànhdivvà tất cả các mục linh hoạt của vùng chứa này có chiều cao của nội dung của chúng.

div {
  align-items: flex-start;
  background: tan;
  display: flex;
  height: 200px;
}
span {
  background: red;
}
<div>
  <span>This is some text.</span>
</div>

Để chỉ ảnh hưởng đến một mục linh hoạt duy nhất, hãy chọn mục này:
Nếu bạn muốn tháo một mục linh hoạt duy nhất trên thùng chứa, bạn phải đặtalign-self: flex-start;thành mục linh hoạt này. Tất cả các mục linh hoạt khác của thùng chứa không bị ảnh hưởng.

div {
  display: flex;
  height: 200px;
  background: tan;
}
span.only {
  background: red;
  align-self:flex-start;
}
span {
    background:green;
}
<div>
  <span class="only">This is some text.</span>
  <span>This is more text.</span>
</div>

Tại sao điều này xảy ra với span?
Giá trị mặc định của thuộc tính align-itemsstretch. Đây là lý do tại sao spanđiền vào chiều cao của div.

Sự khác biệt giữa baselineflex-start?
Nếu bạn có một số văn bản trên các mục flex, với các kích thước phông chữ khác nhau, bạn có thể sử dụng đường cơ sở của dòng đầu tiên để đặt mục flex theo chiều dọc. Một mục linh hoạt có kích thước phông chữ nhỏ hơn có một số khoảng trống giữa vùng chứa và chính nó ở trên cùng. Với flex-startflex-item sẽ được đặt ở trên cùng của vùng chứa (không có khoảng trống).

div {
  align-items: baseline;
  background: tan;
  display: flex;
  height: 200px;
}
span {
  background: red;
}
span.fontsize {
  font-size:2em;
}
<div>
  <span class="fontsize">This is some text.</span>
  <span>This is more text.</span>
</div>

Bạn có thể tìm thêm thông tin về sự khác biệt giữa baselineflex-starttại đây:
Sự khác biệt giữa flex-start và baseline là gì?


1
Cảm ơn câu trả lời, nhưng nó ảnh hưởng đến tất cả các mục linh hoạt. Và một câu hỏi: sự khác biệt giữa baselineflex-startgiá trị là gì? Kết quả của họ dường như giống nhau. Họ có thể khác nhau trong một tình huống?
Mori

Có vẻ tuyệt vời! Tôi rất biết ơn nếu bạn cũng cho tôi biết sự khác biệt giữa giá trị baselineflex-startgiá trị.
Mori


Mẹo: Nếu bạn muốn căn chỉnh chúng theo chiều ngang, chỉ cần sử dụng align-items: center;:)
Ricardo Zea

#Hack: Bao bọc phần tử của bạn bằng một div mới. Thao tác này sẽ kéo giãn div mẹ mới và giữ nguyên phần tử của bạn.
user1948585
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.