CSS - 상자, 레이아웃

재이·2022년 1월 10일
0

CSS3

목록 보기
2/4

*본 포스팅은 책『실전 프로젝트 반응형 웹 퍼블리싱』을 바탕으로 작성됨.
※코드 출력화면이 보이지 않을 시 글 수정 페이지로 들어와 확인 할 것

상자(Box)

width

박스의 가로 사이즈를 말하는데 여백을 포함하지 않는 크기로 px, %, em 등의 단위로 된 수치를 쓸 수 있고, 많은 브라우저 오류가 가로 사이즈를 기재함으로써 치유되므로 가장 중요한 속성 중 하나라고 볼 수 있다.

height

박스의 세로 사이즈를 말하는데 역시 여백을 포함하지 않는 크리고 px, %, em등의 단위로 된 수치를 쓸 수 있다. 높이값 속성은 레이아웃 작업에서 float을 해제할 때 쓰는 겨우가 있지만 장문의 텍스트 상자에서는 레이아웃을 설계하는데 오히려 방해가 되므로 높이값은 가능한 한 사용하지 않는 것이 좋다.

padding

박스의 안쪽 여백을 발한다. 즉, 내용과 테두리 사이의 간격을 말하는 것이며, 간격과 방향에 관련해서는 다음의 형식으로 사용하게 된다.

padding : 10px; --- 값을 한 번만 지정하면 위, 아래, 왼쪽, 오른쪽 여백 모두 각 10px
padding : 10px 20px; --- 값을 두 번 지정하면 위, 아래 10px / 왼쪽, 오른쪽 20px
padding : 10px 20px 30px; --- 값을 세 번만 지정하면 위 10px / 왼쪽, 오른쪽 20px / 아래 30px
padding : 10px 20px 30px 40px; --- 값을 네 번 지정하면 위 10px / 오른쪽 20px / 아래 30px / 왼쪽 40px
padding-top : 10px; --- 위쪽 여백만 10px로 지정함
padding-right : 10px; --- 오른쪽 여백만 10px로 지정함
padding-bottom : 10px; --- 아래쪽 여백만 10px로 지정함
padding-left : 10px; --- 왼쪽 여백만 10px로 지정함

margin

박스의 바깥쪽 여백을 말한다. 즉, 테두리와 다음 박스 영역 사이의 간격을 말하는 것이며, 특정 브라우저에서 오류를 많이 일으키므로 가능한 한 사용하지 않는 것이 좋겠다.

margin : 10px; --- 값을 한 번만 지정하면 위, 아래, 왼쪽, 오른쪽 바깥 여백 모두 각 10px
margin : 10px 20px; --- 값을 두 번 지정하면 위, 아래 10px / 왼쪽, 오른쪽 20px
margin : 10px 20px 30px; --- 값을 세 번만 지정하면 위 10px / 왼쪽, 오른쪽 20px / 아래 30px
margin : 10px 20px 30px 40px; --- 값을 네 번 지정하면 위 10px / 오른쪽 20px / 아래 30px / 왼쪽 40px
margin-top : 10px; --- 위쪽 여백만 10px로 지정함
margin-right : 10px; --- 오른쪽 여백만 10px로 지정함
margin-bottom : 10px; --- 아래쪽 여백만 10px로 지정함
margin-left : 10px; --- 왼쪽 여백만 10px로 지정함

두 개의 값을 써서 세로 가로 여백을 설정하는 형식으로 박스를 가운데에 정렬할 수 있다.
박스에 가로 사이즈를 주고 [margin : 세로값 auto;] 하게 되면 전체 폭의 중앙에 설정한 크기의 박스가 배치된다.

<!DOCTYPE html>
<html lang="ko">
<head><title> CSS </title>
<meta charset="utf-8">

<style type="text/css">
   body { font:12px "굴림", Gulim; background:url("images/bg_grid.gif") ; }
   .exp { width:500px ; background:#abc ; padding:10px ; margin:20px 0 ; }
   .cloud { width:200px; margin:0 auto; }
</style></head>
<body>
   <p class="exp">오늘은 비가 옵니다.</p>
   <p class="exp">오늘은 눈이 옵니다.</p>
   <p class="exp">오늘은 해가 납니다.</p>
   <p class="exp cloud">오늘은 흐립니다.</p>
</body>

</html>

이를 출력하면 다음과 같다.

오늘은 비가 옵니다.

오늘은 눈이 옵니다.

오늘은 해가 납니다.

오늘은 흐립니다.

각 요소 간의 마진은 합해서 40px이어야 할 텐데 20px이다. - 세로 마진 겹침 오류!
마지막 박스는 중앙에 배치되었다. - margin : 0 auto;

border

박스의 테두리를 말한다. 테두리의 색상, 모양, 굵기를 정할 줄 알아야 하며 한꺼번에 지정할 줄도 알아야 한다.

border-color : #00f; --- 테두리의 색상을 파란색으로 지정한다
border-width : 2px; --- 테두리의 굵기를 2px로 지정한다
border-style : solid; --- 테두리의 모양을 실선으로 지정한다
border-top : 1px solid red; --- 위쪽 테두리만 1px짜리 빨간 실선으로 지정한다
border-bottom : 1px solid red; --- 아래쪽 테두리만 1px짜리 빨간 실선으로 지정한다
border-left : 1px solid red; --- 왼쪽 테두리만 1px짜리 빨간 실선으로 지정한다
border-right : 1px solid red; --- 오른쪽 테두리만 1px짜리 빨간 실선으로 지정한다

테두리 선의 모양은 다음과 같다.

solid --- 실선 모양의 테두리를 칠함
dashed --- 긴 점선 모양의 테두리를 칠함
dotted --- 점선 모양의 테두리를 칠함 (IE6에서는 1px dotted line은 dashed line으로 표현된다)
double --- 테두리 모양이 이중선으로 나타남
none --- 테두리를 치지 않음
groove, ridge, inset, outset --- 액자 형태의 테두리를 칠함

border:5px solid #123456; border:5px dotted #123456; border:5px dashed #123456; border:10px groove #06c; border:10px ridge #f06; border:10px inset #0c3; border:10px outset #c63; border:none;

레이아웃

이번에 나오는 속성들은 블록들의 위치를 가로로 나열하는 데 필요한 요소와 요소들을 겹치게 배열하는 데 필요한 요소들이며 웹 표준 전반에서 가장 중요한 부분이다.

float

박스를 좌측이나 우측에 붙이고 아래 내용이 그 주변을 흐르게 하는 속성인데, 세로로만 나열되던 블록들을 가로로 서로 어울리게 배치하려 할 때 반드시 필요한 것이다. float한 박스에 가로 사이즈를 함께 주어야 모든 구형 브라우저에서까지도 크로스 브라우징 된다.
*크로스 브라우징이란? --- 각 브라우저들에서 한 웹페이지가 동일한 결과로 표현되는 것

left --- 박스를 왼쪽에 배치하고 나머지 컨텐츠는 그 주변을 흐르도록 함
right --- 박스를 오른쪽에 배치하고 나머지 컨텐츠는 그 주변을 흐르도록 함

[float : left;] 를 계속 쓴다는 것은 float된 박스의 옆 공간 중에서 왼쪽에 붙인다는 뜻이다.
따라서 계속 가로로 나열해야 하는 박스들은 맨 마지막 것을 제외하고는 모두 [float : left;]여야 하고 모두 다 [float : left;]여도 된다는 것이다.

clear

float된 박스들의 바로 아래 박스에게 주변을 흐르지 않고 원래대로 배치되도록 하는 속성이다.
즉, float을 해제시켜주는 중요한 역할을 하는데, 이 요소는 블록이어야 한다.

left --- float된 박스 중 좌측이 짧을 때 좌측의 빈 공간부터 채워 내려옴
right --- float된 박스 중 우측이 짧을 때 우측의 빈 공간부터 채워 내려옴
both --- float된 박스 중 어느 쪽도 채우지 않고 다시 한단으로 배치해줌(가장 중요)

float을 해제하지 않으면 얼핏 보기에 정상적인 것 같아도 float된 박스를 감싸는 박스에 부여된 배경이나 테두리 속성이 실행되지 않는다. 특히 float된 박스 다음에 [clear : both;]를 부여할 박스가 없어서 방치한 경우가 그런 경우이다.

이런 경우에는 [clear : both;]를 부여할 가짜 요소를 만들어 주어야 한다. :after 선택자를 이용하여 container 안에 실제로는 없는 마지막 박스를 만들고 내용은 비웓둔다. 거기에 [clear : both;]을 해준다.

#container:after {
  content : "";
  display : block;
  clear : both;
}

이렇게 세 문장이다.

이러한 float 해제 처리를 해주지 않으면 container에 디자인이 들어가지 않는다는 것을 다음 예제를 통해 확인해보자.

<!DOCTYPE html>
<html lang="ko">
<head>
<title>CSS</title>
<meta charset="utf-8">
<style type="text/css">
*{margin:0;padding:0;}li{list-style-type:none;}
body{font:12px "굴림",Gulim;margin:10px;}
#container{width:500px;padding:10px;background:#fdd;border:5px solid #caa;}
h1{text-align:center;padding:10px;}
p{text-align:justify;}
.green{float:left;width:200px;padding:15px;background:#dda;}
.coffee{float:right;width:200px;padding:15px;;background:#ba7;}
#container:after{content:"";display:block;clear:both;}
</style>
</head>

<body>
<div id="container">
<h1>녹차와 커피</h1>
<div class="green">
<p>녹차는 은은한 향을 좋아하는 사람들이 애용하는 차이다. 녹차를 마실 줄 모르는 사람들은 티백들을 모두 뜯어 주전자에 넣고 끊이기도 하는데 강한 차의 향기도 견디기 힘들겠지만 보관도 힘들고 그때그때 방금 끓인 듯한 맛을 느끼지 못하게 되며 진한 카페인 덕에 밤에 잠들기도 힘들 것이다.</p>
</div>
<div class="coffee">
<p>커피는 독한 향을 좋아하는 사람도 매우 좋아하며 심한 경우  태어나기 전부터 커피를 마신 듯 강한 중독 증세를 보이는 경우가 많다. 심지어 원두를 씹어서 향에 자신을 담그는 사람도 있고 설탕, 시럽 등 다른 조미를 절대로 허락하지 않는 오직 커피맛만을 고집하는 마니아들이 늘고 있다.</p>
</div>
</div>
</body>
</html>

이를 출력하면 다음과 같다.


CSS

녹차와 커피

녹차는 은은한 향을 좋아하는 사람들이 애용하는 차이다. 녹차를 마실 줄 모르는 사람들은 티백들을 모두 뜯어 주전자에 넣고 끊이기도 하는데 강한 차의 향기도 견디기 힘들겠지만 보관도 힘들고 그때그때 방금 끓인 듯한 맛을 느끼지 못하게 되며 진한 카페인 덕에 밤에 잠들기도 힘들 것이다.

커피는 독한 향을 좋아하는 사람도 매우 좋아하며 심한 경우 태어나기 전부터 커피를 마신 듯 강한 중독 증세를 보이는 경우가 많다. 심지어 원두를 씹어서 향에 자신을 담그는 사람도 있고 설탕, 시럽 등 다른 조미를 절대로 허락하지 않는 오직 커피맛만을 고집하는 마니아들이 늘고 있다.


위의 코드에서

#container:after{content:"";display:block;clear:both;}

이 구문이 사라지면 #container 의 디자인이 제대로 실행되지 않아 결과가 다음처럼 나오게 된다.


CSS

녹차와 커피

녹차는 은은한 향을 좋아하는 사람들이 애용하는 차이다. 녹차를 마실 줄 모르는 사람들은 티백들을 모두 뜯어 주전자에 넣고 끊이기도 하는데 강한 차의 향기도 견디기 힘들겠지만 보관도 힘들고 그때그때 방금 끓인 듯한 맛을 느끼지 못하게 되며 진한 카페인 덕에 밤에 잠들기도 힘들 것이다.

커피는 독한 향을 좋아하는 사람도 매우 좋아하며 심한 경우 태어나기 전부터 커피를 마신 듯 강한 중독 증세를 보이는 경우가 많다. 심지어 원두를 씹어서 향에 자신을 담그는 사람도 있고 설탕, 시럽 등 다른 조미를 절대로 허락하지 않는 오직 커피맛만을 고집하는 마니아들이 늘고 있다.


※ 만약 제대로 출력이 되지 않을 시 수정 페이지에서 모습을 확인할 수 있다.

display

요소의 성격을 바꾸어주는 속성이다. display가 어떻게 설정되어 있는지에 따라 그 후 사용할 수 있는 속성이 달라지므로 주의하자.

block --- 박스를 블록 요소로 만들어 줌 (줄 바꿈이 일어남)
inline --- 박스를 인라인 요소로 만들어 줌 (줄 바꿈이 일어나지 않음)
inline-block --- 박스를 인라인 요소로 두어 줄 바꿈은 일어나지 않게 하면서 블록에 쓸 수 있는 속성을 쓸 수 있음
none --- 박스를 보이지 않ㅎ게 숨겨 줌

*블록에 쓸 수 있는 속성이란? - width, height, padding, text-align... 등이다.

[display : inline-block;]을 사용하면 요소들 사이에 5px의 margin이 발생한다.
따라서 만약 각 메뉴들 사이가 붙어 있어야 한다면 [display : inline-block;] 대신 [float : left;] 를 넣어야 한다.
이때 float 해제는 gnb 요소에 높이값을 주는 것으로 처리한다. (뒤에 가서 정리할 float 해제 방법에 다시 나온다.)

overflow

박스 안의 내용이 박스보다 클 경우 넘치는 부분을 처리하는 속성이다.

hidden --- 넘치는 컨텐츠를 숨김
auto --- 넘치는 컨텐츠가 존재할 경우에만 스크롤바를 생성해 줌
scroll --- 넘치는 컨텐츠가 없어도 스크롤바를 생성해 줌
scroll-y, scroll-x --- 각 방향으로 스크롤바를 따로 처리하게 해줌

<!DOCTYPE html>
<html lang="ko">
<head><title>CSS</title>
<meta charset="utf-8">
<style type="text/css">
*{margin:0;padding:0;}li{list-style-type:none;}
body{font:12px "굴림",Gulim;margin:10px;}

#container{width:200px;height:100px;
    border:1px solid #ccc;overflow:hidden;}
</style></head>
<body>
	<div id="container">
		<blockquote>우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다</blockquote>
		<p> - 김연수(소설가) </p>
		<p>이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다. </p>
	</div>
</body>
</html>

이를 출력하면 다음과 같다.


CSS

우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다

- 김연수(소설가)

이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다.


overflow에 무엇을 주느냐에 따라 다음과 같은 결과가 나타난다.


overflow : hidden;

CSS

우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다

- 김연수(소설가)

이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다.


overflow : scroll;

CSS

우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다

- 김연수(소설가)

이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다.


overflow-y : scroll;

CSS

우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다

- 김연수(소설가)

이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다.


overflow-x : scroll;

CSS

우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다

- 김연수(소설가)

이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다.


overflow : auto;

CSS

우리가 확실하다고 여기는 것이 아니라 불명확하다며 지나치는 사소한 것에 내가 누구인지 말해주는 본질적인 요소가 담겨 있다

- 김연수(소설가)

이 글을 처음 읽게 되었을 때 공감하여 입을 다물지 못했다. 무릎 대신 머리를 치는 것 같은 느낌을 받았다. 그 뒤로 나는 사람들이 발표하는 말이 아닌 일상에서의 사소한 말들에 집중하기 시작했던 것 같다.


float을 해제하는 몇 가지 방법

앞서 언급했듯 float을 해제하지 않으면 다음 박스들에 속성이 제대로 지정되지 않으며 무엇보다 float된 박스를 감싸는 박스에 부여된 배경, 테두리 여백 등이 하나도 나오지 않는다. 따라서 레이아웃을 제대로 표현하는데 float 해제는 반드시 필요하다.

1. float된 박스들의 바로 다음 박스에게 [clear : both;] 한다.
바로 다음에 박스가 없으면 사용할 수 없다.
2. float된 박스들을 감싸는 박스를 다시 [float : left;] 한다.
그 float까지 연쇄적으로 해제해야 하며 width값 주어야 크로스 브라우징 됨.
3. float된 박스들을 감싸는 박스에 [overflow : auto;] 한다.
세로 스크롤바가 생길 경우 사용할 수 없으며 width값 주어야 크로스 브라우징 됨.
4. float된 박스들을 감싸는 박스에 height값을 준다.
본문 내용엔 높이를 주지 않으므로 세로 사이즈가 불변일 경우 아니면 사용불능.
5. float된 박스들을 감싸는 박스에 가상요소 : after를 주어 해제한다.
아무 부작용 없으며 width값 주어야 크로스 브라우징 됨.
1번이 안되면 이 방법이 가장 좋음.

※ 부모 요소에 heignt를 주면 float 해제 효과가 있으나 본문 내용에 height를 주면 유지보수가 힘들어지니 container 본문 부분에서는 꼭 필요한 경우가 아니면 height를 주지 않는다.

position

블록을 박스의 위치기준으로 배치하는 기술로서, 주로 컨텐츠를 서로 겹치게 배열하거나 마크업 순서와 디자인상의 순서가 다른 경우의 표현에 매우 유용하다.

static --- 요소를 이동하거나 겹칠 수 없는 원래 그대로의 상태를 말하며 postion을 생략하면 그게 바로 static.
relative --- relative로 지정된 요소는 left와 top 속성으로 이동을 할 수 있으며, absolute로 지정된 요소의 부모 요소 역할을 할 수도 있다.
absolute --- absolute로 지정된 요소는 다른 요소와 겹칠 수 있고 left와 top 속성을 이용하여 부모 박스를 기준으로 위치를 정해주어야 한다.
fixed --- 요소의 위치를 화면 기준으로 지정해주며, 구형 브라우저에서는 표현되지 않는다.

position은 absolute와 relative가 중요하다. 다른 요소와 겹쳐져야 하거나 또는 제이쿼리로 애니메이션 해야 한다면 absolute여야 한다. 또한, absolute 요소의 부모 박스 역할을 하거나 그냥 살짝 이동만 할 거라면 relative를 사용한다.

position : relative;float : left;는 함께 쓸 수 있으며 둘 다 주변과 어울리게 해준다. 그러나 position : absolute;float : left;는 함께 쓸 수 없다. absolute는 어울림의 반대 즉, 따로 떨어져 나온 독립된 요소이기 때문에 부모 박스가 자동으로 감싸주지 않는다. 또한, float : left;clear : both;도 함께 쓰면 안된다. float하는 명령과 해제하는 명령을 둘 다 쓰면 float 명령이 오류를 일으키게 돌 테니 쓰지 않는 것이 맞다.

left

relative나 absolute, 또는 fixed된 박스의 가로 위치를 정할 때 쓰는 속성이다.
※ 마크업한 요소가 접근성 측면에서 반드시 읽어주어야 하지만 보이지 않는 것이 레이아웃 상으로 좋을 경우 요소를 화면 바깥으로 숨기기 위해 position : absolute; left : -9999px; }처럼 사용하기도 한다.
displat : none;을 하면 아예 읽을 수 없어지기 때문에 위와 같은 방법으로 숨기는 것이 좋다.
한 가지 더, table의 caption은 위처럼 숨기면 브라우저에 따라 오류가 생길 수 있으니 visibility : hidden;도 넣어 준다.

top

relative나 absolute, 또는 fixed된 박스의 세로 위치를 정할 때 쓰는 속성이다.

2단 레이아웃을 완성하는 몇 가지 방법

2단은 container 안의 가로로 나열된 두 박스, sidemenu와 content를 말한다.

1. float 방식

sidemenu는 float ; left;하고 content는 float : right;
※loat의 해제가 필요함.

sidemenu
content
clear:both;
<div style="float:left; width:100%; border:1px solid red;">
  <div style="float:left; width:200px; height: 300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="float:right; width:800px; height: 600px; margin:10px; border:1px solid blue;">content</div>
</div>
<div style="clear:both; margin-top:10px; border:1px solid #333;">clear:both;</div>

2. position - 절대, 상대위치

sidemenu는 position : absolute하고 content는 position : relative; 함.
긴 쪽을 relative해야 container가 포함할 수 있다.
※부모 박스를 지정해 주어야 함.

sidemenu
content
<div style="position:relative; width:100%; border:1px solid red;">
  <div style="position:absolute; width:200px; height: 300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="position:relative; left:220px; width:800px; height: 600px; margin:10px; border:1px solid blue;">content</div>
</div>

3. postition - 절대, 마진

sidemenu는 position : absolute하고 content는 margin-left를 줌.
※부모 박스를 지정해 주어야 함.

sidemenu
content
<div style="position:relative; width:100%; border:1px solid red;">
  <div style="position:absolute; width:200px; height: 300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="margin-left:220px; width:800px; height: 600px; margin:10px; border:1px solid blue;">content</div>
</div>

4. float + position

sidemenu는 position : absolute하고 content는 float : right;
※float의 해제가 필요하고 부모 박스를 지정해 주어야 함.

sidemenu
content
clear:both;
<div style="position:relative; width:100%; border:1px solid red;">
  <div style="position:absolute; width:200px; height: 300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="margin-left:220px; width:800px; height: 600px; margin:10px; border:1px solid blue;">content</div>
</div>
<div style="clear:both; margin-top:10px; border:1px solid #333;">clear:both;</div>

3단 레이아웃을 완성하는 몇 가지 방법

이번엔 3단 레이아웃을 완성하는 방법을 정리해보자. sidemenu보다 content를 먼저 마크업 할 경우는 sidemenu와 content를 감싸는 박스가 필요하므로 다섯 가지 방법으로 정리해보자.

1. float 방식

sidemenu와 content는 float:left; banner만 float:right;
float의 해제가 필요함

sidemenu
content
banner
clear:both;
<div style="float:left; width:100%; border:1px solid red;">
  <div style="float:left; width:200px; height:300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="float:left; width:600px; height:600px; margin:10px; border:1px solid blue;">content</div>
  <div style="float:right; width:200px; height:400px; margin:10px; border:1px solid black;">banner</div>
</div>
<div style="clear:both; margin-top:10px; border:1px solid #333;">clear:both;</div>

2. content를 sidemenu보다 먼저 마크업

content는 float:right;하고 sidemenu는 flaot:left;
sidemenu와 content는 float:left; banner는 float:right;
float의 해제가 필요함

sidemenu
content
banner
clear:both;
<div style="float:left; width:100%; border:1px solid red;">
  <wrap style="float:left;">
    <div style="float:left; width:200px; height:300px; margin:10px; border:1px solid green;">sidemenu</div>
    <div style="float:right; width:600px; height:600px; margin:10px; border:1px solid blue;">content</div>
  </wrap>
  <div style="float:right; width:200px; height:400px; margin:10px; border:1px solid black;">banner</div>
</div>
<div style="clear:both; margin-top:10px; border:1px solid #333;">clear:both;</div>

3. position - 절대, 상대위치

siidemenu와 content는 position:absolute하고 content는 position:relative
부모 박스를 지정해 주어야 함

sidemenu
banner
content
<div style="position:relative; width:100%; border:1px solid red;">
  <div style="position:absolute; left:0; width:200px; height:300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="position:relative; left:220px; width:600px; height:600px; margin:10px; border:1px solid blue;">content</div>
  <div style="position:absolute; right:0; width:200px; height:400px; margin:10px; border:1px solid black;">banner</div>
</div>

4. position - 절대, 마진

sidemenu와 content는 position:absolute하고 content는 margin-left;
부모 박스를 지정해주어야 함

sidemenu
banner
content
<div style="position:relative; width:100%; border:1px solid red;">
  <div style="position:absolute; left:0; width:200px; height:300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="position:absolute; right:0; width:200px; height:400px; margin:10px; border:1px solid black;">banner</div>
  <div style="margin:10px 10px 10px 220px; width:600px; height:600px; border:1px solid blue;">content</div>
</div>

5. float + position

sidemenu는 float:left;하고 banner는 float;right;하고 content는 position:absolute;
내용이 길면 부모 박스에 height 지정
float의 해제가 필요하고 부모 박스를 지정해 주어야 함

float이 있으니 해제도 해주어야 하고 absolute 박스가 있으니 부모도 설정해주어야 하며 가운데 상자가 absolute 박스이니 양쪽 박스보다 가운데 길이가 긴 레이아웃에 이 방식을 적용하면 안 될 것이다. 제일 번거로운 방식이라서 잘 쓰지 않지만 가능한 조합의 경우를 모두 표현해보기 위해 정리해보자.

sidemenu
content
banner
clear:both;
<div style="position:relative; float:left; width:100%; border:1px solid red;">
  <div style="float:left; width:200px; height:300px; margin:10px; border:1px solid green;">sidemenu</div>
  <div style="position:absolute; margin:10px; left:220px; width:600px; height:600px; border:1px solid blue;">content</div>
  <div style="float:right; width:200px; height:400px; margin:10px; border:1px solid black;">banner</div>
</div>
<div style="clear:both; margin-top:10px; border:1px solid #333;">clear:both;</div>

profile
그림쟁이 개발자

0개의 댓글