Div 높이 100 % 및 컨텐츠에 맞게 확장


172

내 페이지에 높이가 100 %로 설정된 div 요소가 있습니다. 신체의 높이도 100 %로 설정됩니다. 내부 div에는 배경과 그 배경이 있으며 본문 배경과 다릅니다. 이것은 div 높이를 브라우저 화면 높이의 100 %로 만드는 데 효과적이지만 문제는 해당 div 안에 브라우저 화면 높이를 넘어 세로로 확장되는 내용이 있다는 것입니다. 아래로 스크롤하면 div가 페이지 스크롤을 시작 해야하는 시점에서 끝나지 만 내용이 그 이상으로 넘칩니다. 내부 콘텐츠에 맞게 div를 항상 맨 아래로 이동시키는 방법은 무엇입니까?

내 CSS 단순화는 다음과 같습니다.

body {
    height:100%;
    background:red;
}

#some_div {
    height:100%;
    background:black;
}

페이지를 스크롤하면 검은 색이 끝나고 내용이 빨간색 배경으로 흐릅니다. #some_div에서 위치를 상대 또는 절대로 설정했는지 여부는 중요하지 않지만 문제는 어느 쪽이든 발생합니다. #some_div 내부의 내용은 대부분 절대적으로 배치되며 데이터베이스에서 동적으로 생성되므로 높이를 미리 알 수 없습니다.

편집 : 다음은 문제의 스크린 샷입니다. 사업부 문제


이것은 몇 주 전에 요청되었습니다. 나는 그 질문을 찾을 수 있는지 볼 것이다. 나는 그것에 대해 언급했다고 생각합니다. 편집 : 나는 질문이 유사하다 생각 stackoverflow.com/questions/9398313/...
jmbertucci

더 나은 이해를 위해 코드를 작성하십시오
sandeep

당신은 당신의 전체 코드 pls를 게시 할 수 있습니다
Sven Bieder

23
수천 줄의 PHP 코드, CSS 및 자바 스크립트를 원하십니까? 질문과 관련된 CSS 부분을 게시했습니다 ...
Joey

2
NECROPOST하는 GO는 : 플로우 속성을 설정하는 것은 일반적으로 내부 DIV 콘텐츠가 (지나 연신되는 이와 같은 문제 해결 overflow: hidden;, overflow: scroll;등).
AlbertEngelB

답변:


308

다음은 CSS 스타일에서 수행해야 할 작업입니다. div

display: block;
overflow: auto;

그리고 만지지 마십시오 height


4
잘 했어. 콘텐츠가 충분하지 않을 때 높이를 채우려면 컨테이너 div 를 추가 height: 100%해야 html, body했습니다.
Nico Huysamen

놀라운 해결책이지만 반응이 창처럼 보이는 물체라면 실제로 높이를 만질 수 있습니다
Alexis Rabago Carvajal

는 IS display: block;필요? div는 이미 블록 레벨 요소입니다.
Max Heiber

그것은 나를 위해 내부 스크롤 막대를 추가합니다 (수평 및 수직 모두)
Nathan H

여전히 부모 요소가 자식 요소보다 약간 더 큰 경우 여분의 공백이 있는지 확인하거나  제거하십시오. 또한 선 높이를 조정하십시오. 예를 들어 line-height: 0이미지를 표시하기 위해 텍스트가 필요하지 않기 때문에을 넣었습니다 .
조르가 톤

57

설정 heightautomin-height100%. 대부분의 브라우저에서 해결해야합니다.

body {
  position: relative;
  height: auto;
  min-height: 100% !important;
}

3
IMO, 이것은 "내부 내용에 맞게 div를 항상 맨 아래로 이동시키는 방법"이라는 질문에 대한 답변입니다. 현재 표시된 답변보다 낫습니다 .div / 본문이 내용에 맞게 확장되도록 보장하는 대신 오버플로 스크롤을 켜는 것입니다. +1
Jammerz858 12

내 사건을 해결했다. 고마워!
Tyson Nero

이 경우 어떤 이유로, 그것이 작동하지 않는 것을 주목할 필요가있을 수 height있습니다 100%min-height입니다 auto- 나는이이 경우에 교환 할 것으로 기대하지만 같은 외모는 아니다.
PeaBrain

13

일반적으로이 문제는 Parent Div의 Child 요소가 플로팅 될 때 발생합니다. 문제 의 최신 해결책 은 다음과 같습니다 .

CSS 파일 에서 의사 선택기와 함께 .clearfix 라는 다음 클래스를 작성하십시오 .

.clearfix:after {
content: "";
display: table;
clear: both;
}

그런 다음 HTML에서 .clearfix 클래스를 부모 Div에 추가하십시오. 예를 들면 다음과 같습니다.

<div class="clearfix">
    <div></div>
    <div></div>
</div>

항상 작동해야합니다. 클래스 이름을 .clearfix 대신 .group 으로 호출 하면 코드의 의미가 향상됩니다. 큰 따옴표 ""사이에 Content 값에 점 또는 공백을 추가 할 필요는 없습니다. 또한 오버플로 : auto; 문제를 해결할 수 있지만 스크롤 막대 표시와 같은 다른 문제가 발생하므로 권장하지 않습니다.

출처 : Lisa Catalano와 Chris Coyier의 블로그


8

를 그대로두고 height: 100%사용 display:block;하면 div의 내용만큼의 공간을 사용 하게 됩니다 div. 이렇게하면 모든 텍스트가 검은 색으로 유지됩니다.


어디서 사용 display: block했습니까? 나는 당신의 질문에 그것을 보지 못합니다.
궤도에서 가벼움 경주

Ronnie가 제안한 후 #some_div에 추가했지만 문제가 해결되지 않았습니다.
Joey

1
float : none을 추가 할 수 있습니까? 같은 #some_div CSS에
RonnieVDPoel

대신을 float: none;사용하십시오 clear:both;. 이 같은 일을하지만, 더 크로스 브라우저, @RonnieVDPoel입니다
Cannicide

6

이 질문은 오래되었지만 업데이트가 필요합니다. 다른 방법은 다음과 같습니다.

#yourdiv {
    display: flex;
    width:100%;
    height:100%;
}

1
오래된 질문에 게시하려는 경우 현재 값을 사용하는 것이 좋습니다 (AKA flex에 접두사 없음).
jhpratt

당신이 무슨 말을하는지 모르겠습니다.
user9459537

1
Flex 접두사는 아직 한동안 필요하지 않았습니다.
jhpratt

그리고 어느 것입니까?
user9459537

5

이 시도:

body { 
    min-height:100%; 
    background:red; 
} 

#some_div {
    min-height:100%; 
    background:black; 
} 

IE6 및 이전 버전은 최소 높이 속성을 지원하지 않습니다.

문제는 본체에 높이가 100 %라고 말하면 하나의 브라우저 "뷰포트"(브라우저 도구 모음 및 상태 표시 줄 및 메뉴 막대를 제외하고보기 영역)와 창 가장자리). 내용이 하나의 뷰포트보다 크면 배경에 지정된 높이가 오버플로됩니다.

본문에있는이 최소 높이 속성은 콘텐츠가 한 페이지 전체를 맨 아래까지 채우지 않을 경우 배경이 최소한 하나의 뷰포트만큼 높아야하지만 더 많은 내부 콘텐츠를 포함하도록 아래쪽으로 커지도록해야합니다.


3

오래된 질문이지만 제 경우에는 position:fixed그것을 사용하여 나를 위해 해결했습니다. 내 상황은 조금 달라졌을 수도 있습니다. div페이지를로드하는 동안 표시 해야하는 로딩 애니메이션이있는 반투명 오버레이가있었습니다 . 따라서 화면을 비우지 않은 영역이 아닌 창을 채우 height:auto / 100%거나 사용했습니다 min-height: 100%. position:fixed이 오버레이 스크롤을 사용자와 함께 사용하여 항상 보이는 영역을 덮고 사전로드 애니메이션을 화면 중앙에 유지했습니다.


1

CSS ID #some_div 에이 두 줄을 추가하십시오.

display: block;
overflow: auto;

그 후 당신은 당신이 찾고있는 것을 얻을 것입니다!


0

나는 이것이 매우 간단한 대답이기 때문에 질문을 이해했다고 확신하지는 않지만 여기에 간다 : :)

컨테이너overflow 속성 을 visible 또는 auto로 설정하려고 했습니까 ?

#some_div {
    height:100%;
    background:black; 
    overflow: visible;
    }

추가하면 동적 컨테이너에 필요한 크기로 검은 색 컨테이너를 밀어야합니다. 자동에는 스크롤 막대가있는 것처럼 보이기 때문에 자동으로 표시하는 것을 선호합니다 ...


0

최신 브라우저는 "뷰포트 높이"단위를 지원합니다. div를 사용 가능한 뷰포트 높이로 확장합니다. 다른 접근 방식보다 더 안정적이라고 생각합니다.

#some_div {
    height: 100vh;
    background: black;
}

0

너도 이렇게 할 수있어

display:block;
overflow:auto;
height: 100%;

콘텐츠에 따라 각 동적 div가 포함됩니다. 클래스가있는 공통 div가 있다면 내용에 따라 각 동적 div의 높이가 증가한다고 가정하십시오.


0

당신은 또한 사용할 수 있습니다

 display: inline-block;

광산은 이것과 함께 일했다


0

위치없는 오버레이 : 고정

최근 메뉴에서 이것을 알아 낸 정말 멋진 방법은 본문을 다음과 같이 설정하는 것입니다.

position: relative

래퍼 클래스를 다음과 같이 설정하십시오.

#overlaywrapper {
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    background: #00000080;
    z-index: 100;
}

즉, 고정 위치를 설정할 필요가 없으며 여전히 스크롤을 허용 할 수 있습니다. 나는 이것을 정말로 큰 메뉴를 오버레이하는 데 사용했습니다.


0

플렉스 사용

.parent{
    display: flex
}

.fit-parent{
    display: flex;
    flex-grow: 1
}

0

좋아, 나는 이와 같은 것을 시도했다 :

몸 (정상)

#MainDiv { 
  /* where all the content goes */
  display: table;
  overflow-y: auto;
}

그것을 작성하는 정확한 방법은 아니지만 주 div 디스플레이를 테이블로 만들면 확장되어 스크롤 막대를 구현했습니다.

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