| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 앱개발기능추가
- 프론트엔드
- JavaScript
- HTML
- 코틀린
- 개발자
- dev
- kotlin
- 파이썬 코테 함수
- Git협업
- env사용
- CSS
- git방식
- 백엔드
- 코테준비
- 파이썬코테함수정리
- 앱개발
- Python3
- 앱사용자행동추적
- 파이썬 코테준비
- 깃협업
- frontend
- It
- 환경변수사용
- 앱에 팝업띄우기
- 위키피디아검색창
- 깃 충돌 해결방법
- 앱사용자추적
- 깃 충돌시
- 깃 꼬였을 때
- Today
- Total
zooooss
[반응형 웹] 상대단위(rem / em)와 레이아웃(grid / flex) - 02 본문
상대단위 rem과 em의 개념, 그리고 레이아웃 grid와 flex의 차이에 대하여 알아보겠습니다!

- em과 rem
em과 rem은 상대단위를 의미하는데요! 이와 반대의 개념으로는 자주 쓰이는 절대단위 픽셀값인 px가 있습니다!
상대단위 em과 rem은 기준에 따라 크기가 변화합니다!
rem : 루트 엘리먼트의 font-size가 기준
em : 자신과 부모의 font-size가 기준
쉽게 설명하자면,
em은 전체 html의 font-size에 상대적으로 계산되는 단위입니다!
어느 곳에서 사용되던 제일 상위로 설정된 font-size의 n배인 것입니다! 2em이면 2 * font-size를 의미하죠!
반면에, rem은 현재 rem이 쓰인 요소 안의 font-size나 부모 요소의 font-size를 따라갑니다!
전체 html의 font-size에는 영향을 받지 않아요!
하지만, 더 생각해보면 해당 요소에 font-size지정이 되어있지 않다면 루트 요소의 font-size를 따라갈 수밖에 없겠죠!
해당 코드를 통해 더 이해해보겠습니다!
<!DOCTYPE html>
<html>
<head>
<title>EM test</title>
<meta charset="utf-8">
<style>
html{
font-size: 10px;
}
ul {
font-size: 15px;
}
ul ul li{
font-size: 2em;
}
</style>
</head>
<body>
<h1>EM test</h1>
<ul>
<li>첫 번째</li>
<li>두 번째</li>
<li>세 번째</li>
<ul>
<li>changed</li>
<li>changed</li>
<li>changed</li>
</ul>
</ul>
</body>
</html>

보시다시피 2em으로 맞춰둔 폰트 크기는 html의 폰트사이즈인 10px의 2배인 20px로 나타나며,
첫 세 줄에 해당하는 폰트 크기는 요소에 설정해둔 15px로 나타나는 것을 확인할 수 있었습니다!
확실히 이해하기 위해서는 직접 rem, em 값을 이리저리 바꿔보는 연습이 필요해요 ㅎㅎ

- grid와 flex
웹 개발을 하다보면, 레이아웃을 Flex와 Grid 중 어느 것을 쓸 지 고민하는 순간이 오실텐데요!
Flex : 축이 하나일 때 사용! / 1차원적! / 진행방향이 한 방향!
Grid : 축이 여러 개일 때 사용! / 2차원적! / 진행방향이 여러 방향!
이렇게 생각하시면 사용하실 때 결정하기가 쉬워집니다!
먼저 Flex를 코드로 확인해보겠습니다!
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<style>
.container{
width: 300px;
height: 300px;
background-color: yellow;
display: flex;
flex-direction: row;
justify-content: flex-start; /*center, space-between 등 */
align-items: flex-end; /*교차축의 정렬 변화*/
}
.flex-item{
width: 150px;
height: 150px;
background-color: blue;
border: 5px solid black;
color: white;
}
</style>
</head>
<body>
<div class="container">
<div class="flex-item">A</div>
<div class="flex-item">B</div>
<div class="flex-item">C</div>
<div class="flex-item">D</div>
</div>
</body>
</html>

이렇게 flex-direction에 의해 행을 기준으로 정렬된 것을 보실 수 있습니다!
다음은 반응형의 꽃인 Grid를 코드로 확인해보겠습니다!
<!DOCTYPE html>
<html>
<head>
<title>grid-test</title>
<meta charset="utf-8">
<style>
.grid-container{
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
grid-gap: 20px;
grid-template-areas:
"sidebar header header corner"
"sidebar main1 main2 side"
"sidebar main3 main4 side";
width: 600px;
height: 450px;
}
.gird-item{
color: black;
}
.sidebar{
grid-area: sidebar;
background-color: skyblue;
}
.header{
grid-area: header;
background-color:green;
}
.corner{
grid-area: corner;
background-color:plum;
}
.main1{
grid-area: main1;
background-color:purple;
}
.main2{
grid-area: main2;
background-color:yellow;
}
.main3{
grid-area: main3;
background-color:teal;
}
.main4{
grid-area: main4;
background-color:thistle;
}
.side{
grid-area: side;
background-color:tomato;
}
</style>
</head>
<body>
<div class="grid-container">
<div class="grid-item sidebar">sidebar</div>
<div class="grid-item header">header</div>
<div class="grid-item corner">corner</div>
<div class="grid-item main1">main1</div>
<div class="grid-item main2">main2</div>
<div class="grid-item main3">main3</div>
<div class="grid-item main4">main4</div>
<div class="grid-item side">side</div>
</div>
</body>
</html>

이렇게 2차원의 형태로 나오는 것을 확인하실 수 있습니다!
*** 참고로 1fr 1fr 1fr 1fr은 repeat함수를 이용해! repeat(4,1fr)로 사용하실 수 있습니다! 1fr을 4번 반복한다는 의미이죠!
여기까지 상대단위와 레이아웃에 대해 알아보았습니다!
해당 관련 코드는
https://github.com/zooooss/ResponsiveWeb.git
GitHub - zooooss/ResponsiveWeb
Contribute to zooooss/ResponsiveWeb development by creating an account on GitHub.
github.com
깃허브를 통해 확인하실 수 있습니다 ㅎㅎ
'STUDY > Responsive Web' 카테고리의 다른 글
| [반응형 웹] SCSS(Sass)란? - 03 (0) | 2023.08.14 |
|---|---|
| [반응형 웹] viewport와 media query - 01 (0) | 2023.08.06 |