
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.parent {
width: 500px;
height: 300px;
background: lightgray;
}
.child {
width: 50%; /* 부모 너비의 50% */
height: 50%; /* 부모 높이의 50% */
background: blue;
}
</style>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
vh : 브라우저 화면(Viewport) 높이의 비율
(100vh = 브라우저 창 높이의 100%)
vw : 브라우저 화면(Viewport) 너비의 비율
(100vw = 브라우저 창 너비의 100%)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.fullscreen {
width: 100vw; /* 브라우저 너비의 100% */
height: 100vh; /* 화면 높이의 100% */
background: lightblue;
}
</style>
</head>
<body>
<div class="fullscreen">전체 화면 높이</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.parent {
font-size: 20px;
}
.child {
font-size: 1.5em; /* 부모의 1.5배 */
}
</style>
</head>
<body>
<div class="parent">
부모 (20px)
<div class="child">자식 (30px)</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
html {
font-size: 16px;
}
.text {
font-size: 2rem; /* 2 × 16px = 32px */
}
</style>
</head>
<body>
<p class="text">이 텍스트는 32px</p>
</body>
</html>
block (블록 요소)
: 한 줄 전체를 차지하며 자동 줄바꿈이 발생한다.
: width, height, margin, padding 모두 정상적으로 적용된다.
: <div>, <p>,<h1>~<h6>, <section>, <article>, <footer>, <header>
inline (인라인 요소)
: 내용 크기만큼만 차지하며 줄바꿈이 일어나지 않는다.
: width, height가 적용되지 않고 margin, padding도 좌우만 적용된다.
: <span>, <a>, <strong>, <em>, <label>
inline-block (인라인 블록 요소)
: inline처럼 옆으로 배치되지만 block처럼 width, height, margin, padding 적용 가능하다.
: <img>, <button>, <input>
둘 다 요소를 보이지 않게 하는 역할을 하며 이벤트에 반응하지 않는다.
하지만 display:none;은 공간 자체가 사라지고 visibility:none;은 공간은 유지된다.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>우리나라 만세t</title>
<style>
div {
display: inline-block;
width: 200px;
height: 100px;
text-align: center;
background: #ccc;
}
div:nth-child(1) {
opacity: 1;
}
div:nth-child(2) {
opacity: 0.7;
}
div:nth-child(3) {
opacity: 0.4;
}
</style>
</head>
<body>
<div>우리나라 만세!!</div>
<div> 대한민국 만세!!</div>
<div>KOREA FIGHTING!!</div>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>menu</title>
<style>
#wrapper {
width : 760px;
height : 80px;
display: flex;
justify-content: center; /* 가로 중앙 정렬 */
gap: 10px; /* 메뉴들 사이 간격 */
padding: 10px 0; /* 위아래 여백 */
margin: 0 auto;
border: 1px solid #ccc;
}
#wrapper > div{
width: 100px;
height: 60px;
line-height: 60px;
border-top: 1px solid #ccc;
border-bottom : 1px solid #ccc;;
padding: 10px 20px; /* 내부 여백 */
text-align: center;
}
a {
text-decoration: none;
color: inherit;
font-size: 1.5em;
}
</style>
</head>
<body>
<div id = "wrapper">
<div><a href="#">menu1</a></div>
<div><a href="#">menu2</a></div>
<div><a href="#">menu3</a></div>
<div><a href="#">menu4</a></div>
<div><a href="#">menu5</a></div>
</div>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div {
width: 800px;
margin: 0 auto;
border: 1px solid #ccc;
padding: 10px;
}
div p:nth-child(1) {
width: 800px;
height: 120px;
line-height: 120ox;
text-align: center;
font-size: 2em;
text-decoration: underline;
}
div p:nth-child(2) {
font-size: 1.2em;
text-align: left;
}
div p:nth-child(4) {
text-align: right;
font-size: 1.2em;
padding-right: 10px;
}
div p:nth-child(6) {
height: 50px;
line-height: 50px;
text-align: center;
font-size: 1.5em;
}
div p:nth-child(6) a {
text-decoration: none;
}
</style>
</head>
<body>
<div>
<p>HTML5, CSS3 Document</p>
<p>To. all member</p>
<p>html5, CSS3 study is very easy html5, CSS3 study is very easy html5, CSS3 study is very easy</p>
<p>From. SBA</p>
<hr />
<p><a href="http://sba.seoul.kr/" target="_blank">서울산업진흥원</a></p>
</div>
</body>
</html>
마진은 요소 크기에 영향을 주지 않고 바깥쪽 여백을 조절한다.
패딩은 요소의 내부에서 콘텐츠와 테두리 간격을 조절하여 안쪽 여백을 조절한다.
마진과 달리 요소의 크기가 기본적으로 늘어난다.
html 요소들은 기본적으로 하나의 박스 형태로 구성되며 이 박스를 이루는 4가지 요소를 정의한 개념이다.

.box {
width: 200px;
height: 100px;
padding: 20px;
border: 10px solid black;
box-sizing: content-box; /* 기본값 */
}
총 너비 = 200px (content) + 20px × 2 (padding) + 10px × 2 (border)
= 260px
총 높이 = 100px (content) + 20px × 2 (padding) + 10px × 2 (border)
= 160px
.box {
width: 200px;
height: 100px;
padding: 20px;
border: 10px solid black;
box-sizing: border-box; /* 패딩 & 테두리 포함한 크기 유지 */
}
총 너비 = 200px (content + padding + border 포함, 고정)
총 높이 = 100px (content + padding + border 포함, 고정)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#wrapper {
width: 960px;
margin: 0 auto;
border: 1px solid black;
margin-top: 50px;
}
header {
background-color: #066cfa;
width: 960px;
height: 120px;
text-align: center;
line-height: 120px;
}
.header-text {
font-size: 40px;
color: white;
text-align: center;
line-height: 120px;
margin: 0;
padding: 0;
}
.content {
float: left;
width: 60%;
height: 400px;
background-color: #ffd800;
}
.right-side {
float: right;
width: 40%;
height: 400px;
background-color: #00ff90;
}
footer {
clear: both;
background-color: #c3590a;
height: 120px;
}
</style>
</head>
<body>
<div id = "wrapper">
<header>
<h1 class = "header-text">고정 그리드 레이아웃</h1>
</header>
<section class = "content">
<h4>본문</h4>
</section>
<aside class = "right-side">
<h4>사이드바</h4>
</aside>
<footer>
<h4>푸터</h4>
</footer>
</div>
</body>
</html>
#wrap #content1 p : nth-child(2n) {
background-color : #ffffdf;
}
#wrap #content1 p:nth-child(2n) {
background-color : #ffffdf;
}
첫번째 코드를 치니까 내가 원하는대로 나오지 않았다.
이유는 : 앞의 띄어쓰기 때문이었다.
띄어쓰기를하면 p 내부의 자식 요소 중 짝수 번째 요소를 선택하는 의미가 된다.
하지만 p 태그 자체를 선택하는 게 아니라 p 안에 있는 요소들 중에서 짝수 번째 요소가 선택되기 때문에 원하는 배경색이 적용되지 않는 것이다.
너무 따닥따닥 붙어있으면 잘 안 보여서 띄어쓰기를 자주 하는 편인데 css에선 조심해야 겠다.
코드를 짜거나 복붙... 하다보면 이게 뭐지? 싶은 코드들이 있다.
찾아봐도 금방 까먹길래 아예 정리를 했다.
justify-content는 Flexbox나 Grid에서 가로(수평) 정렬을 결정하는 속성이다.
justify-content 뒤엔 다음과 같은 값들이 올 수 있다. ↓
flex-start : 왼쪽 정렬 (기본값)
flex-end : 오른쪽 정렬
center : 가로 중앙 정렬
space-between : 양쪽 끝에 정렬하고 요소들 사이 간격을 최대한 넓힘
space-around : 요소들 사이와 양쪽 끝에 동일한 여백을 줌 (양쪽 끝 여백이 내부보다 작음)
space-evenly : 요소들 사이와 양쪽 끝에 동일한 간격을 줌
요소의 크기를 초과하는 내용(텍스트, 이미지 등)이 보이지 않도록 숨기는 속성이다.
overflow 뒤에 사용할 수 있는 값은 다음과 같다. ↓
visible : 내용이 넘쳐도 그대로 표시됨 (기본값)
hidden : 넘치는 부분을 숨김
scroll : 넘치는 경우 스크롤이 생김
auto : 필요할 때만 스크롤이 생김
align-items: center;
: Flexbox에서 요소를 세로 중앙 정렬한다.
: display: flex;가 적용된 부모 요소의 자식 요소에 적용
text-align: center;
: 텍스트를 가로 중앙 정렬한다.
: inline, inline-block 요소의 텍스트에 적용
둘 다 중앙 정렬이지만 정렬하는 방향(축)이 다르다.
padding : 안쪽 여백 (콘텐츠와 테두리 사이 간격)
margin : 바깥 여백 (다른 요소와의 간격 조절)
gap : Flex / Grid 내부 요소들 사이의 거리 (자식 요소들 사이의 간격)
nth-child(n) : 전체 자식 요소 중에서 n번째 요소
모든 자식 요소를 포함해서 순서를 계산하는데 태그 종류와 상관없이 <br>, <hr> 모두 하나로 계산한다.
ex) .container p:nth-child(2) 는 ".container"의 자식 요소 중 두 번째 요소가 <p>라면 선택한다는 뜻이다.
nth-of-type : 같은 태그 중에서 n번째 요소
ex) .container p:nth-of-type(2) 는 ".container"의 자식 요소 중 <p>만 따져서 두 번째로 나온 걸 선택한다는 뜻이다.
어제 nth-child를 강사님이 사용하시는 걸 보고 따라 쓰고 있었는데 앗? 내 맘대로 결과가 나오지 않았다...
생각해보니 예전에도 그래서 nth-of-type만 주구장창 썼던 것 같다.
둘 다 특정 요소를 선택할 때 사용하는 CSS 선택자라서 헷갈렸나보다.
1) class
: 여러 요소에 공통된 스타일 또는 기능을 적용할 때 사용한다.
: 같은 class를 여러 개의 요소에서 재사용 가능하다.
: 여러 개의 요소에 동일한 스타일이나 동작을 적용하고 싶을 때 사용한다.
: CSS에서 .으로 선택한다.
2) id
: 특정한 단 하나의 요소를 구분할 때 사용한다.
: 한 페이지에서 같은 id를 중복 사용하면 안된다.
: Javascript에서 특정 요소를 조작할 때 자주 사용된다.
: 유일한 요소를 구분할 때 사용된다.
: CSS에서 #으로 선택한다.
3) 시멘틱 태그
: HTML 문서의 구조를 더 의미있게 만들기 위한 태그이다.
: 검색 엔진과 접근성 향상에 도움이 된다.
: 의미만을 제공하며 CSS 스타일링을 위해 class나 id를 추가로 사용 가능하다.
: CSS에서 태그 이름만 사용하면 된다.
이 세가지 모두 html 태그에서 특정 부분을 정해주는 역할을 하는 거 같은데 언제 어떤 걸 쓰는지 어떤 차이가 있는지 궁금했다.
3줄 요약:
1.Float 은 3차원 개념이고, 집나간 토끼는 부모에서 overflow:hidden 으로 잡아 들인다.
2.Display 속성에는 inline block inline-block 속성이 있다.
3.패딩은 내부 여백이고 마진은 외부여백이다.