마지막 플렉스 항목을 컨테이너 끝에 배치


105

이 질문은 flexbox를 포함하여 전체 css3를 지원하는 브라우저에 관한 것입니다.

일부 항목이 들어있는 플렉스 컨테이너가 있습니다. 그것들은 모두 flex-start로 정당화되었지만 마지막 .end 항목은 flex-end로 정당화 되기를 원합니다 . HTML을 수정하지 않고 절대 위치에 의존하지 않고이 작업을 수행 할 수있는 좋은 방법이 있습니까?

.container {
  display: flex;
  flex-direction: column;
  outline: 1px solid green;
  min-height: 400px;
  width: 100px;
  justify-content: flex-start;
}
p {
  height: 50px;
  background-color: blue;
  margin: 5px;
}
<div class="container">
  <p></p>
  <p></p>
  <p></p>
  <p class="end"></p>
</div>


2
예. 참조 auto여기에 마진 삽화 : stackoverflow.com/a/33856609/3597276
마이클 벤자민

답변:


220

유연한 박스 레이아웃 모듈-8.1. 자동 여백에 맞추기

플렉스 항목의 자동 여백은 블록 흐름의 자동 여백과 매우 유사한 효과가 있습니다.

  • 가변베이스 및 가변 길이를 계산하는 동안 자동 여백은 0으로 처리됩니다.

  • 를 통해 정렬하기 이전 justify-content하고 align-self, 양의 여유 공간은 해당 차원에서 자동 마진에 배포됩니다.

따라서 margin-top: auto다른 요소와 마지막 요소 사이에 공간을 분배하는 데 사용할 수 있습니다 .

그러면 마지막 요소가 맨 아래에 배치됩니다.

p:last-of-type {
  margin-top: auto;
}

수직 예


마찬가지로, 당신은 또한 사용할 수 있습니다 margin-left: auto또는 margin-right: auto수평으로 같은 정렬.

p:last-of-type {
  margin-left: auto;
}

수평 예


1
아 완벽 해, 내가 그걸 놓쳤다 니 믿을 수 없어! 나는 이후 특히 당황 완전히 에 대해 알고 사용 마진 - 자동차 - 투 - 센터 - 수직으로 속여 모든 시간을 사용
조지 마우어

1
@ j08691 작동 이유에 대한 공식적인 설명은 없지만 margin: 0 auto수평 센터링에 사용할 수있는 방법과 비슷합니다 . Flexbox 항목은 여백을 존중하므로 margin: auto기본적으로 항목이 가능한 한 형제 사이에 많은 공간을두고 배치 될 것이라고 생각 합니다. 참조 : w3.org/TR/css-flexbox-1/#auto-margins
Josh Crozier

2
@ jo8691 내가 착각하지 않으면 margin: auto플렉스 항목에서 해당 방향으로 가능한 한 많은 공간을 만들도록 지시합니다.
George Mauer 2015

1
사양에 따르면 Prior to alignment via justify-content and align-self, any positive free space is distributed to auto margins in that dimension.
George Mauer

이 동작을 설명하는 참조를 보는 것이 좋을 것이므로 flexbox에 대해 자세히 알아 보려고합니다. 특히 그것은 또한 의도 된 것이고 기이하거나 부작용이 아니라는 것입니다.
j08691 2015

61

이 flexbox 원칙은 수평으로도 작동합니다.

flex base와 flexible length를 계산하는 동안 자동 여백은 0으로 처리됩니다.
justify-content 및 align-self를 통해 정렬하기 전에 양의 여유 공간이 해당 차원의 자동 여백에 배포됩니다.

마지막 항목에 대한 자동 왼쪽 여백을 설정하면 작업이 수행됩니다.

.last-item {
  margin-left: auto;
}

코드 예 :

.container {
  display: flex;
  width: 400px;
  outline: 1px solid black;
}

p {
  height: 50px;
  width: 50px;
  margin: 5px;
  background-color: blue;
}

.last-item {
  margin-left: auto;
}
<div class="container">
  <p></p>
  <p></p>
  <p></p>
  <p class="last-item"></p>
</div>

Codepen 스 니펫

이것은 데스크탑 바닥 글에 매우 유용 할 수 있습니다.

Envato 가 회사 로고로 여기에서 한 것처럼 .

Codepen 스 니펫


3
이것이 실제로 작동하는 이유는 확실하지 않지만 프로젝트에 도움이되었습니다.
Louis345 2014 년

4
모든 항목이 중앙에 있고 마지막 항목이 오른쪽에 있어야하는 경우 어떻게해야합니까?
Illorian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.