Cách xác minh một mục flexbox duy nhất (ghi đè nội dung justify)


283

Bạn có thể ghi đè lên align-itemsvới align-selfcho một mục flex. Tôi đang tìm cách ghi đè lên justify-contentmột mục flex.

Nếu bạn có một hộp chứa flexbox justify-content:flex-end, nhưng bạn muốn mục đầu tiên là justify-content: flex-start, làm thế nào có thể được thực hiện?

Điều này đã được trả lời tốt nhất bởi bài đăng này: https://stackoverflow.com/a/33856609/269394


2
Sử dụng autolề. Xem hộp số 26 tại đây: stackoverflow.com/a/33856609/3597276
Michael Benjamin

Cảm ơn bạn đã liên kết đến câu trả lời hữu ích nhất!
Brady Dowling

Câu trả lời:


547

Dường như không có justify-self, nhưng bạn có thể đạt được cài đặt kết quả tương tự phù hợp marginvới auto. Ví dụ. đối với flex-direction: row(mặc định), bạn nên đặt margin-right: autođể sắp xếp con sang trái.

.container {
  height: 100px;
  border: solid 10px skyblue;
  
  display: flex;
  justify-content: flex-end;
}
.block {
  width: 50px;
  background: tomato;
}
.justify-start {
  margin-right: auto;
}
<div class="container">
  <div class="block justify-start"></div>
  <div class="block"></div>
</div>

Behavior Hành vi này được xác định bởi thông số Flexbox .


51
Kỹ thuật này là tuyệt vời và nó cũng hoạt động theo hướng dọc. Chẳng hạn, bạn muốn phần tử cuối cùng bên trong một thùng chứa chiều cao cố định dính vào đáy. Bạn có thể sử dụng `` `.container {flex-direction: cột; justify-content: flex-start} .last-item {margin-top: auto} `` `
Christian Schlensker

6
@krulik Hành vi này được xác định bởi thông số Flexbox, xem w3.org/TR/2012/CR-css3-flexbox-20120918/#auto-margins
Pavlo

6
Sau một số điều tra thêm, justify-selfcó thể không có gì để làm flexboxnhưng thay vào đó được sử dụng css gridsnhưng tôi không chắc chắn. Tôi dường như không thể làm cho nó hoạt động trong Chrome với flexbox.
Jake Wilson

8
Điều gì sẽ xảy ra nếu tôi muốn một mục ở bên trái và một mục khác ở trung tâm?
Fahmi

3
"Trong bố trí flexbox, thuộc tính này bị bỏ qua" - được lấy từ các tài liệu mozilla trên justify-self
Finlay Percy

19

AFAIK không có thuộc tính nào trong thông số kỹ thuật, nhưng đây là một mẹo tôi đã sử dụng: đặt phần tử container (phần tử có display:flex) thành justify-content:space-around Sau đó thêm một phần tử phụ giữa mục thứ nhất và mục thứ hai và đặt thành flex-grow:10(hoặc một số giá trị khác hoạt động với thiết lập của bạn)

Chỉnh sửa: nếu các mục được căn chỉnh chặt chẽ, bạn cũng nên thêm flex-shrink: 10;vào phần tử phụ, do đó bố cục sẽ được phản hồi đúng trên các thiết bị nhỏ hơn.


1
Nó hoạt động mà không chỉ định chiều rộng (ít nhất là trong tình huống của tôi)
eeglbalazs 28/03/2015

Hãy thửmin-width: 0
The Dembinski

13

Nếu bạn không thực sự bị hạn chế trong việc giữ tất cả các phần tử này dưới dạng các nút anh chị em, bạn có thể bọc các phần tử đi cùng nhau trong một hộp flex mặc định khác và có thùng chứa cả hai sử dụng khoảng trắng giữa.

.space-between {
  border: 1px solid red;
  display: flex;
  justify-content: space-between;
}
.default-flex {
  border: 1px solid blue;
  display: flex;
}
.child {
  width: 100px;
  height: 100px;
  border: 1px solid;
}
<div class="space-between">
  <div class="child">1</div>
  <div class="default-flex">
    <div class="child">2</div>
    <div class="child">3</div>
    <div class="child">4</div>
    <div class="child">5</div>
  </div>
</div>

Hoặc nếu bạn đang làm điều tương tự với flex-start và flex-end đảo ngược, bạn chỉ cần trao đổi thứ tự của thùng chứa flex mặc định và con đơn độc.


5

Có vẻ như justify-selfsẽ đến với trình duyệt sớm . Đã có một bài viết về nó trên MDN . Tại thời điểm viết bài này, hỗ trợ trình duyệt còn kém.

Về giải pháp lề: Tôi có lưới Flexbox với các khoảng trống. Không có flex-gaptài sản (chưa?) Với Flexbox. Vì vậy, đối với máng xối, tôi đang sử dụng paddings và lề, vì vậy margin: autocần ghi đè lên các lề khác ...


7
Đáng buồn thay,In flexbox layouts, this property is ignored
Sphinxxx

1
@Sphinxxx Có, nhưng justify-self không hoạt động trong một display: gridcontainer. Đó là gần đây như flexbox, vì vậy cho phép định vị phong phú như align-items, align-selfcũng như một số tính năng bổ sung như một trong những chúng ta cần ở đây, justify-self. Những gì tôi khuyên là nên sử dụng flexbox bất cứ khi nào đủ, nhưng nếu nó thiếu thứ gì đó, rất có thể lưới sẽ có thứ bạn đang tìm kiếm. (ví dụ: dễ dàng sắp xếp một đứa trẻ vào trung tâm x và trung tâm-y và một đứa trẻ khác với trung tâm x bên phải - flexbox có margin-left: autothể dễ dàng trái + phải, nhưng không phải trung tâm + phải) Ví dụ: stackoverflow.com/a/57128453 / 2441655
Venryx

1

Đối với những tình huống mà chiều rộng của các mục mà bạn muốn làm flex-endnổi tiếng, bạn có thể đặt flex của họ để "0 0 ## px" và thiết lập các mục mà bạn muốn flex-startvớiflex:1

Điều này sẽ khiến flex-startvật phẩm giả điền vào thùng chứa, chỉ cần định dạng nó text-align:lefthoặc bất cứ thứ gì.


0

Tôi đã giải quyết một trường hợp tương tự bằng cách đặt kiểu của mục bên trong thành margin: 0 auto.
Tình huống: Menu của tôi thường chứa ba nút, trong trường hợp chúng cần phải có justify-content: space-between. Nhưng khi chỉ có một nút, giờ đây nó sẽ được căn giữa thay vì sang trái.

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.