flexbox와 요소를 아래쪽에 정렬


374

나는 div아이들과 함께 있습니다.

<div class="content">
  <h1>heading 1</h1>
  <h2>heading 2</h2>
  <p>Some more or less text</p>
  <a href="/" class="button">Click me</a>
</div>

다음 레이아웃을 원합니다.

 -------------------
|heading 1          |
|heading 2          | 
|paragraph text     |
|can have many      |
|rows               |
|                   |
|                   |
|                   | 
|link-button        |
 -------------------

얼마나 많은 텍스트가 있는지에 관계없이 흐름에서 벗어나지 않고 항상 맨 아래 p에 고정하고 싶습니다 .button. Flexbox로 달성 할 수 있다고 들었지만 작동하지 않습니다.


7
그냥 줘 postition: absolute; bottom 0;?
Jonathan

12
@Jonathan 래퍼의 높이는 고정되어 있지 않습니다. 흐름을
꺼내면

2
@ supersize old Q이지만 래퍼를 줄 수는 position:relative있지만 기본적으로 상대적이라고 생각하기 때문에 구피입니다. 그러나 자녀의 절대 위치를 포함하기 위해 SET을 설정했습니다. 그런 다음 bottom:0플러시에 맞습니다.
Jacksonkr

Jacksonkr이 맞습니다. 이것이 최고의 솔루션입니다. 다른 것들이 너무 길거나 복잡하거나 바르게 작동하지 않습니다
Barbz_YHOOL

2
@Jacksonkr div의 기본 위치는 static아닙니다 relative.
슈퍼 사이즈

답변:


641

자동 여백을 사용할 수 있습니다

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

따라서 다음 중 하나 (또는 ​​둘 다)를 사용할 수 있습니다.

p { margin-bottom: auto; } /* Push following elements to the bottom */
a { margin-top: auto; } /* Push it and following elements to the bottom */

또는 a사용 가능한 공간을 채우기 위해 자라기 전에 요소를 만들 수 있습니다.

p { flex-grow: 1; } /* Grow to fill available space */


2
나에게 이것은 Chrome에서 작동하지만 iOS 10.2의 Safari에서는 작동하지 않습니다. 누구든지 확인할 수 있습니까?
Matthew

@Oriol이 접근 방식이 마음에 들지만 접히는 여백을 잃어버린 부작용은 아닙니다. 어떻게해야합니까?
Neil

11
flex-grow는 나를 위해 일했습니다. 여기에 내가했던 방법html { height: 100%; } body { min-height: 100%; display: flex; flex-direction: column; } #site-content { flex: 1; }
protoEvangelion

2
또한 참고 사항으로, height: 100%무언가를 맨 아래로 밀어 넣으려는 부모 요소를 기억하십시오.margin-top: auto;
skolind

1
"긍정적 인 여유 공간은 해당 차원의 자동 여백에 분배됩니다." 이처럼 우아한 것이 거의 없습니다.이 솔루션은 귀하의 답변에 따라 2 줄의 코드였습니다. 감사합니다 :)
danjah

146

display : flex를 사용하여 요소를 맨 아래에 배치 할 수 있지만이 경우 flex를 사용하고 싶지는 않습니다. 모든 요소에 영향을 미치기 때문입니다.

flex를 사용하여 요소를 맨 아래에 배치하려면 다음을 시도하십시오.

.container {
  display: flex;
}

.button {
  align-self: flex-end;
}

가장 좋은 방법은 위치를 설정하는 것입니다 : 버튼에 절대적으로 설정하고으로 설정 bottom: 0하거나 버튼을 컨테이너 외부에 놓고 음수 transform: translateY(-100%)를 사용 하여 다음과 같이 컨테이너에 가져올 수 있습니다.

.content {
    height: 400px;
    background: #000;
    color: #fff;
}
.button {
    transform: translateY(-100%);
    display: inline-block;
}

JSFiddle을 확인하십시오


6
하단에 원하는 경우 플렉스 방향을 열로 설정하십시오.
Viliami

3
키를 제공 할 수 없으면 어떻게합니까?
Mark

나를 위해 일한 것은 단지```였습니다. 내용 {디스플레이 : 플렉스; 플렉스 방향 : 열; 정당화 내용 : flex-end; } <div class = "content"> <a class="bottom"> 뭔가 </a> </ div>```
gsalgadotoledo

84

와 함께 해결책이 효과 align-self: flex-end;가 없었지만 flex를 사용하려는 경우에 대비 한 해결책입니다 .

결과

 -------------------
|heading 1          |
|heading 2          | 
|paragraph text     |
|                   |
|                   |
|                   | 
|link button        |
 -------------------

암호

참고 : "코드 스 니펫을 실행할 때"아래쪽으로 링크를 보려면 아래로 스크롤해야합니다.

.content {
  display: flex;
  justify-content: space-between;
  flex-direction: column;
  height: 300px;
}

.content .upper {
  justify-content: normal;
}

/* Just to show container boundaries */
.content .upper, .content .bottom, .content .upper > * {
  border: 1px solid #ccc;
}
<div class="content">
  <div class="upper">
	  <h1>heading 1</h1>
	  <h2>heading 2</h2>
	  <p>paragraph text</p>
  </div>

  <div class="bottom">
	  <a href="/" class="button">link button</a>
  </div>
</div>


1
content는 justify-content와 함께 2 개의 다른 컨테이너를 보유하는 열 컨테이너입니다. Flexbox에 컨테이너를 가능한 한 멀리 밀어 넣도록 지시합니다 (이 경우 컨텐츠 컨테이너의 높이에 의해 제한됨)
ConquerorsHaki

그것은 실제 결과가 아니며, 각 항목 사이에 공백이있을 것입니다 (따라서 이름)
Barbz_YHOOL

1
@Barbz_YHOOL 아니오, 컨테이너 높이를 높이면 작동합니다 (업데이트 된 예 참조)
Timo

1
많이 검색 한 후에는 완벽합니다! 감사합니다.
Rudy

1
약간의 수정
만으로도이

2

flexbox는 확실하지 않지만 position 속성을 사용하면됩니다.

세트 부모 div position: relative 수 있습니다 및 하위 요소 <p>또는 <h1>등 세트 position: absolutebottom: 0.

예:

index.html

<div class="parent">
  <p>Child</p>
</div>

style.css

.parent {
  background: gray;
  width: 10%;
  height: 100px;    
  position: relative;
}
p {
  position: absolute;
  bottom: 0;
}

코드 펜은 여기


1
position:fixed그 안에있는 컨테이너와 관련이 없기 때문에 작동하지 않을 것입니다. 아마도 당신은 의미 position:absolute했습니까?
Sensoray

1
이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
rollstuhlfahrer

1
답변이 업데이트되었습니다.
Sanjay Shr

0

여기에 이미지 설명을 입력하십시오

<section style="display:flex; flex-wrap:wrap;">
    <div style="display:flex; flex-direction:column; flex:1;">
        <button style="margin-top: auto;"/>
    </div>
    <div style="display:flex; flex-direction:column; flex:1;">
        <button style="margin-top: auto;"/>
    </div>
</section>

데모 : https://codepen.io/ferittuncer/pen/YzygpWX


0

디스플레이를 flex로 설정 하면 flex속성을 사용하여 확장 할 수있는 콘텐츠와 만들 수없는 콘텐츠를 표시 할 수 있습니다.

플렉스 속성

div.content {
 height: 300px;
 display: flex;
 flex-direction: column;
}

div.up {
  flex: 1;
}

div.down {
  flex: none;
}
<div class="content">
  <div class="up">
    <h1>heading 1</h1>
    <h2>heading 2</h2>
    <p>Some more or less text</p>
  </div>

  <div class="down">
    <a href="/" class="button">Click me</a>
  </div>
</div>


-1

이 시도

.content {
      display: flex;
      flex-direction: column;
      height: 250px;
      width: 200px;
      border: solid;
      word-wrap: break-word;
    }

   .content h1 , .content h2 {
     margin-bottom: 0px;
    }

   .content p {
     flex: 1;
    }
   <div class="content">
  <h1>heading 1</h1>
  <h2>heading 2</h2>
  <p>Some more or less text</p>
  <a href="/" class="button">Click me</a>
</div>


-1

방금 이것에 대한 해결책을 찾았습니다.

주어진 답변에 만족하지 않는 사람들은 flexbox 로이 접근법을 시도 할 수 있습니다

CSS

    .myFlexContainer {
        display: flex;
        width: 100%;
    }

    .myFlexChild {
        width: 100%;
        display: flex;

        /* 
         * set this property if this is set to column by other css class 
         *  that is used by your target element 
         */
        flex-direction: row;

        /* 
         * necessary for our goal 
         */
        flex-wrap: wrap;
        height: 500px;
    }

    /* the element you want to put at the bottom */
    .myTargetElement {
        /*
         * will not work unless flex-wrap is set to wrap and 
         * flex-direction is set to row
         */
        align-self: flex-end;
    }

HTML

    <div class="myFlexContainer">
        <div class="myFlexChild">
            <p>this is just sample</p>
            <a class="myTargetElement" href="#">set this to bottom</a>
        </div>
    </div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.