margin
<div id="div1">박스 모델</div>
#div1 {
background-color: goldenrod;
width: 300px; height: 300px;
border: 15px solid navy;
margin: 20px;
}

현재 태그를 바깥으로 얼마나 밀어낼 것인가
border 있으면 border 기준으로
margin: 숫자 하나면 상하좌우 전부
#div1 {
background-color: goldenrod;
width: 300px; height: 300px;
border: 15px solid navy;
margin: 50px 0 0 0;
}
margin 숫자 4개 : 위 오른쪽 아래 왼쪽으로 숫자만큼
#div1 {
background-color: goldenrod;
width: 300px; height: 300px;
border: 15px solid navy;
/* margin: 50px 0 0 0; */
margin: 25px 100px;
}
margin 숫자 2개 : (위 아래) (왼쪽 오른쪽)
margin-top, margin-bottom, margin-left, margin-right으로 하나씩 지정할 수도 있음
margin: auto
<div id="div2"></div>
<div id="div3">
<div></div>
</div>
#div2 {width: 100px; height: 100px; background-color: red; margin: auto;}
#div3 {width: 200px; height: 200px; background-color: green;}
#div3 > div {width: 50px; height: 50px; background-color: gold;}

상위 태그가 포함된 넓이의 중앙에 오도록 한다.
#div3 > div {margin: auto; width: 50px ; height: 50px; background-color: gold;}

margin : 0px auto
위 아래 띄우지 않고 좌우만 가운데로
인라인에서의 margin
<span id="span">span</span>
#span {background-color: gold; width: 200px; margin: auto;
text-align: right; display: block;
}
display: block;으로 블럭처리를 하면 적용됨

padding
안쪽에서 얼마나 밀어낼 것인가
#div1 {
background-color: goldenrod;
width: 300px; height: 300px;
border: 15px solid navy;
/* margin: 50px 0 0 0; */
margin: 25px 100px;
padding: 100px;
}

padding-top, padding-bottom ... 으로 각각 지정할 수도 있음
inline-block과 \n에 따른 결과
<div id="div4">
<div>1</div><div>2</div>
<div>3</div>
</div>
#div4 {
border: 5px solid; width: 300px; height: 200px;
}
#div4 div {
display: inline-block; width: 90px; height: 100px; background-color: red;
}

- <div>끼리 \n이 없으면 1과 2처럼 붙는다
- inline-block이면 가로로 정렬 가능
- inline으로 설정 주면 text 크기만큼으로 가로로 정렬됨
<div id="div4">
<div>1</div><div>2</div><div>3</div>
</div>
#div4 {
border: 5px solid; width: 300px; height: 200px;
}
#div4 div {
display: inline-block; width: 95px; height: 100px; background-color: red;
margin-right: 7.5px;
}
#div4 div:nth-of-type(3){
margin-right: 0;
background-color: aqua;
}

i의 배수 번째 태그만 따로 설정
<div id="div4">
<div>1</div><div>2</div><div>3</div><div>11</div><div>22</div><div>33</div>
</div>
#div4 {
border: 5px solid; width: 300px; height: 200px;
}
#div4 div {
display: inline-block; width: 95px; height: 100px; background-color: red;
margin-right: 7.5px;
}
/* #div4 div:nth-of-type(3){
margin-right: 0;
background-color: aqua;
} */
#div4 div:nth-child(3n){
margin-right: 0;
}
:nth-child(3n) : 3의 배수 번째 div는 margin-right을 0으로 설정한다

background-image
image를 배경으로 함
<div id="div1">
<div>
GOOD LUCK
</div>
</div>
#div1 {
width: 1200px; height: 1200px;
border: 1px solid;
background-image: url("image03.jpg");
}
#div1:hover {
background-image: url("image01.jpg");
color: red;
}
#div1 div {
width: 50px; height: 50px;
}
이미지보다 div크기가 훨씬 크면 반복됨

#div1 {
width: 1200px; height: 1200px;
border: 1px solid;
background-image: url("image03.jpg");
background-repeat: no-repeat;
background-size: 300px 300px; /* 가로 세로 */
background-position: 50px 100px; /* 위 왼 */
}
- background-repeat : no-repeat으로 반복을 제거할 수 있다.
- background-size : 이미지 크기
- background-position : 이미지 위치

display: flex
<div id="div1">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
#div1 {
display: flex;
width: 300px; background-color: gray;
}
#div1 div { width: 100px;}
#div1 :nth-of-type(1) { background-color: aqua;}
#div1 :nth-of-type(2) { background-color: blue;}
#div1 :nth-of-type(3) { background-color: brown;}

- 자식이 inline block처럼 된다
- <div>가 \n으로 분리되어 있어도 div끼리 여백 발생하지 않는다
flex 속성 알아보기
<div id="div2">
<div>
<div>1-1</div>
<div>1-2</div>
</div>
<div>
<div>2-1</div>
<div>2-2</div>
</div>
</div>
#div2 {
width: 300px; border: 1px solid; display: flex;
}
#div2 > div {
width: 150px; border: 1px solid greenyellow;
}
#div2 > :nth-of-type(2) {
display: flex;
& div {width: 50%; border: 1px solid;}
}

- 부모 div가 flex라면 직속 자식이 inline-block처럼 된다.
order
#div1 :nth-of-type(1) { order: 3; background-color: aqua;}
#div1 :nth-of-type(2) { order: 2; background-color: blue;}
#div1 :nth-of-type(3) { order: 1; background-color: brown;}

순서가 바뀌게 된다.
nav
ul
<nav id="nav">
<ul>
<li>목록1</li>
<li>목록2</li>
<li>목록3</li>
<li>목록4</li>
</ul>
#nav {width: 300px; background-color: antiquewhite;}
#nav > ul {
display: flex; background-color: orange; list-style-type: none; padding: 0;
/* flex-direction: row; */
}
#nav > ul > li {border: 1px solid; width: 100px;}
- list-style-type: none; : ul의 li 점 없애기
- display: flex; : ul 리스트 가로로 정렬
- padding:0 ; : ul의 경우 패딩 있어서 없애줘야 함
- display: flex; : 부모 width가 300px이고, li 하나 당 100px로 해도 초과 되는 것 없이 부모 width를 갖게 된다. (자동 축소)

#nav {width: 300px; background-color: antiquewhite;}
#nav > ul {
display: flex; background-color: orange; list-style-type: none; padding: 0;
flex-wrap: wrap;
/* flex-direction: row; */
}
#nav > ul > li {border: 1px solid; width: 100px;}
- flex-wrap: wrap; 자식 길이를 보장(그래서 줄이 내려가진다)
- flex-direction: row(column); 가로나 세로로 정렬

#nav {width: 700px; background-color: antiquewhite;}
#nav > ul {
display: flex; background-color: orange; list-style-type: none; padding: 0;
flex-wrap: wrap; height: 100px; align-items: center;
/* flex-direction: row; */
}
#nav > ul > li {border: 1px solid; width: 100px;}
- align-items: center; 안의 요소를 가운데로 정렬한다(위아래)

#nav > ul > li {border: 1px solid; width: 100px;
height: 50px;
line-height: 50px;
}
- line-height : 50px; li와 높이를 같게 주면, 가운데로 정렬이 된다

justify-content
#nav > ul {
display: flex; background-color: orange; list-style-type: none; padding: 0;
flex-wrap: wrap; height: 100px; align-items: center;
justify-content: space-around;
/* flex-direction: row; */
}

#nav > ul {
display: flex; background-color: orange; list-style-type: none; padding: 0;
flex-wrap: wrap; height: 100px; align-items: center;
justify-content: center;
/* flex-direction: row; */
}

nav 예시
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ex10</title>
<link href="ex10.css" rel="stylesheet" type="text/css">
</head>
<body>
<nav id="nav">
<ul>
<li><a href="#">목록1</a></li>
<li><a href="#">목록2</a></li>
<li><a href="#">목록3</a></li>
<li><a href="#">목록4</a></li>
</ul>
</nav>
</body>
</html>
#nav {width: 700px; background-color: antiquewhite;}
#nav > ul {
display: flex; background-color: orange; list-style-type: none; padding: 0;
flex-wrap: wrap; height: 100px; align-items: center;
justify-content: space-around;
/* flex-direction: row; */
}
#nav > ul > li {border: 1px solid; width: 100px;
height: 50px;
line-height: 50px;
text-align: center;
}
a {
text-decoration: none; color: white;
&:hover{
border-bottom: 3px solid olive;
padding-bottom: 5px;
color: black;
transition: 0.25s;
}
}

'IBM AI Agent 3기 > Frontend' 카테고리의 다른 글
| CSS 알아보기(1) (0) | 2025.12.17 |
|---|---|
| HTML 알아보기(2) (0) | 2025.12.16 |
| HTML 알아보기(1) (1) | 2025.12.15 |