CSS 단위들은 웹의 다양한 상황에 적용되며, 각각의 특성과 사용 방법을 이해하고 적절히 활용하는 것이 중요하다.
px
특정 요소의 크기를 정확히 제어하고 싶을 때 사용된다.
예로, 로고 이미지의 크기 혹은 버튼 크기 등.
.logo {
width: 200px;
}
.button {
width: 150px;
height: 40px;
}
요소들의 정렬이나 여백을 설정할 때 사용한다.
예로, 요소들 사이의 간격을 일정하게 유지하거나, 요소를 수평 또는 수직으로 정렬할 때 사용된다.
.container {
margin-top: 20px;
padding: 10px;
}
.column {
width: 300px;
margin-right: 20px;
}
주의
픽셀은 정확한 크기 제어를 가능하게 해주지만, 반응형 디자인과 유연한 레이아웃을 구현하는 데에는 다른 단위들이 더 적합할 수 있다. 꼭 프로젝트의 목적, 요구사항에 따라 다른 단위들과 혼합하여 사용하는 게 좋다.
%
%는 반응형 웹디자인에서 주로 사용된다.
Viewport크기에 따라 요소의 크기를 자동으로 조정하여 다양한 화면 크기에서 일관된 레이아웃을 유지할 수 있다.
.container {
width: 100%; /* 부모 요소의 100% 크기 */
}
.column {
width: 50%; /* 부모 요소의 50% 크기 */
}
요소들 사이의 비율이나 배율을 유지하고 싶을 때 %를 사용할 수 있다.
예로, 이미지의 너비를 50%로 설정하면 이미지들은 부모 요소의 크기에 비례하여 반응한다.
.image {
width: 50%; /* 부모 요소의 50% 크기 */
}
폰트 크기를 상대적으로 조정할 때 %를 사용할 수 있다.
부모 요소의 크기에 대한 비율로 자식 요소의 폰트 크기를 설정할 수 있다.
vh
vh는 반응형 웹에서 주로 활용된다.
.section {
height: 100vh; /* 뷰포트 높이의 100% 크기 */
}
특정 요소를 뷰포트의 크기에 맞게 조정할 때 vh를 사용할 수 있다.
예로 전체 화면 배경 이미지를 설정학거나 뷰포트의 일부분을 차지하는 요소를 만들 때 유용하다.
.hero-section {
height: 80vh; /* 뷰포트 높이의 80% 크기 */
}
.background-image {
width: 100vw; /* 뷰포트 너비의 100% 크기 */
}
vh를 사용하여 요소를 세로 중아아에 정렬할 수 있다.
부모 요소의 높이에 대한 비율로 자식 요소를 정렬한다.
.parent {
height: 100vh; /* 뷰포트 높이의 100% 크기 */
display: flex;
align-items: center;
}
vw
vw는 반응형 웹에 주로 활용된다. 화면의 너비에 상대적으로 크기를 조정하여 다양한 디바이스와 화면 크기에서 일관된 레이아웃을 유지할 수 있다.
.container {
width: 100vw; /* 뷰포트 너비의 100% 크기 */
}
특정 요소를 뷰포트의 크기에 맞게 조정할 때 vw를 사용할 수 있다.
전체 화면 배경 이미지를 설정하거나 뷰포트의 일부분을 차지하는 요소를 만들 때 유용
.hero-section {
width: 80vw; /* 뷰포트 너비의 80% 크기 */
}
.sidebar {
height: 100vh; /* 뷰포트 높이의 100% 크기 */
}
vw를 사용하여 요소를 가로 중앙에 정렬할 수 있다.
부모 요소의 너비에 대한 비율로 자식 요소를 정렬한다.
.parent {
width: 100vw; /* 뷰포트 너비의 100% 크기 */
display: flex;
justify-content: center;
}
em
em은 상위 요소의 폰트 크기를 상속받아 계산되기 때문에 폰트 크기를 상대적으로 조정하는 데 유용하다.
중첩된 요소에서 상위 요소에서 상위 요솟의 폰트 크기를 기준으로 크기를 조절할 수 있다.
.parent {
font-size: 16px; /* 부모 요소의 폰트 크기 */
}
.child {
font-size: 1.2em; /* 부모 요소의 1.2배 크기 */
}
em은 요소의 크기를 상대적으로 조정하는 데에도 사용될 수 있다.
요소의 너비, 높이, 여백 등을 상위 요소의 폰트 크기에 비례하여 조절할 수 있다.
.container {
font-size: 16px; /* 부모 요소의 폰트 크기 */
}
.box {
width: 10em; /* 부모 요소의 10배 크기 */
height: 2em; /* 부모 요소의 2배 크기 */
margin-top: 1em; /* 부모 요소의 1배 크기 */
}
주의
중첩된 요소의 경우 부모 요소의 폰트 크기를 상속받아 계산되므로 계산 및 유지보수에 주의해야 함
rem
html {
font-size: 16px; /* 루트 요소(HTML 요소)의 폰트 크기 */
}
.container {
width: 20rem; /* 루트 요소의 20배 크기 */
height: 10rem; /* 루트 요소의 10배 크기 */
}
.parent {
font-size: 18px; /* 부모 요소의 폰트 크기 */
}
.child {
width: 2rem; /* 부모 요소의 2배 크기 */
height: 1.5rem; /* 부모 요소의 1.5배 크기 */
}
rem은 폰트 크기에 따라 자동으로 조정되며, 중첩된 요소의 계산에는 영향을 받지 않는다. 이를 통해 전역적인 크기 조정과 일관된 스케일링을 적용하면서도 계산 및 유지보수가 용이해진다.
주의
브라우저의 기본 폰트 크기 설정에 영향을 받을 수 있다는 점.
기본 설정에 의존하지 않고 명시적으로 루트 요소의 폰트 크기를 설정하는 것이 좋다.
CSS를 자주 써왔으면서 단위에 대한 부분은 항상 헷갈렸다.
이번 기회에 제대로 알게 되어 좋은 선택을 할 수 있을 것 같다.