Height 100% 2~3단 컨텐츠 레이아웃잡기
Publisher/CSS / 2010. 7. 27. 19:43
	
								
							
기존 100% 레이아웃잡을때 중간에 들어가는 컨텐츠를 항상 height:100% 로 표시하여 header와 footer의 높이만큼 margin-top, margin-bottom 처리하는곳에서 착안하여 Flexible한 100% layout 을 표준모드로 구현해 보았다.
지원하는 Doctype
표준모드와 비표준모드에서 모두 테스트해본 결과 잘나온다.. ^^;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html>
지원 브라우저
IE 5.5, 6,7,8,9  사파리 5.0 , 오페라 10.60, 파폭3.6 , 크롬5.0 에서 테스트 해본결과 잘나온다
01234567
2단 소스
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>데꾸벅 테스트</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<style type="text/css">
* {
    padding:0;
    margin:0
}
html,body{
	height:100%;
}
#header{
	position:absolute;
	top:0;left:0;
	width:100%;
	height:70px;
	background:gray;
	overflow:hidden;
}
#footer {
	position:relative;
	clear:both;
	height:50px;
	background:green;
}
#container{
	min-height:100%;
	margin-left:200px;  /*왼쪽 영역 만큼 뛰기*/
	background:blue;
	margin-bottom:-50px;    /*푸터height만큼 마진값*/
}
* html #container{height:100%;} /* IE7 hack*/
    /*왼쪽 영역 백그라운드 처리는 body부분에서 처리*/
    body {
        background:yellow;
    }
    #left {
    	position:relative;
    	width:200px;
    	float:left;
    	margin-left:-200px;
    }
    #headHeight{height:70px;}   /*컨텐츠영역 상단 보정(header height만큼 고정*/
    #footerHeight{clear:both;height:50px;width:100%;}   /*컨텐츠영역 하단 보정(footer height만큼 고정*/
    #content {
        position:relative;
        z-index:1;
    }
    /* IE3pixel 버그를 위한것 */
    * html #content {
        height:1%;
    }
</style>
</head>
<body>
<!-- header s -->
<div id="header">헤더영역</div>
<!-- header e -->
<!-- 메인 컨텐츠 영역 래퍼 s -->
<div id="container">
    <div id="headHeight"><!-- 상단고정영역 --></div>
    <!-- 왼쪽 s -->
    <div id="left">
        왼쪽<br />
        왼쪽<br />
        왼쪽<br />
    </div>
    <!-- 왼쪽 e -->
    <!-- 중앙 컨텐츠 s -->
    <div id="content">
        중앙 컨텐츠<br />
        중앙 컨텐츠<br />
        중앙 컨텐츠<br />
        중앙 컨텐츠<br />
    </div>
    <!-- 중앙 컨텐츠 e -->
    <div id="footerHeight"><!-- 하단고정영역 --></div>
</div>
<!-- 메인 컨텐츠 영역 래퍼 s -->
<!-- footer s -->
<div id="footer">푸터영역</div>
<!-- footer e -->
</body>
</html>
3단소스
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>데꾸벅 테스트</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<style type="text/css">
* {
    padding:0;
    margin:0
}
html,body{
	color: #000;
	height:100%;
}
#header{
	position:absolute;
	top:0;left:0;
	width:100%;
	height:70px;
	background:gray;
	overflow:hidden;
}
#footer {
	position:relative;
	clear:both;
	height:50px;
	background:green;
}
#container{
	min-height:100%;
	margin-left:200px;  /*왼쪽 영역 만큼 뛰기*/
	margin-right:100px;
	background:blue;
	margin-bottom:-50px;    /*푸터height만큼 마진값*/
}
* html #container{height:100%;} /* IE7 hack*/
    /*왼쪽 영역 백그라운드 처리는 body부분에서 처리*/
    body {
        background:yellow;
    }
    #left {
    	position:relative;
    	width:200px;
    	float:left;
    	margin-left:-200px;
    }
    * html #left {margin-right:-3px;padding-bottom:50px}
    * > html #left {padding-bottom:0}
    #right {
    	position:relative;
    	width:100px;
    	float:right;
    	margin-right:-100px;
    }
    #headHeight{height:70px;}   /*컨텐츠영역 상단 보정(header height만큼 고정*/
    #footerHeight{clear:both;height:50px;width:100%;}   /*컨텐츠영역 하단 보정(footer height만큼 고정*/
    #content {
        position:relative;
        z-index:1;
    }
    /* IE3pixel 버그를 위한것 */
    * html #content {
        height:1%;
    }
</style>
</head>
<body>
<!-- header s -->
<div id="header">헤더영역</div>
<!-- header e -->
<!-- 메인 컨텐츠 영역 래퍼 s -->
<div id="container">
    <div id="headHeight"><!-- 상단고정영역 --></div>
    <!-- 왼쪽 s -->
    <div id="left">
        왼쪽<br />
        왼쪽<br />
        왼쪽<br />
    </div>
    <!-- 왼쪽 e -->
    <!-- 오른쪽 s -->
    <div id="right">
        오른쪽<br />
        오른쪽<br />
        오른쪽<br />
    </div>
    <!-- 오른쪽 e -->
    <!-- 중앙 컨텐츠 s -->
    <div id="content">
        중앙 컨텐츠<br />
        중앙 컨텐츠<br />
        중앙 컨텐츠<br />
        중앙 컨텐츠<br />
    </div>
    <!-- 중앙 컨텐츠 e -->
    <div id="footerHeight"><!-- 하단고정영역 --></div>
</div>
<!-- 메인 컨텐츠 영역 래퍼 s -->
<!-- footer s -->
<div id="footer">푸터영역</div>
<!-- footer e -->
</body>
</html>
참고적으로 위 방법은 쓸데없는 마크업이 많이 들어가는 이유로 개인적으로는 잘 쓰지 않는 방법입니다.
좀더 깔끔한 소스를 원하신다면.. 신현석님의 "CSS절대 위치를 사용한 프레임효과" 를 참조하세요..
좀더 깔끔한 소스를 원하신다면.. 신현석님의 "CSS절대 위치를 사용한 프레임효과" 를 참조하세요..
'Publisher > CSS' 카테고리의 다른 글
| CSS3의 구조적인 가상선택자 (1) | 2013.03.21 | 
|---|---|
| 보석같은 CSS3 함수 calc() (3) | 2013.03.11 | 
| 간단한 CSS Reset (4) | 2010.05.24 | 
| CSS 최적화 기법 (7) | 2010.03.08 | 
| 지금 바로 쓸수 있는 CSS3 (0) | 2010.03.07 | 






 flexible_layout.zip
flexible_layout.zip