아래에서 위로 스태킹 다이브


139

고정 높이로 divs를 추가 div하면 자식 div가 위쪽에서 아래쪽으로 나타나고 위쪽 테두리에 붙어 있습니다.

┌─────────────────────────┐
 Child Div 1             
 Child Div 2             
                         
                         
                         
└─────────────────────────┘

이제 다음과 같이 아래쪽에서 위쪽으로 표시하려고합니다 (아래쪽 테두리에 고정).

┌─────────────────────────┐
                         
                         
                         
 Child Div 1             
 Child Div 2             
└─────────────────────────┘
┌─────────────────────────┐
                         
                         
 Child Div 1             
 Child Div 2             
 Child Div 3             
└─────────────────────────┘
┌───────────────────────┬─┐
 Child Div 2           │▲│
 Child Div 3            
 Child Div 4            
 Child Div 5           │█│
 Child Div 6           │▼│
└───────────────────────┴─┘

그리고 ... 나는 당신이 무슨 뜻인지 알기를 바랍니다.

CSS로 간단하게 할 수 vertical-align: bottom있습니까? 아니면 JavaScript와 함께 무언가를 해킹해야합니까?

답변:


46

모든 답변에 질문의 스크롤 막대 포인트가 누락되었습니다 . 그리고 힘든 일입니다. 최신 브라우저 및 IE 8 이상에서만 작동 해야하는 경우 테이블 위치 지정 vertical-align:bottom및을 사용할 수 있습니다 max-height. 특정 브라우저 호환성에 대해서는 MDN 을 참조하십시오 .

데모 (수직 정렬)

.wrapper {
  display: table-cell;
  vertical-align: bottom;
  height: 200px;
}
.content {
  max-height: 200px;
  overflow: auto;
}

html

<div class="wrapper">
  <div class="content">
     <div>row 1</div>
     <div>row 2</div>
     <div>row 3</div>  
  </div>
</div>  

그 외에는 CSS로는 불가능하다고 생각합니다. 을 사용하여 요소를 컨테이너 하단에 붙일 수 position:absolute있지만 흐름에서 벗어날 수 있습니다. 결과적으로 컨테이너는 늘어나지 않고 컨테이너를 스크롤 가능하게 만듭니다.

데모 (위치 절대)

.wrapper {
  position: relative;
  height: 200px;
}
.content {
  position: absolute;
  bottom: 0;
  width: 100%;
}

그리고 overflow-y:auto컨테이너
venimus

@venimus-컨테이너의 높이가 position:absolute자식의 영향을받지 않기 때문에 비활성화 된 스크롤 막대가 표시됩니다 .
gblazex 2016 년

잘 솔루션은 스크롤 막대를 표시하지 않습니다, 그것은 질문의 일부입니다
venimus

답변을 업데이트했습니다. 최신 브라우저 (IE 7+)에서 스크롤 막대 문제를 해결할 수 있습니다.
gblazex 2016 년

1
답장을 보내 주셔서 감사합니다. 포장지가 잘 작동합니다.
Wulf

38

이것에 대한 더 현대적인 대답은 사용하는 것 flexbox입니다.

다른 많은 최신 기능과 마찬가지로 레거시 브라우저 에서는 작동하지 않으므로 IE8-9 시대의 브라우저를 지원할 준비가되지 않은 경우 다른 방법을 찾아야합니다.

방법은 다음과 같습니다.

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

.child {
  /* whatever */
}

그리고 그게 당신이 필요한 전부입니다. 자세한 flexbox내용은 MDN을 참조하십시오 .

다음은 기본적인 스타일링이 포함 된 예입니다. http://codepen.io/Mest/pen/Gnbfk


멋진 답변, 대단히 감사합니다! 플렉스 박스에 대해 들어 보지 못했지만 정말 흥미로운 소리가납니다!
Wulf

4
이것은 순서를 반대로하지만 부모의 맨 아래로 끌어 당기지는 않습니다.
Edward Anderson

@ nilbus 당신은 정교하고 싶습니까? 내 이전 테스트와 첨부 된 예제조차 가장 확실하게 부모 요소의 맨 아래로 끌어 내리는 것처럼 보입니다.
Nils Kaspersson

내가 착각 한 것 같습니다. 아마도 저에게 도움이되지 않는 충돌하는 스타일이있을 것입니다. 감사!
Edward Anderson

예제 코드에서 .parent {position : fixed;}이 작동합니다. 또한 데모의 스크롤이 Chome에서 작동하지 않으므로 다음이 필요합니다. .parant {-webkit-flex : 1 1 auto; 오버플로 -y : 자동; 최소 높이 : 0 픽셀} 및 위치 고정 제거
잉 Sek의 긴

1

CSS 변환을 사용하여이를 보관할 수 있습니다.

코드 펜을 만들었습니다. https://codepen.io/king-dev/pen/PoPgXEg

.root {
  transform: scaleY(-1);
}
.root > div {
  transform: scaleY(-1);
}

아이디어는 루트를 먼저 수평으로 뒤집은 다음 직접 하위 div를 뒤집는 것입니다.

참고 : 위의 방법은 div의 순서를 반대로 바꿉니다. 바닥에서 시작하도록 단순히 배치하려면 다음을 수행하십시오.

.root {
  display: flex;
  flex-direction: column;
  height: 100px;
  overflow-y: auto;
}
.root > div:first-child {
  margin-top: auto;
}

0

구식으로 유지 ...

나는에서 같은 일을하고 싶어 #header 사업부 나는 빈 만들 수 있도록 DIV 전화를 #headspace하고 (내부 상단에 스택을 배치 #header) :

<div id="header">
    <div id="headspace"></div>
    <div id="one">some content</div>
    <div id="two">other content</div>
    <div id="three">more content</div>
</div> <!-- header -->

그런 다음 보이지 않는 div 의 높이에 백분율을 사용 하여 다른 것을 아래로 밀었습니다. 브라우저의 개발자 / 검사자 도구를 사용하면 쉽게 얻을 수 있습니다.#headspace

#header {
    width: 100%;
    height: 10rem;
    overflow: auto;
}

#headspace {
    width: 100%;
    height: 42%;    /* Experiment with Inspect (Element) tool */
}

#one, #two, #three {
    /* Insert appropriate dimensions for others... */
}

고정 컨텐츠가있는 경우에만 작동합니다. 동적 콘텐츠가 있고 많은 div가 렌더링 될 사람을 모르는 경우 작동하지 않습니다.
Sajid Ali

내가 사용한 약간의 솔루션이었습니다. 동적 콘텐츠의 필요성에 대한 구체적인 언급은 없었습니다. 페이지 div가 추가 될 때마다 페이지가 완전히 새로 고쳐 집니다. 누군가가 실제로 더 정적 인 솔루션을 원할 경우를 대비하여 여기에 넣습니다. 다른 말로하면 : 제로 투표는 부정 투표보다 더 적합 할 것이라고 생각합니다 .
veganaiZe

시간을내어 정적 인 내용으로 답변 해 주셔서 감사합니다. 나는 그걸 존경한다. 이 질문 Child Div #에는 하위 div가 증가하는 동적 내용이 명확하게 표시 되며 특정 높이로 증가하면 스크롤이 표시되어야합니다. 따라서이 답변은 실제 질문에 대한 해결책을 제공하지 않습니다.
Sajid Ali

0

메시지 흐름이 아래에서 위로 움직이는 채팅 앱과 같은 bootstarp 로이 작업을 원합니다.

물건을 읽은 후, 나는 이것을 발견했다.

외부 div가 클래스 .outerDiv라고 가정 한 다음 UI, list

.outerDiv {
    height: 361px;
    position: relative;
}
ui.msg-content{
    width: 100%;
    bottom: 0;
    position: absolute;
    max-height: 98%;
    overflow-y: auto;
}

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

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



-5
<div style="height: 500px;">
    <div style="height: 20px; position: absolute; bottom: 120px;">Child Div 1</div>
    <div style="height: 20px; position: absolute; bottom: 100px;">Child Div 2</div>
    <div style="height: 20px; position: absolute; bottom: 80px;">Child Div 3</div>
    <div style="height: 20px; position: absolute; bottom: 60px;">Child Div 4</div>
    <div style="height: 20px; position: absolute; bottom: 40px;">Child Div 5</div>
</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.