CSS 8일차 overflow/플렉스 박스 레이아웃(Flexbox)/그리드 레이아웃
2025. 12. 16. 17:17ㆍ대우개발원 수업 내용/css로 웹 페이지 꾸미기
반응형
7.1 플렉스 박스 레이아웃으로 1차원 레이아웃 설계하기
1. 플렉스 박스 레이아웃 개요
플렉스 박스(Flexbox)란
- 1차원 레이아웃을 설계하기 위한 CSS 레이아웃 방식
- 한 방향(가로 또는 세로)으로 요소를 정렬하고 배치하는 데 최적화됨
플렉스 박스의 구성 요소
- 주축 (main axis)
플렉스 아이템이 배치되는 기본 진행 방향의 축 - 교차축 (cross axis)
주축과 수직인 방향의 축 - 플렉스 컨테이너 (flex container)
display: flex 또는 display: inline-flex가 적용된 부모 요소 - 플렉스 아이템 (flex item)
플렉스 컨테이너의 직계 자식 요소
레이아웃 확인 방법
- 브라우저 개발자 도구
Elements 탭 → flex 아이콘 클릭 → 축 방향 및 정렬 상태 시각적으로 확인 가능
2. 플렉스 박스 레이아웃의 기본 속성
2-1. display 속성
- 요소를 플렉스 컨테이너로 지정
형식
display: flex;
display: inline-flex;
- flex : 블록 레벨 플렉스 컨테이너
- inline-flex : 인라인 레벨 플렉스 컨테이너
2-2. flex-direction
- 주축의 방향을 지정
형식
flex-direction: <속성값>;
속성값
- row : 왼쪽 → 오른쪽 (기본값)
- row-reverse : 오른쪽 → 왼쪽
- column : 위 → 아래
- column-reverse : 아래 → 위
2-3. flex-wrap
- 플렉스 아이템의 줄 바꿈 여부 지정
형식
flex-wrap: <속성값>;
속성값
- nowrap : 줄 바꿈 없음 (기본값)
- wrap : 컨테이너를 벗어나면 줄 바꿈
- wrap-reverse : 줄 바꿈하되 교차축 방향 반대로 배치
2-4. flex-flow (단축 속성)
- flex-direction과 flex-wrap을 한 번에 지정
형식
flex-flow: <flex-direction> <flex-wrap>;
3. 플렉스 박스 레이아웃의 정렬 속성
3-1. justify-content
- 주축 방향으로 플렉스 아이템 정렬
형식
justify-content: <속성값>;
속성값
- flex-start : 주축 시작 기준 정렬
- flex-end : 주축 끝 기준 정렬
- center : 주축 중앙 정렬
- space-between : 아이템 사이 간격 동일
- space-around : 아이템 둘레 간격 동일
- space-evenly : 아이템 사이 및 양끝 간격 동일
3-2. align-items
- 교차축 방향으로 플렉스 아이템 정렬
- 모든 아이템에 동일하게 적용
형식
align-items: <속성값>;
속성값
- stretch : 교차축 방향으로 크기 자동 확장 (기본값)
- flex-start : 교차축 시작 기준 정렬
- flex-end : 교차축 끝 기준 정렬
- center : 교차축 중앙 정렬
- baseline : 텍스트 기준선 기준 정렬
3-3. align-content
- 플렉스 아이템이 두 줄 이상일 때
교차축 방향으로 줄 단위 정렬
형식
align-content: <속성값>;
- flex-start, flex-end, center
- space-between, space-around, space-evenly
- stretch
※ flex-wrap: wrap이 설정된 경우에만 효과 있음
3-4. align-self
- 개별 플렉스 아이템 하나만 교차축 방향 정렬
- align-items를 덮어씀
형식
align-self: <속성값>;
속성값
- auto
- flex-start
- flex-end
- center
- baseline
- stretch
핵심 정리
- justify-content → 주축 정렬
- align-items → 교차축 전체 아이템 정렬
- align-content → 여러 줄일 때 교차축 줄 정렬
- align-self → 개별 아이템 교차축 정렬
7.2 그리드 레이아웃으로 2차원 레이아웃 설계하기
1. 그리드 레이아웃 개요
그리드 레이아웃(Grid Layout)이란
- **행(row)과 열(column)**을 동시에 사용하여
2차원 레이아웃을 설계하는 CSS 레이아웃 방식 - 페이지 전체 구조 설계에 적합
그리드 레이아웃의 구성 요소
- 행 (row)
그리드 레이아웃의 가로줄 - 열 (column)
그리드 레이아웃의 세로줄 - 그리드 셀 (grid cell)
하나의 행과 하나의 열이 만나 이루어지는 공간 - 그리드 갭 (grid gap)
그리드 셀과 그리드 셀 사이의 간격 - 그리드 아이템 (grid item)
그리드 셀 안에 배치되는 콘텐츠 - 그리드 라인 (grid line)
행과 열을 구분하는 선 - 그리드 넘버 (grid number)
그리드 라인에 부여되는 번호 - 그리드 컨테이너 (grid container)
display: grid 또는 inline-grid가 적용된 부모 요소
레이아웃 확인 방법
- 브라우저 개발자 도구
Elements 탭 → grid 아이콘 클릭 → 행, 열, 라인 번호 확인 가능
2. 그리드 레이아웃의 기본 속성
2-1. display 속성
- 요소를 그리드 컨테이너로 설정
형식
display: grid;
display: inline-grid;
2-2. grid-template-columns / grid-template-rows
- 열과 행의 크기와 개수 지정
형식
grid-template-columns: <1열> <2열> ...;
grid-template-rows: <1행> <2행> ...;
2-3. row-gap / column-gap
- 그리드 셀 사이의 간격 지정
형식
row-gap: <크기>;
column-gap: <크기>;
3. 그리드 레이아웃의 정렬 속성
3-1. align-items
- 그리드 아이템 전체를 셀의 세로 방향으로 정렬
형식
align-items: <속성값>;
속성값
- stretch : 셀을 꽉 채우도록 늘림
- start : 셀 상단 정렬
- center : 셀 세로 중앙 정렬
- end : 셀 하단 정렬
3-2. align-self
- 개별 그리드 아이템의 세로 방향 정렬
형식
align-self: <속성값>;
3-3. justify-items
- 그리드 아이템 전체를 셀의 가로 방향으로 정렬
형식
justify-items: <속성값>;
속성값
- stretch : 셀을 꽉 채우도록 늘림
- start : 셀 왼쪽 정렬
- center : 셀 가로 중앙 정렬
- end : 셀 오른쪽 정렬
3-4. justify-self
- 개별 그리드 아이템의 가로 방향 정렬
형식
justify-self: <속성값>;
3-5. place-items (단축 속성)
- align-items + justify-items를 한 번에 지정
형식
place-items: <align-items> <justify-items>;
3-6. place-self (단축 속성)
- align-self + justify-self를 한 번에 지정
형식
place-self: <align-self> <justify-self>;
4. 그리드 레이아웃의 배치 속성
4-1. grid-template-areas
- 그리드의 행과 열을 이름으로 정의
형식
grid-template-areas:
"header header"
"nav content"
"footer footer";
4-2. grid-area
- 그리드 아이템에 영역 이름 지정
형식
grid-area: <영역이름>;
4-3. grid-column-start / grid-column-end
- 그리드 아이템의 열 시작 / 끝 번호 지정
형식
grid-column-start: <번호>;
grid-column-end: <번호>;
4-4. grid-row-start / grid-row-end
- 그리드 아이템의 행 시작 / 끝 번호 지정
형식
grid-row-start: <번호>;
grid-row-end: <번호>;
그리드 라인과 넘버
- 그리드 라인 : 행과 열을 구분하는 선
- 그리드 넘버 : 각 라인에 붙는 고유 번호
4-5. grid-column (단축 속성)
- 열 시작과 끝을 한 번에 지정
형식
grid-column: <start> <end>;
grid-column: <start> / span <열 개수>;
4-6. grid-row (단축 속성)
- 행 시작과 끝을 한 번에 지정
형식
grid-row: <start> <end>;
grid-row: <start> / span <행 개수>;
핵심 정리
- Flexbox : 1차원 레이아웃 (가로 또는 세로)
- Grid : 2차원 레이아웃 (행 + 열)
- items : 전체 아이템 정렬
- self : 개별 아이템 정렬
- areas / line 번호 : 위치 지정 방식
.caption
overflow: hidden;
position: absolute;
transform:translateY
transition: all 0.6s ease-in-out; /* 나타날 때 부드럽게 트레지션 추가 */
사용해서 애니메이션 구현
더보기
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/newproduct.css">
<title>Document</title>
</head>
<body>
<div id="container">
<h1>신상품 목록</h1>
<ul class="prod-list">
<li>
<img src="/images/prod1.jpg">
<div class="caption">
<h2>상품 1</h2>
<p>상품 1 설명 텍스트</p>
<p>가격 : 12,345원</p>
</div>
</li>
<li>
<img src="/images/prod2.jpg">
<div class="caption">
<h2>상품 2</h2>
<p>상품2 설명 텍스트</p>
<p>가격 : 12,345원</p>
</div>
</li>
<li>
<img src="/images/prod3.jpg">
<div class="caption">
<h2>상품 3</h2>
<p>상품 3 설명 텍스트</p>
<p>가격 : 12,345원</p>
</div>
</li>
</ul>
</div>
</body>
</html>
#container {
width: 1000px;
margin: 20px auto;
}
h1 {
text-align: center;
}
.prod-list {
list-style: none;
padding: 0;
}
.prod-list li {
float: left;
padding: 0;
margin: 10px;
position: relative;
overflow: hidden;
}
.prod-list img {
margin: 0;
padding: 0;
float: left;
/*float: left; 때문에 캡션이 이미지 위치로 감 */
z-index: 5;
}
.prod-list .caption {
position: absolute;
top: 200px;
/* 기존 위치보다 200px 아래로로 */
width: 300px;
height: 200px;
padding-top: 20px;
background: rgba(0, 0, 0, 0.6);
text-align: center;
color: #fff;
transition: all 0.6s ease-in-out;
/* 나타날 때 부드럽게 트레지션 추가 */
z-index: 10px;
}
.prod-list li:hover .caption {
transform:translateY(-200px);
}
flex속성
더보기














<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/flex-basic.css">
<title>flex</title>
<style>
/* .flex-container {
display: flex;
flex-direction: column-reverse;
} */
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">item-1</div>
<div class="flex-item">item-2</div>
<div class="flex-item">item-3</div>
<div class="flex-item">item-4</div>
</div>
</body>
</html>
.flex-container {
width: 300px;
height: 200px;
background-color: #c4c4c4;
border: 1px solid black;
}
.flex-item {
color: white;
background-color: #ff5252;
}
.flex-item:nth-child(2n){
background-color: blue;
}
/* .flex-item:nth-child(2nd) 짝수를 얘기함 */

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/flex-basic.css">
<title>flex</title>
<style>
.flex-container {
display: flex;
/* flex-direction: column-reverse; */
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">item-1</div>
<div class="flex-item">item-2</div>
<div class="flex-item">item-3</div>
<div class="flex-item">item-4</div>
</div>
</body>
</html>
css 동일

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/flex-basic.css">
<title>flex</title>
<style>
.flex-container {
display: flex;
flex-direction: column-reverse;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">item-1</div>
<div class="flex-item">item-2</div>
<div class="flex-item">item-3</div>
<div class="flex-item">item-4</div>
</div>
</body>
</html>
css동일

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
flex-wrap: wrap;
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
flex-wrap: wrap-reverse;
/* 역방향 */

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
flex-flow: row wrap;

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
/* flex-flow: row wrap; */
/* direction과 wrap속성을 한번에 지정 */
justify-content: space-around;
}

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
/* flex-flow: row wrap; */
/* direction과 wrap속성을 한번에 지정 */
justify-content: space-between;

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
/* flex-flow: row wrap; */
/* direction과 wrap속성을 한번에 지정 */
justify-content: space-evenly;

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/flex-basic.css">
<title>flex</title>
<style>
.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
flex-flow: row wrap;
/* direction과 wrap속성을 한번에 지정 */
/* justify-content: space-evenly; */
align-items: center;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">item-1</div>
<div class="flex-item">item-2</div>
<div class="flex-item">item-3</div>
<div class="flex-item">item-4</div>
<div class="flex-item">item-5</div>
<div class="flex-item">item-6</div>
<div class="flex-item">item-7</div>
<div class="flex-item">item-8</div>
<div class="flex-item">item-9</div>
<div class="flex-item">item-10</div>
<div class="flex-item">item-11</div>
</div>
</body>
</html>

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
flex-flow: row wrap;
/* direction과 wrap속성을 한번에 지정 */
/* justify-content: space-evenly; */
align-items: baseline;
}
</style>

.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
flex-flow: row wrap;
/* direction과 wrap속성을 한번에 지정 */
/* justify-content: space-center; */
/* justify-content: space-between; */
/* justify-content: space-evenly; */
/* align-items: baseline; */
align-content: center;
}

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/flex-basic.css">
<title>flex</title>
<style>
.flex-container {
display: flex;
/* flex-direction: column-reverse; */
/* flex-wrap: wrap; */
/* 컨테이너 사이즈를 벗어나면 개행을 시킴 */
/* flex-wrap: wrap-reverse; */
/* 역방향 */
/* flex-flow: row wrap; */
/* direction과 wrap속성을 한번에 지정 */
/* justify-content: space-center; */
/* justify-content: space-between; */
/* justify-content: space-evenly; */
/* align-items: baseline; */
/* align-content: center; */
}
.flex-item:nth-child(1){
align-self: flex-start;
}
.flex-item:nth-child(2){
align-self: flex-end;
}
.flex-item:nth-child(3){
align-self: center;
}
.flex-item:nth-child(4){
align-self: baseline;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">item-1</div>
<div class="flex-item">item-2</div>
<div class="flex-item">item-3</div>
<div class="flex-item">item-4</div>
<!-- <div class="flex-item">item-5</div>
<div class="flex-item">item-6</div>
<div class="flex-item">item-7</div>
<div class="flex-item">item-8</div>
<div class="flex-item">item-9</div>
<div class="flex-item">item-10</div>
<div class="flex-item">item-11</div> -->
</div>
</body>
</html>
.flex-container {
width: 300px;
height: 200px;
background-color: #c4c4c4;
border: 1px solid black;
}
.flex-item {
color: white;
background-color: #ff5252;
}
/* .flex-item:nth-child(2n){
background-color: blue;
} */
/* .flex-item:nth-child(2nd) 짝수를 얘기함 */
응용
더보기


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- <link rel="stylesheet" href="/css/flex-basic.css"> -->
<title>flex</title>
<style>
.flex-container {
display: flex;
width: 450px;
height: 150px;
background-color: white;
border: 1px solid black;
margin-bottom: 20px;
align-items: center;
}
.box {
padding: 5px 45px;
background-color: #222;
margin: 5px;
}
#box1{
align-self: flex-start;
}
#box3{
align-self: stretch;
}
p {
color: #fff;
text-align: center;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="box" id="box1"><p>1</p></div>
<div class="box"><p>2</p></div>
<div class="box" id="box3"><p>3</p></div>
<div class="box"><p>4</p></div>
</div>
</body>
</html>
grid
더보기















<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</div> -->
</div>
</body>
</html>
.grid-container {
width: 300px;
height: 200px;
background-color: #c4c4c4;
border: 1px solid black;
}
.grid-item {
color: white;
background-color: #ff5252;
}
.grid-item:nth-child(2n){
background-color: blue;
}
/* .grid-item:nth-child(2nd) 짝수를 얘기함 */

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
grid-template-columns: 100px;
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
grid-template-columns: 100px 1fr;
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
grid-template-columns: 1fr 2fr;
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
grid-template-columns: repeat(3, 100px);
/* 3개의 컬럼을 100px로 반복해라 */
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
/* grid-template-columns: repeat(3, 100px); */
/* 3개의 컬럼을 100px로 반복해라 */
grid-template-columns: minmax(100px, 1fr);
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
/* grid-template-columns: repeat(3, 100px); */
/* 3개의 컬럼을 100px로 반복해라 */
/* grid-template-columns: minmax(100px, 1fr); */
grid-template-columns: fit-content(40%);
/* 최솟값의 40% */
grid-template-rows: 100px 100px 100px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
grid-template-columns: repeat(3, 100px);
/* 3개의 컬럼을 100px로 반복해라 */
/* grid-template-columns: minmax(100px, 1fr); */
/* grid-template-columns: fit-content(40%); */
/* 최솟값의 40% */
grid-template-rows: 100px 100px 100px;
row-gap: 10px;
column-gap: 20px;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
/* grid-template-columns: 100px 100px 100px; */
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
/* grid-template-columns: repeat(3, 100px); */
/* 3개의 컬럼을 100px로 반복해라 */
/* grid-template-columns: minmax(100px, 1fr); */
/* grid-template-columns: fit-content(40%); */
/* 최솟값의 40% */
/* grid-template-rows: 100px 100px 100px; */
/* row-gap: 10px; */
/* column-gap: 20px; */
grid-template-columns: 100px 100px;
grid-template-columns: 100px 100px;
align-items: stretch;
justify-items: center;
place-items: stretch center;/*위 두 줄과 같음 */
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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>grid-template-areas</title>
<style>
.grid-container {
display: grid;
grid-template-areas:
"header header header"
"sidebar content content"
"footer footer footer";
align-self: stretch;
}
#header {
grid-area:header;
}
#sidebar {
grid-area: sidebar;
}
#content {
grid-area: content;
}
#footer {
grid-area: footer;
}
.grid-item {
color: white;
background-color: #ff5252;
}
.grid-item:nth-child(2n) {
background-color: #bf5e5e;
}
</style>
</head>
<body>
<div class="grid-container">
<p id="header" class="grid-item">header</p>
<p id="sidebar" class="grid-item">sidebar</p>
<p id="content" class="grid-item">content</p>
<p id="footer" class="grid-item">footer</p>
</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>grid-template-areas</title>
<style>
.grid-container {
display: grid;
grid-template-areas:
"header header header"
"sidebar content content"
"sidebar footer footer";
align-self: stretch;
}
#header {
grid-area:header;
}
#sidebar {
grid-area: sidebar;
}
#content {
grid-area: content;
}
#footer {
grid-area: footer;
}
.grid-item {
color: white;
background-color: #ff5252;
}
.grid-item:nth-child(2n) {
background-color: #bf5e5e;
}
</style>
</head>
<body>
<div class="grid-container">
<p id="header" class="grid-item">header</p>
<p id="sidebar" class="grid-item">sidebar</p>
<p id="content" class="grid-item">content</p>
<p id="footer" class="grid-item">footer</p>
</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>grid-template-areas</title>
<style>
.grid-container {
width: 1200px;
height: 900px;
display: grid;
/* grid-template-areas:
"header header header"
"sidebar content content"
"sidebar footer footer"; */
grid-template-areas:
"header header sidebar"
"content footer footer"
"content footer footer";
align-self: stretch;
}
#header {
grid-area:header;
}
#sidebar {
grid-area: sidebar;
}
#content {
grid-area: content;
}
#footer {
grid-area: footer;
}
.grid-item {
color: white;
background-color: #ff5252;
}
.grid-item:nth-child(2n) {
background-color: #bf5e5e;
}
</style>
</head>
<body>
<div class="grid-container">
<p id="header" class="grid-item">header</p>
<p id="sidebar" class="grid-item">sidebar</p>
<p id="content" class="grid-item">content</p>
<p id="footer" class="grid-item">footer</p>
</div>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
/* grid-template-columns: repeat(3, 100px); */
/* 3개의 컬럼을 100px로 반복해라 */
/* grid-template-columns: minmax(100px, 1fr); */
/* grid-template-columns: fit-content(40%); */
/* 최솟값의 40% */
/* row-gap: 10px; */
/* column-gap: 20px; */
/* grid-template-columns: 100px 100px; */
/* grid-template-columns: 100px 100px; */
/* align-items: stretch; */
/* justify-items: center; */
/* place-items: stretch center; */
}
.grid-item:nth-child(1) {
grid-column-start: 1;
grid-column-end: 3;
}
.grid-item:nth-child(2) {
grid-column-start: 3;
grid-column-end: 4;
}
.grid-item:nth-child(3) {
grid-row-start: 2;
grid-row-end: 4;
background-color: orange;
}
.grid-item:nth-child(4) {
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 2;
grid-row-end: 4;
background-color:chocolate;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</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">
<link rel="stylesheet" href="/css/grid-basic.css">
<title>grid</title>
<style>
.grid-container {
display: grid;
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
/* grid-template-columns: 100px 1fr; */
/* fr 나머지 픽셀에서 자유롭게 사이즈를 지정하게 되는것 */
/* grid-template-columns: 1fr 2fr; */
/* grid-template-columns: repeat(3, 100px); */
/* 3개의 컬럼을 100px로 반복해라 */
/* grid-template-columns: minmax(100px, 1fr); */
/* grid-template-columns: fit-content(40%); */
/* 최솟값의 40% */
/* row-gap: 10px; */
/* column-gap: 20px; */
/* grid-template-columns: 100px 100px; */
/* grid-template-columns: 100px 100px; */
/* align-items: stretch; */
/* justify-items: center; */
/* place-items: stretch center; */
}
.grid-item:nth-child(1) {
/* grid-column-start: 1;
grid-column-end: 3; */
grid-column: 1 3;
}
.grid-item:nth-child(2) {
/* grid-column-start: 3;
grid-column-end: 4; */
grid-column: 3 4;
}
.grid-item:nth-child(3) {
/* grid-row-start: 2;
grid-row-end: 4; */
grid-row: 2/span 2;
background-color: orange;
}
.grid-item:nth-child(4) {
/* grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 2;
grid-row-end: 4; */
grid-column: 2/span 2;
grid-row: 2/span 2;
background-color:chocolate;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item">item-1</div>
<div class="grid-item">item-2</div>
<div class="grid-item">item-3</div>
<div class="grid-item">item-4</div>
<!-- <div class="grid-item">item-5</div>
<div class="grid-item">item-6</div>
<div class="grid-item">item-7</div>
<div class="grid-item">item-8</div>
<div class="grid-item">item-9</div>
<div class="grid-item">item-10</div>
<div class="grid-item">item-11</div> -->
</div>
</body>
</html>
'대우개발원 수업 내용 > css로 웹 페이지 꾸미기' 카테고리의 다른 글
| CSS 9일차 auto-fill / auto-fit / 미디어 쿼리 (1) | 2025.12.17 |
|---|---|
| CSS 7일차 전환(transition)/애니메이션(animation)/변형(transform) /overflow (0) | 2025.12.15 |
| CSS 6일차 - float / clear (1) | 2025.12.11 |
| CSS 5일차 background / position / z-index (0) | 2025.12.10 |
| CSS 4일차 - 박스 모델을 구성하는 속성 / 지금까지 배운 html+css 정리 (0) | 2025.12.09 |