Làm cho một mục linh hoạt nổi ngay


104

tôi có một

<div class="parent">
    <div class="child" style="float:right"> Ignore parent? </div>
    <div> another child </div>
</div>

Cha mẹ có

.parent {
    display: flex;
}

Đối với đứa con đầu tiên của tôi, tôi muốn chỉ đơn giản là thả nổi món đồ đó sang bên phải.

Và các div khác của tôi tuân theo quy tắc flex do cha mẹ đặt ra.

Điều này có khả thi không?

Nếu không, làm thế nào để làm một float: rightdưới flex?

Câu trả lời:


196

Bạn không thể sử dụng floatbên trong vùng chứa flex và lý do là thuộc tính float không áp dụng cho các hộp cấp flex như bạn có thể thấy ở đây Fiddle.

Vì vậy, nếu bạn muốn đặt childphần tử ở bên phải của parentphần tử, bạn có thể sử dụng margin-left: autonhưng bây giờ childphần tử cũng sẽ đẩy phần tử khác divsang bên phải như bạn có thể thấy ở đây Fiddle.

Những gì bạn có thể làm bây giờ là thay đổi thứ tự của các phần tử và đặt order: 2trên childphần tử để nó không ảnh hưởng đến div thứ hai

.parent {
  display: flex;
}
.child {
  margin-left: auto;
  order: 2;
}
<div class="parent">
  <div class="child">Ignore parent?</div>
  <div>another child</div>
</div>


Cảm ơn tôi có thể xem xét giải pháp đầu tiên. Tôi không muốn sử dụng màn hình hiển thị: tuyệt đối vì những đứa trẻ khác của tôi không nên được che dưới đứa trẻ đầu tiên.
Zhen Liu

4
" phao không xâm nhập vào vùng chứa linh hoạt ". Điều đó đúng, nhưng nó không phải là lý do. Lý do là thuộc floattính không áp dụng cho các hộp cấp linh hoạt.
Oriol

Điều này hoạt động, cảm ơn bạn! Tại sao justify-self: end;(hoặc điều gì đó tương tự) không hiệu quả với đứa trẻ? Đây có vẻ là một giải pháp không quá linh hoạt cho vấn đề flexbox.
Brady Dowling

1
@BradyDowling Tôi biết đây là một câu trả lời muộn, nhưng justify-self end yêu cầu màn hình phải được đặt thành lưới. Flexbox sẽ bỏ qua justify-self: end. Xem tại đây: developer.mozilla.org/en-US/docs/Web/CSS/justify-self
Paul,

<div> con khác </div> <div class = "child"> Bỏ qua cha mẹ? </div> Bạn có thể hoán đổi hai div và không cần thứ tự 2 nó cũng hoạt động
yeeen

23

Bạn không cần phao. Trên thực tế, chúng vô dụng vì float bị bỏ qua trong flexbox .

Bạn cũng không cần định vị CSS.

Có một số phương pháp flex có sẵn. autolợi nhuận đã được đề cập trong một câu trả lời khác .

Đây là hai tùy chọn khác:

  • Sử dụng justify-content: space-betweenordertài sản.
  • Sử dụng justify-content: space-betweenvà đảo ngược thứ tự của các div.

.parent {
    display: flex;
    justify-content: space-between;
}

.parent:first-of-type > div:last-child { order: -1; }

p { background-color: #ddd;}
<p>Method 1: Use <code>justify-content: space-between</code> and <code>order-1</code></p>

<div class="parent">
    <div class="child" style="float:right"> Ignore parent? </div>
    <div>another child </div>
</div>

<hr>

<p>Method 2: Use <code>justify-content: space-between</code> and reverse the order of 
             divs in the mark-up</p>

<div class="parent">
    <div>another child </div>
    <div class="child" style="float:right"> Ignore parent? </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.