내부 <div>를 부모 <div>의 맨 아래로 보내려면 어떻게해야합니까?


184

다른 div 그림 내부의 div와 아래 코드. 부모 div의 텍스트와 이미지가 있기 때문입니다. 그리고 빨간색 div는 부모 div의 마지막 요소입니다.

대체 텍스트

<div style="width: 200px; height: 150px; border: 1px solid black;">
    <div style="width: 100%; height: 50px; border: 1px solid red;">
    </div>
</div>

부모 div의 코드가 논리적으로 자식 div 위에 배치됩니까? 이미지와 텍스트가 동적으로 추가됩니까? 구체적인 질문은 무엇입니까?
justkt

답변:


218

이것은 한 가지 방법입니다

<div style="position: relative; 
            width: 200px; 
            height: 150px; 
            border: 1px solid black;">

    <div style="position: absolute; 
                bottom: 0; 
                width: 100%; 
                height: 50px; 
                border: 1px solid red;">
    </div>
</div>

그러나 내부 div가 절대적으로 배치되므로 외부 div의 다른 내용과 겹치는 부분에 대해 항상 걱정해야합니다 (항상 고정 높이를 설정해야 함).

가능한 경우 내부 div를 외부 div의 마지막 DOM 객체로 만들고 "clear : both"로 설정하는 것이 좋습니다.


1
설명과 IE Hack에 감사드립니다 (잘못되지 않은 경우 ** 폭 : IE Hack의 경우 100 %를 추가했습니다).
uzay95

1
아니요, 너비 : 100 %가 원본에있었습니다. 추가하지 않았습니다.
Jon Smock

1
변경 한 섹션을 굵게 표시하려고했지만 마크 다운은 코드 블록 내부에는 적용되지 않습니다. -P
Jon Smock

:) 실제로 나는 우리가 기호로 IE를 해킹하는 방법을 얻을 수 없었습니다. 그것이 IE 해킹이라고 생각한 이유 :)
uzay95

부모 컨테이너가 떠 다니면이 방법은 작동하지 않습니다.
klewis

84

flexbox 방식.

HTML :

<div class="parent">
  <div>Images, text, buttons oh my!</div>
  <div>Bottom</div>
</div>

CSS :

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

/*  not necessary, just to visualize it */

.parent {
  height: 500px;
  border: 1px solid black;
}


.parent div {
  border: 1px solid red;
}

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

편집하다:

소스 -Flexbox 안내서

Flexbox에 대한 브라우저 지원 -Caniuse


4
세상에, 당신은 내 모든 [프로그래밍] 인생을 어디에 있었습니까! ;) 나는 이것이 매우 간단하고 위치 지정을 방해하지 않는다는 것을 좋아하며 모든 브라우저에서 작동하는 것 같습니다 : caniuse.com/#feat=flexbox . 이것이 현대적인 프로그래밍에 대한 해결책이자 대답입니다.
Sablefoste

1
Flexbox는 일반적으로 요즘 "쉬운 방법"이며 훌륭한 브라우저 지원 및 설명서를 제공합니다. 답변에 caniuse 링크 추가
Franklin Tarter

80

바깥 쪽 div position="relative"와 안쪽 div를 position="absolute"만들고로 설정하십시오 bottom="0".


8
그리고 width=100%역시.
케빈

6
예, 이것은 작동하지만 절대 위치 지정은 "자연 레이아웃"을 손상시킵니다. 내부 div의 높이는 부모의 높이로 포함되지 않으며 외부 div가 좁아지면 외부 div의 다른 항목과 겹칠 수 있습니다.
Ayush Gupta

15

요소 흐름에 영향을 미치지 않는 또 다른 순수한 CSS 트릭이 있습니다.

#parent {
  min-height: 100vh; /* set height as you need */
  display: flex;
  flex-direction: column;
  background: grey;
}
.child {
  margin-top: auto;
  background: green;
}
<div id="parent">
  <h1>Positioning with margin</h1>
  <div class="child">
    Content to the bottom
  </div>
</div>


부모 div에 높이를 설정하지 않으려면 멋진 것입니다! 감사합니다!
Johan Nordli

1
이것은 나에게 가장 적합한 대답이었다
Russell Chisholm

큰! 다른 플렉스 솔루션은 모든 컨텐츠를 제자리에서 옮겨서 맨 아래에 놓을 객체를 나머지에서 분리합니다. 훌륭한 솔루션!
Alejandro Aristizábal

8

리플 로우를 중단하기 때문에 절대 위치 지정을 원하지 않을 수 있습니다. 경우에 따라 더 나은 솔루션은 조부모 요소 display:table;와 부모 요소 를 만드는 것 display:table-cell;vertical-align:bottom;입니다. 이 작업을 수행 한 후 하위 요소를 제공 할 수 있어야하며 하위 요소 display:inline-block;를 자동으로 하위 요소 쪽으로 흐르게됩니다.


8

참고 : 이것이 최선의 방법은 아닙니다!

상황 : 나는 같은 thign을해야했다. 나는 여분의 div를 추가 할 수 없었기 때문에 내가 가진 것과 붙어 있었고 innerHTML을 제거하고 거의 2 렌더링과 같은 자바 스크립트를 통해 다른 것을 만드는 것이 아니라 하단 (애니메이션 막대).

해결책 : 당시 피곤한 점을 감안할 때 그러한 방법을 생각하는 것이 정상적인 것처럼 보이지만 막대 높이가 시작되는 부모 DOM 요소가 있음을 알았습니다.

더 이상 자바 스크립트를 엉망으로 만드는 대신 ( 항상 좋은 아이디어는 아님) CSS 답변을 사용했습니다! :)

-moz-transform:rotate(180deg);
-webkit-transform:rotate(180deg);
-ms-transform:rotate(180deg);

그렇습니다. DOM을 배치하는 대신 CSS에서 부모를 거꾸로 뒤집 었습니다.

내 시나리오에서는 효과가 있습니다! 다른 사람도 가능합니다! 화염이 없다! :)


1
이것이 최선의 방법은 아니지만 매우 훌륭하고 창의적인 접근 방식입니다. 나 자신은 오늘이 문제를 잠시 동안 레슬링 해왔다. 내 주요 고집 포인트 : 높이가 설정되어 있지 않아야하며 완전히 유동적이어야한다. 이것은 모든 것을 아름답게 다루었습니다. 이 경우 div 내부의 이미지도 뒤집어 지므로 해당 요소의 클래스를 사용하여 다시 뒤집습니다. 높이가 설정되어 있지 않으면 서 정확하게 보입니다. 조금 해 키지 만 이봐, 때로는 더 나은 대안이 없습니다. 잘 했어!
tganyan

4

부모의 키를 알고 있다면 절대 div와 테이블을 피하는 방법은 다음과 같습니다.

<div class="parent">
    <div class="child"> <a href="#">Home</a>
    </div>
</div>

CSS :

.parent {
    line-height:80px;
    border: 1px solid black;
}
.child {
    line-height:normal;
    display: inline-block;
    vertical-align:bottom;
    border: 1px solid red;
}

JSFiddle :


0
<div style="width: 200px; height: 150px; border: 1px solid black;position:relative">
    <div style="width: 100%; height: 50px; border: 1px solid red;position:absolute;bottom:0">
    </div>
</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.