단일 flexbox 항목을 정당화하는 방법 (justify-content 재정의)


283

당신은 대체 할 수 있습니다 align-itemsalign-self 플렉스 항목. justify-content플렉스 항목 을 재정의하는 방법을 찾고 있습니다 .

으로 flexbox 컨테이너를 가지고 justify-content:flex-end있지만 첫 번째 항목을 원한다면 justify-content: flex-start어떻게 할 수 있습니까?

이것은이 게시물에 의해 가장 잘 대답되었습니다 : https : //.com/a/33856609/269396


2
auto여백을 사용하십시오 . 상자 # 26 참조 : stackoverflow.com/a/33856609/3597276
Michael Benjamin

가장 유용한 답변에 연결해 주셔서 감사합니다!
Brady Dowling

답변:


549

이 될 것 같지 않습니다 justify-self,하지만 당신은 유사한 결과 설정 적절한 달성 할 수 margin로를 auto¹. 예 : 대한 flex-direction: row(기본) 당신은 설정해야합니다 margin-right: auto왼쪽에 아이를 정렬 할 수 있습니다.

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

¹이 동작은 Flexbox 사양에 의해 정의됩니다 .


51
이 기술은 우수하며 세로 방향으로도 작동합니다. 예를 들어, 고정 높이 컨테이너 내부의 마지막 요소를 바닥에 고정 시키려고합니다. ```.container {flex-direction : column;을 사용할 수 있습니다. justify-content : flex-start} .last-item {margin-top : auto}```
Christian Schlensker

6
@krulik이 동작은 Flexbox 사양에 의해 정의됩니다. w3.org/TR/2012/CR-css3-flexbox-20120918/#auto-margins
Pavlo

7
더 많은 조사를 한 후에 justify-self는 관련이 flexbox없지만 오히려 함께 사용 css grids되지만 확실하지 않습니다. flexbox가있는 Chrome에서 작동하지 않는 것 같습니다.
Jake Wilson

8
한 항목을 왼쪽에, 다른 항목을 중앙에 두려면 어떻게해야합니까?
Fahmi

3
"인 flexbox 레이아웃,이 속성은 무시됩니다"정당화-자체에 모질라 문서로부터도 21의
핀리 퍼시

19

AFAIK에는 사양에 대한 속성이 없지만 여기에 내가 사용한 트릭이 있습니다. 컨테이너 요소 ( display:flex)를 설정 한 justify-content:space-around 다음 첫 번째 항목과 두 번째 항목 사이에 추가 요소를 추가하고 flex-grow:10(또는 일부 설정과 함께 작동하는 다른 값)

편집 : 항목이 단단히 정렬 flex-shrink: 10;되면 여분의 요소에도 추가하는 것이 좋습니다 . 따라서 작은 장치에서는 레이아웃이 올바르게 반응합니다.


1
너비를 지정하지 않고 작동합니다 (적어도 제 상황에서는 그랬습니다)
eeglbalazs

시도min-width: 0
Dembinski

13

실제로 이러한 모든 요소를 ​​형제 노드로 유지하는 데 제한되지 않은 경우 다른 기본 플렉스 상자에 함께있는 요소를 줄 바꿈하여 둘 사이의 컨테이너를 공백으로 사용할 수 있습니다.

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

또는 flex-start와 flex-end를 반대로 사용하여 동일한 작업을 수행하는 경우 default-flex 컨테이너와 외로운 자식의 순서를 바꾸십시오.


5

justify-self곧 브라우저에 오는 것 같습니다 . MDN 에 대한 기사가 이미 있습니다 . 이 글을 쓰는 시점에서 브라우저 지원이 열악합니다.

마진 솔루션과 관련하여 : 간격이있는 Flexbox 그리드가 있습니다. flex-gapFlexbox 에는 속성 이 없습니다 (아직?). 따라서 여백에는 패딩과 여백을 사용하고 있으므로 margin: auto다른 여백을 덮어 써야합니다 ...


7
슬프게도,In flexbox layouts, this property is ignored
Sphinxxx

1
예 @Sphinxxx,하지만 justify-self 하지 A의 작업을 display: grid컨테이너입니다. 너무 같은 다양한 위치를 가능하게 인 flexbox 같은 최근의 align-items, align-self, 것과 같은뿐만 아니라 몇 가지 추가 기능을 우리는 여기에 필요 justify-self. 내가 권장하는 것은 충분할 때마다 flexbox를 사용하는 것이지만 무언가 부족한 경우 그리드가 원하는 것을 가질 수 있습니다. (예 : 한 어린이를 center-x 및 center-y에 쉽게 맞추고 다른 어린이를 right-x center-y margin-left: auto에 쉽게 맞추기-flexbox는 왼쪽 + 오른쪽이지만 가운데 + 오른쪽은 쉽지 않음) 예 : stackoverflow.com/a/57128453 / 2441655
Venryx

1

원하는 항목의 너비가 필요한 경우 flex-end 알고 플렉스를 "0 0 ## px"로 설정하고 원하는 항목을 설정할 수 flex-start있습니다flex:1

그러면 의사 flex-start항목이 컨테이너를 채우고 형식 만 지정하면됩니다 text-align:left.


0

내부 항목의 스타일을로 설정하여 비슷한 경우를 해결했습니다 margin: 0 auto.
상황 : 내 메뉴에는 일반적으로 세 개의 버튼이 있으며이 경우에는 버튼이되어야 justify-content: space-between합니다. 그러나 버튼이 하나만 있으면 왼쪽 대신 중앙에 정렬됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.