안녕하세요, 여행벌입니다.

오늘은 표를 꾸미는데 필요한 CSS 속성들에 대해서 포스팅해보겠습니다.


caption-side 속성 : 표 제목 위치 정하기

 <caption> 태그를 이용해 만든 표 제목은 caption-side 속성을 이용해 캡션의 위치를 표 아래쪽으로 옮길 수 있습니다.

caption-side : top | bottom

 caption-side : top 은 캡션을 표의 윗부분에 표시해주고 HTML table 관련 태그 포스팅에서 caption 태그를 이용해 표 위에다가 제목을 달아봤습니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.table1 {
				caption-side : bottom;
				border : 1px solid black;
			}
		</style>
	</head>
	<body>		
		<table class="table1">
			<caption>축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>		
		</table>
	</body>
</html>

 caption-side 속성을 이용해 표 아래에 표 제목을 달아보겠습니다.

border 속성 : 표 테두리 스타일 결정하기

 표를 삽입할 때 기본적으로 <table border="1"> 처럼 많이 사용해 표에 테두리를 표시합니다. 이처럼 border 속성을 이용하면 표에 테두리를 표시할 수 있고, 테두리의 색상이나 형태, 너비등을 지정할 수 있습니다. 또, border 속성은 table의 테두리 스타일 말고도 다른 태그에서도 자주 사용되는 속성입니다.

 자세한 내용은 다음 포스팅에 정리해두었습니다.

 (https://travelbeeee.tistory.com/397?category=807502)

border-collapse 속성 : 테두리 통합, 분리하기

 <table>태그와 <td> 태그에 동시에 border 속성을 사용하면 테두리가 두 줄로 표시됩니다. 이때, border-collapse 속성을 사용하면 표의 바깥 테두리와 셀의 각 테두리가 떨어져 있는 것을 그대로 둘 것인지, 두 테두리를 하나로 합칠 것인지 결정할 수 있습니다.

border-collapse : collapse | separate

 위와 동일한 예시에 td 태그에도 border 속성을 부여해보겠습니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.table1 {
				caption-side : bottom;
				border : 1px solid black;
			}
			td{
				border : 1px solid black;
			}
		</style>
	</head>
	<body>		
		<table class="table1">
			<caption>축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>		
		</table>
	</body>
</html>

 결과는 위와 같습니다. 전체 테이블에도 border가 생기고, 각 셀마다 border가 생겨서 테두리가 2개 겹치는 부분이 생기는 것을 확인할 수 있습니다.

 같은 예시에 border-collapse 속성을 적용해 겹치는 부분을 없애보겠습니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.table1 {
				caption-side : bottom;
				border : 1px solid black;
				border-collapse : collapse;
			}
			td{
				border : 1px solid black;
			}
		</style>
	</head>
	<body>		
		<table class="table1">
			<caption>축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>		
		</table>
	</body>
</html>

border-spacing 속성 : 인접한 셀 테두리 사이 거리 지정하기

 border-spacing 속성을 이용하면 인접한 셀 테두리 사이의 거리를 지정할 수 있습니다. border-collapse 속성에서 collapse를 이용해 테두리를 통합한 경우에는 적용할 수 없는 속성입니다.

 border-spacing 속성은 값을 1개 혹은 2개 줄 수 있는데, 값이 하나라면 수평 거리와 수직 거리를 한꺼번에 지정한 것이고, 2개라면 첫 번째 값은 수평 거리, 두 번째 값은 수직 거리를 의미합니다.

border-spacing : <크기> | <수평거리> <수직거리>

 같은 예시에 border-spacing 속성을 이용해 테두리 사이의 거리를 띄워보겠습니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.table1 {
				caption-side : bottom;
				border : 1px solid black;
				border-spacing : 20px;
			}
			td{
				border : 1px solid black;
			}
		</style>
	</head>
	<body>		
		<table class="table1">
			<caption>축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>		
		</table>
	</body>
</html>

 위와 비교하면 셀과 테두리 사이의 거리가 벌어져있는 것을 확인할 수 있습니다.

empty-cells 속성 : 빈 셀의 표시 여부 지정하기

 border-collapse : separate 를 사용해 셀들을 분리했을 경우, empty-cells 속성을 사용하면 내용이 없는 빈 센들의 표시 여부를 지정할 수 있습니다.

empty-cells : show | hide

 동일한 테이블에 한 쪽은 empty-cells : show / 다른 쪽은 empty-cells : hide 를 적용해보겠습니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.schedule {
				border-collapse:separate;
				margin:20px;
			}
			td {
				border:1px solid black;
				padding:10px;
				text-align:center;				
			}
			#tb1 td{
				empty-cells:show;
			}
			#tb2 td {
				empty-cells:hide;
			}
		</style>
	</head>
	<body>		
		<table class="schedule" id="tb1">
			<caption>프로축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
				<td>TV 중계</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
				<td></td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
				<td></td>
			</tr>					
		</table>

		<table class="schedule" id="tb2">
			<caption>프로축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
				<td>TV 중계</td>
			</tr>
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
				<td></td>
			</tr>
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
				<td></td>
			</tr>
		</table>
	</body>
</html>

 아래 테이블은 empty-cells : hide; 를 통해 빈 셀을 표시하지 않았습니다.

width, height, padding 속성 : 표 너비, 높이, 패딩 지정하기

 앞에서 다뤘던 width, height, padding 속성을 이용하면 표의 너비와 높이, 패딩을 지정할 수 있습니다. 너비나 높이를 특별히 지정하지 않는다면 셀 안의 내용이 표시될 만큼만 표시됩니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.schedule {
				border-collapse:separate;
				margin:20px;
			}
			td {
				border:1px solid black;
				padding:10px;
				text-align:center;				
			}
			#tb1{
				width : 300px;
				padding : 10px;
			}
		</style>
	</head>
	<body>		
		<table class="schedule" id="tb1">
			<caption>프로축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>					
		</table>

		<table class="schedule" id="tb2">
			<caption>프로축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>
		</table>
	</body>
</html>

 첫 번째 테이블에는 width와 padding 속성 값을 적용해보았습니다.

table-layout 속성 : 콘텐츠에 맞게 셀 너비 지정하기

 table-layout 속성을 이용하면 셀 안의 내용 양에 따라 셀 너비를 변하게 할지, 고정시킬지를 결정할 수 있습니다.

 table-layout : fixed | auto

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			.table1 {
				border-collapse:collapse;
				width:300px;
				table-layout:fixed;
			}			
			.table1 td {
				width:150px;
				border:1px solid black;
				padding:5px;
			}
		</style>
	</head>
	<body>
		<h1>Table Layout</h1>
		<table border="1" class="table1">
			<tr>
				<td>
					한글로띄어쓰기없기길게붙여쓰기
				</td>
				<td>
					aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa			
				</td>
			</tr>
		</table>
	</body>
</html>

 table-layout 에 fixed를 적용하면 위와 같이 영문 같은 경우에는 너비를 넘어가는 내용이 표 밖으로 나가게 됩니다.

text-align 속성 : 셀 안에서 수평 정렬하기

text-align : left | right | center

 text-align 속성은 셀 안에서 텍스트의 수평 정렬 방법을 지정합니다.

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>표 스타일</title>
    <style>
			body{
				font-family:"맑은 고딕", "고딕", "굴림";
			}
			table {
				border-collapse:collapse;
				width:300px;
			}
			td {
				text-align : center;
				padding:10px;
			}
		</style>
	</head>
	<body>		
		<table border="1">
			<caption>프로축구 경기 일정</caption>
			<tr>
				<td>울산</td>
				<td>울산 vs 인천</td>
			</tr>		
			<tr>
				<td>부산</td>
				<td>부산 vs 대전</td>
			</tr>		
			<tr>
				<td>서울</td>
				<td>서울 vs 강원</td>
			</tr>		
		</table>
	</body>
</html>

vertical-align 속성 : 셀 안에서 수직 정렬하기

 vertical-align 속성은 수직 정렬 방법을 지정하는 속성이기 때문에 inline이나 inline-block으로 배치한 요소의 세로 정렬 방법으로 지정합니다.

vertical-align : baseline | top | bottom | middle | sub | super | text-top | text-bottom
                    | <길이값> | <백분율값>

<!DOCTYPE html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>Table CSS</title>
    <style>
			td {
				height:100px;
				padding:20px;
			}
			.va1 { vertical-align:top; }
			.va2 { vertical-align:bottom; }
			.va3 { vertical-align:middle; }
		</style>
	</head>
	<body>		
		<table border="1">
			<caption>vertical-alignment</caption>
			<tr>
				<td class="va1">alignment</td>
				<td class="va2">alignment</td>
				<td class="va3">alignment</td>
			</tr>
		</table>
	</body>
</html>


이상으로 표를 꾸미는데 필요한 여러 CSS 속성에 대한 포스팅을 마치겠습니다.

안녕하세요, 여행벌입니다.

오늘은 CSS를 이용해 브라우저 화면 안에 각 콘텐츠 영역을 어떻게 배치할지를 결정하는 CSS 포지셔닝에 대해서 포스팅해보겠습니다.


CSS포지셔닝

 CSS 포지셔닝이란 검색 창, 로그인 창, 광고, 뉴스 등 여러 요소를 적절히 배치하는 것을 말합니다. 즉, 웹 문서의 레이아웃을 만드는 과정을 CSS 포지셔닝이라고 합니다. 앞에서 배운 레이아웃 스타일 속성에 box-sizing 속성, float 속성, position 속성 등을 이용해서 CSS 포지셔닝을 할 수 있습니다. 같은 내용이더라도 배치를 어떻게 하고 어떤 배경과 색상을 사용할지에 따라 완전히 다른 사이트처럼 보일 수 있기 때문에 CSS 포지셔닝은 굉장히 중요한 작업입니다.

box-sizing 속성 : 박스 너비 기준 정하기

 box-sizing 속성을 이용하면 박스 모델의 너비 기준을 정할 수 있습니다. 보통 width, height 속성을 이용해서 콘텐츠 영역의 크기를 조절할 수 있는데, box-sizing 속성을 이용하면 콘텐츠 영역뿐만 아니라 테두리 영역, 패딩 영역도 포함해서 크기를 포함해서 너비를 지정할 수 있습니다.

box-sizing : content-box | border-box

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
    <style>
        .content-box{
            box-sizing : content-box;
            width : 200px;
            height : 100px;
            margin : 10px;
            padding : 30px;
            background-color : orange;
        }
        .border-box{
            box-sizing : border-box;
            width : 200px;
            height : 100px;
            margin : 10px;
            padding : 30px;
            background-color : yellow;
        }
    </style>
</head>
<body style="background-color : black;">
    <div class="content-box">content-box</div>
    <div class="border-box">border-box</div>
</body>
</html>

 div 박스에 동일한 width, height, margin, padding 속성을 부여하겠습니다. 그 후, 첫 번째 박스는 box-sizing : content-box, 두 번째 박스는 box-sizing : border-box 속성을 부여하겠습니다.

 결과는 다음과 같습니다. border-box는 padding, border 영역을 포함해서 width, height 속성을 적용하기 때문에 content 영역의 크기가 content-box에 비해 작은 것을 확인할 수 있습니다.

float 속성 : 왼쪽 혹은 오른쪽으로 배치하기

 float 속성은 문자 그대로 웹 요소를 "띄워줍니다." float 속성을 이용하면 기본적인 문서 배치의 흐름에서 벗어나 요소의 모서리가 페이지의 왼쪽이나 오른쪽으로 이동하는 것을 말합니다. 즉, 웹 요소를 문서의 왼쪽 구석이나 오른쪽 구석에 배치할 수 있게 만듭니다. float 속성을 이용하면 문서의 흐름과 관계없이 화면 배치를 유연하게 할 수 있습니다.

float : left | right | none

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
    <style>
        .left-box{
            float : left;
            width : 200px;
            height : 100px;
            background-color : orange;
        }
        .right-box{
            float : right;
            width : 200px;
            height : 100px;
            background-color : yellow;
        }
        .none-box{
            float : none;
            width : 200px;
            height : 100px;
            background-color : coral;
        }
    </style>
</head>
<body style="background-color : black;">
    <div class="left-box">left-box</div>
    <div class="right-box">right-box</div>
    <div class="none-box">none-box</div>
</body>
</html>

 같은 크기의 박스 모델 3개를 float : left, right, none 순으로 부여했습니다.

 float 속성을 이용하면 요소를 띄울 수 있기 때문에 left-box와 none-box가 겹쳐진 것을 확인할 수 있습니다.

clear 속성 : float 속성 해제하기

 float 속성을 이용해 웹 페이지 요소를 왼쪽이나 오른쪽에 배치하면 그 다음에 넣는 다른 요소들도 똑같은 속성이 전달됩니다. 따라서, float 속성이 더 이상 유용하기 않을 때에는 clear 속성을 이용해서 float 속성을 해제해줘야합니다.

clear : none | left | right | both

 float : left를 이용해 왼쪽으로 배치했다면 clear : left 로 종료하고, float : right 를 사용했다면 clear : right 를 사용해 무효화시킵니다. float 속성 값에 상관 없이 무조건 기본 상태로 되돌리고 싶다면 clear : both 라고 하면 됩니다.

<!doctype html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>박스모델</title>
	<style>
		div {
			padding:20px;
			margin:10px;
		}
		.box1{
			background:#ffd800;
			float:left;
		}
		.box2 {
			background: #0094ff;
			float:left;
		}
		.box3 {
			background: #00ff21;
			/* clear: both; */
		}
	</style>
</head>
<body>
	<div class="box1">박스1</div>
	<div class="box2">박스2</div>
	<div class="box3">박스3</div>
</body>
</html>

 float 속성에 의해 박스3 가 박스1, 박스2 아래로 놓이는 것을 볼 수 있습니다.

 clear 속성을 이용해 박스3에 float 속성을 무효화시켜보겠습니다.

<!doctype html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>박스모델</title>
	<style>
		div {
			padding:20px;
			margin:10px;
		}
		.box1{
			background:#ffd800;
			float:left;
		}
		.box2 {
			background: #0094ff;
			float:left;
		}
		.box3 {
			background: #00ff21;
			clear: both;
		}
	</style>
</head>
<body>
	<div class="box1">박스1</div>
	<div class="box2">박스2</div>
	<div class="box3">박스3</div>
</body>
</html>

position 속성 : 배치 방법 지정하기

 position 속성은 웹 문서 안이 요소들을 자유자재로 배치해 주는 속성입니다. position 속성을 이용하면 텍스트나 이미지를 나란히 배치할 수 있고, 여러 개의 요소를 가로나 세로로 원하는 위치에 배치할 수도 있습니다.

position : static | relative | absolute | fixed

 position 속성은 static을 제외한 나머지 속성 값에서는 좌표를 이용해 각 요소의 위치를 조절할 수 있습니다. top, bottom, left, right 로 지정하고 top이란 위쪽에서 얼마나 떨어져 있는지 bottom은 아래에서 얼마나 떨어져 있는지, left는 왼쪽에서 얼마나 떨어져 있는지, right는 오른쪽에서 얼마나 떨어져 있는지를 뜻합니다. 좌푯값은 양수와 음수 모두 사용할 수 있습니다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
    <style>
        .box1{
            float : left;
            width : 100px;
            background-color : yellow;
        }
        .box2{
            float : left;
            position : relative;
            width : 300px;
            background-color : orange;
        }
    </style>
</head>
<body style="background-color : black;">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</body>
</html>

 box1, box2 모두 float : left 를 적용했습니다. 하지만 box2에는 position : relative; 를 부여해 이전 요소에 자연스럽게 연결해 배치할 수 있습니다.

 box2에 left, top 속성을 적용해보겠습니다.

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
    <style>
        .box1{
            float : left;
            width : 100px;
            background-color : yellow;
        }
        .box2{
            float : left;
            position : relative;
            width : 300px;
            background-color : orange;
            left : 50px;
            top : 30px;
        }
    </style>
</head>
<body style="background-color : black;">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</body>
</html>

 다음과 같이 static 속성을 제외하고 top, left, right, bottom 을 이용해 원하는 곳에 요소를 배치할 수 있습니다.

 이번에는 absolute 속성을 이용해서 원하는 위치에 요소를 배치해보겠습니다.

<!doctype html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>CSS 포지셔닝</title>
	<style>
		#wrap{
			position:relative;
			width:300px;
			height:300px;
			border:1px solid #ccc;
		}
		.box{
			position:absolute;
			width:50px;
			height:50px;
			background:#0094ff;
		}
		#crd1 {
			top:0;
			left:0;
		}
		#crd2{
			top:0;
			right:0;
		}
		#crd3{
			bottom:0;
			left:0;
		}
		#crd4{
			bottom:0;
			right:0;
		}
		#crd5{
			top:100px;
			left:100px;
		}
	</style>
</head>
<body>
	<div id="wrap">
		<div class="box" id="crd1"></div>
		<div class="box" id="crd2"></div>
		<div class="box" id="crd3"></div>
		<div class="box" id="crd4"></div>
		<div class="box" id="crd5"></div>
	</div>
</body>
</html>

 div 박스를 5개 만들고, absolute 속성을 이용해 박스를 화면 곳곳에 배치해보겠습니다. crd1 박스는 top : 0, left : 0; 을 부여했으므로 왼쪽 위에 붙어있게 되고, crd2 박스는 top : 0, right : 0; 을 부여했으므로 오른쪽 위에 붙어있게 되고, crd3 박스는 bottom : 0, left : 0; 을 부여했으므로 왼쪽 아래에 붙어 있고, crd4 박스는 bottom : 0, right : 0; 이므로 오른쪽 아래에 붙어 있게 됩니다. 마지막으로 crd5 박스는 위로부터 100px, 왼쪽으로부터 100px 떨어져 있는데 wrap 박스의 크기가 width : 300px, height : 300px 이므로 중간에 떠있게 됩니다.

visibility 속성 : 요소를 보이게 하거나 보이지 않게 하기

 visibility 속성은 특정 요소를 화면에 보이게 하거나 보이지 않게 또는 겹치게 설정하는 속성입니다. display : none 속성과는 다르게 visibility 속성을 이용해 특정 요소를 화면에서 보이지 않게 하더라도 크기는 그대로 유지됩니다.

visibility : visible | hidden | collapse

 위의 예시를 그대로 가져와서 hidden 속성을 부여해보겠습니다.

<!doctype html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>CSS 포지셔닝</title>
	<style>
		#wrap{
			position:relative;
			width:300px;
			height:300px;
			border:1px solid #ccc;
		}
		.box{
			position:absolute;
			width:50px;
			height:50px;
			background:#0094ff;
		}
		#crd1 {
			top:0;
			left:0;
			visibility: hidden;
		}
		#crd2{
			top:0;
			right:0;
		}
		#crd3{
			bottom:0;
			left:0;
			visibility: hidden;
		}
		#crd4{
			bottom:0;
			right:0;
		}
		#crd5{
			top:100px;
			left:100px;
		}
	</style>
</head>
<body>
	<div id="wrap">
		<div class="box" id="crd1"></div>
		<div class="box" id="crd2"></div>
		<div class="box" id="crd3"></div>
		<div class="box" id="crd4"></div>
		<div class="box" id="crd5"></div>
	</div>
</body>
</html>

 hidden 속성을 이용해 crd1 박스와 crd3 박스를 화면에서 숨겨보겠습니다.

 하지만 개발자 모드를 통해서 보면 다음과 같이 crd1 박스와 crd3 박스가 자리를 차지하고 있는 것을 볼 수 있습니다.

z-index 속성 : 요소 쌓는 순서 정하기

 CSS에서 각 요소는 수평이나 수직으로 이동할 뿐만 아니라 한 요소 위에 다른 요소를 쌓을 수도 있습니다. 요소 위에 요소를 쌓을 때 쌓는 순서극 지정하는 것이 z-index 속성입니다. z-index 값이 작을수록 아래에 쌓이고 z-index 값이 클수록 위에 쌓입니다. z-index 값을 명시하지 않을 경우, 웹 문서에 맨 먼저 삽입하는 요소가 z-index : 1 값을 가지며 그 후에 삽입하는 요소들은 z-index 값이 점점 커집니다.

z-index : <숫자>;
<!doctype html>
<html lang="ko">
	<head>
		<meta charset="utf-8">
		<title>z-index 속성</title>
		<style>
			div#wrapper {
				position: relative;
			}
			div#box {
				position:absolute;
				width:100px;
				height:100px;
				border:1px solid black;
				font-size:26px;
			}
			.b1 {				
				left:50px;
				top:50px;
				background:#ff0000;
				z-index:1;
			}
			.b2 {				
				left:110px;
				top:70px;
				background:#ffd800;
				z-index:3;
			}
			.b3 {
				left:70px;
				top:110px;
				background:#0094ff;
				z-index:1;
			}
		</style>
	</head>
	<body>
		<div id="wrapper">
			<div id="box" class="b1">1</div>
			<div id="box" class="b2">2</div>
			<div id="box" class="b3">3</div>
		</div>
	</body>
</html>

 2번 박스가 z-index 값이 가장 크므로 제일 위에 쌓인 것을 확인할 수 있습니다. 1번, 3번 박스는 z-index 값이 같지만 1번 요소가 코드 상으로 먼저 웹 문서에 적용되므로 아래에 쌓인 것을 확인할 수 있습니다.


오늘 배운 CSS 속성들은 저번 레이아웃을 위한 스타일 포스팅과 더불어

웹 개발에서 꼭 사용되는 중요한 속성들입니다.

안녕하세요, 여행벌입니다.

오늘은 배경 색, 배경 이미지 등 배경 스타일을 위한 속성들에 대해서 포스팅해보겠습니다.


background-color 속성 : 배경 색 지정하기

 background-color 속성을 이용하면 배경 색을 지정할 수 있습니다. 웹 문서 전체의 배경 색을 지정하려면 body 태그에 background-color 속성을 조절하면 됩니다. 16진수 표기법, rgb 표기법 등으로 색상을 표현하면 됩니다.

background-color : <색상>

 스타일 상속에 의해 <body> 태그 선택자에서 속성을 적용하면 문서 전체에 상속되므로 하위 요소에서 스타일을 수정하지 않는 한, 문서 전체에 똑같이 적용됩니다. 하지만 background-color 속성은 상속되지 않습니다. 따라서, 내가 원하는 요소에 직접 background-color 속성을 이용해 배경 색 값을 지정해야 합니다.

background-clip 속성 : 배경 적용 범위 조절하기

 박스 모델 관점에서 배경 적용 범위를 조절할 수도 있습니다. 즉, 박스 모델의 가장 외곽인 테두리(border)까지 적용할지, 테두리를 빼고 패딩(padding) 범위까지 적용할지, 아니면 내용(content) 부분에만 적용할지 background-clip 속성을 이용해서 조절할 수 있습니다.

background-clip : border-box | padding-box | content-box

background-image 속성 : 웹 요소에 배경 이미지 넣기

 background-image 속성을 이용하면 배경에 이미지를 넣을 수 있습니다. 'url(파일경로)' 형식으로 지정해야하고, 'http://'로 시작하는 절대 경로를 사용할 수도 있습니다.

background-image : url(파일 경로)

 배경 이미지는 여러 개를 사용할 수 있는데, 첫 번째 이미지부터 순서대로 표시합니다. 또, 이미지가 채우려는 요소 크기보다 작을 경우, 해당 요소를 가득 채울 정도로 가로와 세로로 반복됩니다.

background-repeat 속성 : 배경 이미지 반복 방법 지정하기

 이미지가 채우려는 요소 크기보다 작을 경우, 해당 요소를 이미지가 반복되며 가득 채웁니다. 이때, 어떤 방법으로 가득 채울지 background-repeat 속성을 이용해 지정할 수 있습니다.

background-repeat : repeat | repeat-x | repeat-y | no-repeat

background-size 속성 : 배경 이미지 크기 조절하기

 background-size 속성을 사용하면 배경 이미지를 여러 크기로 조절할 수 있습니다. 물론 무리하게 배경 이미지를 키우면 화질이 깨집니다.

background-size : auto | contain | cover | <크기 값> | <백분율>

background-position 속성 : 배경 이미지 위치 조절하기

 배경 이미지는 제목이나 본문에서 한쪽에 이미지를 표시할 때도 이용할 수 있습니다. 이때, background-position 속성을 이용하면 원하는 위치로 배경 이미지를 조절할 수 있습니다.

background-position : <수평 위치> <수직 위치>;

수평 위치 : left | center | right | <백분율> | <길이 값>

수직 위치 : top | center | bottom | <백분율> | <길이 값>

 background-position 속성에서는 수평 위치 값과 수직 위치 값을 함께 표시하는데 값을 하나만 지정할 경우, 그 값은 수평 위치 값으로 간주하고 수직 위치 값은 50%나 center로 적용됩니다.

background-origitn 속성 : 배경 이미지 배치할 기준 조절하기

 background-origin 속성을 이용하면 배경 이미지를 배치하는 기준을 정할 수 있습니다. 테두리(border)를 기준으로 이미지를 배치할지, 패딩(padding)을 기준으로 이미지를 배치할지, 내용(content)을 기준으로 이미지를 배치할지 정합니다.

background-origin : border-box | padding-box | content-box

background-attachment 속성 : 배경 이미지 고정하기

 background-attachment 속성을 적용하면 스크롤을 내렸을 때 배경 이미지도 같이 이동할지, 아니면 배경 이미지는 고정하고 화면만 내려갈지 정할 수 있습니다.

background-attachment : scroll | fixed


 

안녕하세요, 여행벌입니다.

오늘은 박스 모델의 콘텐츠 영역, 패딩, 마진의 개념과 스타일을 적용하는 법, display 속성에 대해서 포스팅해보겠습니다. 지금까지 HTML5+CSS3 포스팅 중 가장 중요한 속성들입니다.


박스 모델 - 콘텐츠 영역, 패딩 영역, 테두리 영역, 마진 영역

 박스 모델이란 블록 레벨 요소들의 형태를 말합니다. 즉, 혼자 한 줄을 차지하는 요소들을 박스 모델이라고 합니다. 박스 모델의 세부 영역은 아래 그림과 같이 콘텐츠 영역, 패딩 영역, 테두리 영역, 마진 영역으로 크게 4개의 영역으로 나뉩니다.

● 마진은 테두리 영역 밖인 외부 여백을 뜻하고, 패딩은 내부 영역을 뜻합니다. 마진을 통해 다른 박스 모델들과의 거리를 조절할 수 있고, 패딩을 통해 콘텐츠 영역과 박스 모델의 테두리와의 거리를 조절 할 수 있습니다.

콘텐츠 영역은 말 그대로 실제 내용이 담겨 있는 영역을 뜻합니다.

● 실제 박스가 차지하는 너비는 콘텐츠 영역과 패딩 영역, 마진 영역을 모두 더한 것을 뜻합니다. 즉 width와 좌우 패딩 두께, 좌우 마진 두께를 합쳐서 계산합니다. 높이도 마찬가지입니다.

width, height 속성 : 콘텐츠 영역의 크기

 width, height 속성을 통해 콘텐츠 영역의 크기를 지정해 줄 수 있습니다. width 속성은 콘텐츠 영역의 너비를 조절하고, height 속성은 콘텐츠 영역의 높이를 조절합니다.

width : <크기> | 백분율 | auto

height : <크기> | 백분율 | auto

margin 속성 : 요소 주변 여백 설정하기

 margin 속성을 통해서 마진 영역의 크기를 조절할 수 있습니다. 4방향으로 top, bottom, right, left 로 나눠서 영역의 크기를 조절할 수 있습니다.

margin-top : <크기> | <백분율> | auto

margin-right : <크기> | <백분율> | auto

margin-bottom  : <크기> | <백분율> | auto

margin-left : <크기> | <백분율> | auto

margin : <크기> | <백분율> | auto

 속성은 top, bottom, right, left 나눠서 적용할 수도 있고 margin 속성을 이용해 한 번에 적용할 수도 있습니다. margin 속성에 값을 하나만 준다면 네 방향에 모두 적용되고, 값이 2개라면 첫 번째 값은 top, bottom에 두 번째 값은 left, right 에 적용이 됩니다. 값이 4개라면 각각 top, right, bottom, left(시계방향) 순으로 값을 부여합니다.

margin: 30px 50px 40px 70px; 

 위의 코드는 아래 코드와 동일하게 작용합니다.

margin-top : 30px;
margin-right : 50px;
margin-bottom : 40px;
margin-left : 70px;

padding 속성 : 콘텐츠 영역과 테두리 사이 여백 설정하기

 패딩(padding) 이란 콘텐츠 영역과 테두리 사이의 여백을 말합니다. 즉, 테두리 안쪽의 여백입니다. 마진과 마찬가지로 top, bottom, right, left 4개로 나눠서 표현하고 margin과 속성을 부여하는 법이 동일합니다.

padding-top : <크기> | <백분율> | auto

padding-right : <크기> | <백분율> | auto

padding-bottom  : <크기> | <백분율> | auto

padding-left : <크기> | <백분율> | auto

padding : <크기> | <백분율> | auto

border-style 속성 : 테두리 스타일 지정하기

 border-style 속성을 이용하면 테두리 영역의 선 스타일을 지정할 수 있습니다. 기본 값이 none 이기 때문에 테두리 스타일을 지정하지 않으면 테두리 색상이나 두께를 지정하더라도 화면에 표시되지 않습니다.

border-style : none | hidden | dashed | dotted | double | groove | inset | outset | ridge | solid

 다양한 스타일들을 지원해주고, 보통 solid 를 가장 많이 사용하는 것 같습니다.

border-width 속성 : 테두리 두께 지정하기

 border-width 속성을 이용하면 테두리의 두께를 지정할 수 있습니다. 테두리 스타일을 적용하였더라도, 테두리 두께가 없다면 화면에 테두리가 나타나지 않습니다.

border-top-width : <크기> | thin | medium | thick

border-right-width : <크기> | thin | medium | thick

border-bottom-width : <크기> | thin | medium | thick

border-left-width : <크기> | thin | medium | thick

border-width : <크기> | thin | medium | thick

 margin, padding 과 마찬가지로 border-width 속성도 top, bottom, right, left 로 구분해서 속성을 적용할 수 있고, border-width 를 통해 한 번에 적용할 수도 있습니다.

border-color 속성 : 테두리 색상 지정하기

 border-color 속성을 적용하면 테두리에 색상을 지정할 수 있습니다. 마찬가지로, top, bottom, right, left로 구분해서 속성을 적용할 수 있고, 한 번에 적용할 수도 있습니다.

border-top-color : <색상>

border-right-color : <색상>

border-bottom-color : <색상>

border-left-color : <색상>

border-color : <색상>

border 속성 : 테두리 스타일 묶어 지정하기

 방금 위에서 다룬 border-width, border-color, border-style 은 결국 테두리를 만들기 위해 기본적으로 사용해야 되는 속성들입니다. 따라서, border 속성을 통해 두께, 색상, 스타일을 한 번에 적용할 수 있게 지원해주고 있습니다.

border-top : <두께> | <색상> | <스타일>

border-right : <두께> | <색상> | <스타일>

border-bottom : <두께> | <색상> | <스타일>

border-left : <두께> | <색상> | <스타일>

border : <두께> | <색상> | <스타일>

 테두리를 모든 방향에 파란색으로 1px 두께로 실선으로 설정하고 싶으면 아래와 같이 속성을 적용하면 됩니다.

border : 1px blue solid;

 또, 다음과 같이 두께와 스타일만 지정하면 기본적으로 검은색 색상이 적용됩니다.

border : 1px solid;

border-radius 속성 : 박스 모서리 둥글게 만들기

 border-radius 속성을 이용하면 박스 모서리를 둥글게 만들 수 있습니다. 둥글게 만들고 싶은 박스 모서리의 두 방향과 반지름을 뜻하는 radius를 사용해 속성을 표기합니다.

border-top-left-radius : <크기> | <백분율>

border-top-right-radius : <크기> | <백분율>

border-bottom-right-radius : <크기> | <백분율>

border-bottom-left-radius : <크기> | <백분율>

border-radius:<크기>|백분율

 border-radius 속성을 이용하면 왼쪽 위, 오른쪽 위, 오른쪽 아래, 왼쪽 아래 순으로 모서리에 속성을 적용할 수 있습니다.

display 속성 : 화면 배치 방법 결정하기

 display 속성은 해당 요소가 화면에 어떻게 보일지 지정할 때 사용합니다. display 속성을 사용하면 블록 레벨 요소를 인라인 레벨 요소로 바꾸거나, 인라인 레벨 요소를 블록 레벨 요소로 바꿀 수 있습니다. 블록 레벨 요소인 div만을 이용해서 웹 문서의 레이아웃을 구현할 수 있는 이유입니다.

display : none | block | inline | inline-block | inherit | table | inlien-table | table- row |
            table-row-group | table-header-group | table-footer-group | table-column |
            table-column-group | table-cell | table-caption | list-item 

● display : block; 속성은 이름 그대로 요소를 블록 레벨 요소로 바꿔줍니다.

 display : inline; 속성도 이름 그대로 요소를 인라인 레벨 요소로 바꿔줍니다.

 display : inline-block; 속성은 굉장히 자주 사용되는 속성으로 인라인 레벨로 배치를 하면서, 내용에는 블록 레벨 속성을 지정해 너비나 높이, 마진 같은 박스 모델 값을 적용할 수 있게 해 줍니다.

 dispaly : none; 속성은 해당 요소를 화면에 아예 표시하지 않습니다. 화면에서 감추는 게 아니라 공간조차 차지하지 않게 없애버립니다. PC용 화면에서는 표시하지만 모바일 화면에서는 표시하고 싶지 않은 부분을 처리할 때 자주 이용합니다.

 display : list-item; 속성은 <li> 태그 같은 List 계열을 뜻합니다. <li> 태그 같은 경우는 기본적으로 블록 레벨의 요소들처럼 작동하지만, 추가적으로 list-item 속성으로 list-style 계열의 CSS 속성을 이용할 수 있습니다.

 display : inherit; 속성은 부모 요소의 display 속성을 그대로 따르게 됩니다.

● Table 관련 display 속성

- <table> 태그와 그 부속 태그에서 사용되는 값들로, table 계열의 CSS 속성을 적용할 수 있습니다.


오늘 배운 속성들은 정말 자주 사용되고 개인적인 생각으로는 CSS 속성 중 가장 중요하다고 생각합니다!

이상으로 포스팅을 마치도록 하겠습니다 :)

+ Recent posts