[CSS] CSS 중급 문법 : 4. 성분 크기 조절 Sizing Elements

Relative Measurements

✅ 반응형 디자인(Responsivie Design) :

현대에는 데스크탑, 스마트폰, 태블릿 등 다양한 기기에서 웹사이트를 이용한다. 하지만 기기마다 화면 크기가 다르다는 점이 웹 개발자에게 문제를 일으킨다.

해결책은 반응형 디자인(Responsive Design) 이다.

 

반응형 디자인이란, 웹사이트가 상황에 따라 자동으로 크기와 배치를 조정하여, 모든 화면 크기에서 가독성과 시각적 일관성을 유지하는 것을 의미한다.

조정 기준은 다음과 같다:

  • 웹사이트 내 다른 콘텐츠의 크기
  • 화면 크기 (뷰포트 크기)

 

✅ 픽셀 단위(px)의 한계 :

  • px → 고정값(Fixed Value)
  • 예: width: 500px; height: 100px;
  • 문제점: 화면 크기가 변하면 콘텐츠가 너무 작아지거나, 넘치거나, 가독성이 떨어질 수 있음

 

✅ 상대 단위 (Relative Units)의 장점 :

고정값 대신 상대적 크기를 사용하면,

  • 화면 크기 변화에도 비율이 유지됨
  • 콘텐츠가 자동으로 조정되어 반응형 디자인 구현 가능

 


 

Em

✅ 상대 단위 em :

픽셀(px)은 고정값이지만, em 단위는 상대적 크기를 지정할 수 있는 유용한 도구이다.

 

 

✅ em의 의미 :

  • 과거: 글꼴에서 대문자 M의 폭을 기준으로 한 단위
  • 현재: 현재 요소의 font-size 또는 브라우저의 기본 글꼴 크기(보통 16px)를 기준으로 계산됨

기본적으로 1em = 현재 글꼴 크기

 

 

✅ 예시 코드 :

.heading {
  font-size: 2em;
}
  • 브라우저 기본 폰트 크기 = 16px 가정
  • 결과: 2em = 32px
.splash-section {
  font-size: 18px;
}

.splash-section h1 {
  font-size: 1.5em;
}
  • .splash-section 기본 폰트 크기 = 18px
  • .splash-section h1 = 1.5em = 27px

 


 

Rem

✅ 상대 단위 rem :

rem은 root em의 줄임말로, em과 비슷하지만 기준이 다르다.

 

 

✅ rem의 특징 :

  • 기준: 최상위 <html> 요소의 글꼴 크기
  • 기본값: 대부분의 브라우저에서 <html> = 16px
  • 따라서 1rem = 16px (기본 상태일 때)

 

✅ 예시 코드 :

html {
  font-size: 20px;
}

h1 {
  font-size: 2rem;
}
  • <html> 글꼴 크기 = 20px
  • h1 크기 = 2rem = 40px

 

✅ em vs. rem 비교 :

단위 기준 장점 단점
em 부모 요소의 font-size 주변 요소와 상대적인 크기 지정 가능 중첩 시 예상치 못한 배수 효과 발생
rem 루트(html)의 font-size 전체 사이트에서 일관된 크기 유지 특정 요소와의 상대적 비교에는 적합하지 않음
  • rem: 사이트 전반에서 일관된 크기 유지가 필요할 때 적합
  • em: 주변 요소와의 상대적 비율 조정이 필요할 때 적합

 


 

Persentages

✅ 상대 단위 % (percent) :

퍼센트는 부모 요소의 크기를 기준으로 상대적인 크기를 지정할 때 사용된다.

특히 반응형 레이아웃에서 많이 사용되며, 고정 단위(px)보다 유연성을 제공한다.

 

 

✅ 특징 :

  • 기준: 부모 요소(container)의 크기
  • 사용 가능 속성:
    • 크기 관련: width, height
    • 박스 모델 관련: padding, border, margin
    • 위치 관련: top, bottom, left, right

 

✅ 예시 코드 :

.main {
  height: 300px;
  width: 500px;
}
 
.main .subsection {
  height: 50%;
  width: 50%;
}
  • .main 크기: 300px × 500px
  • .subsection 크기: 50% → 부모의 절반
    • 높이 = 300px × 0.5 = 150px
    • 너비 = 500px × 0.5 = 250px

 

✅ 주의할 점 :

  • 부모 요소의 크기가 정의되지 않았다면 → 자식의 퍼센트 값은 예상치 못한 결과가 될 수 있다.
  • width: 100%는 부모 너비를 꽉 채우지만, padding, border, margin 때문에 overflow가 발생할 수 있다.
    → 따라서 box-sizing: border-box; 속성과 함께 사용하는 것이 일반적이다.

 


 

Percentages: Padding & Margin

✅ 퍼센트 단위와 padding/margin :

퍼센트는 padding(컨텐츠와 테두리 사이 간격)과 margin(요소와 요소 사이 간격)을 지정할 때도 사용할 수 있다.

 

 

✅ 계산 기준 차이 :

  • width / height에 퍼센트 사용 시
    → 부모 요소의 해당 크기(width, height) 를 기준으로 계산된다.
  • padding / margin에 퍼센트 사용 시
    → 부모 요소의 width(너비) 를 기준으로 계산된다.
    → 따라서 수평·수직 방향 모두 부모의 width 값을 기준으로 비율이 정해진다.

 

✅ 예시 코드 :

p.content-header {
  border: 3px solid coral;
  padding: 10%;
  margin-left: 50%;
}
  • padding: 10% → 부모 너비의 10% 만큼 패딩 지정
  • margin-left: 50% → 부모 너비의 50% 만큼 오른쪽으로 밀림

 

✅ 왜 vertival padding/margin도 width 기준일까? :

  1. 부모 요소의 height가 정의되지 않은 경우 → 자식의 높이에 따라 부모의 높이가 계속 변함
  2. 자식 height가 바뀔 때마다 부모 height도 바뀌고, padding/margin도 연쇄적으로 변하게 됨
  3. 이런 무한 루프를 피하기 위해 CSS에서는 padding/margin을 무조건 width 기준으로 계산한다.

 

✅ 활용 팁 :

  • 텍스트 기반의 간격 조정 → em, rem 사용 (글자 크기와 비례)
  • 레이아웃 기반의 비율 조정 → % 사용 (부모 너비와 비례)

 


 

Width: Minimum & Maximum

✅  최소·최대 너비 지정 min-width/max-width :

반응형 디자인에서 상대 단위를 사용하면 다양한 화면 크기에서 일관된 레이아웃을 유지할 수 있다.

하지만 요소가 너무 작거나 너무 커지면 가독성과 디자인이 깨질 수 있다.

이를 방지하기 위해 CSS는 최소/최대 너비 속성을 제공한다.

 

 

✅ 속성 설명 :

  • min-width : 요소의 최소 너비 보장
  • max-width : 요소의 최대 너비 제한

 

✅ 예시 코드 :

  • 브라우저 크기를 줄여도 p 요소는 최소 300px 이하로 줄어들지 않는다.
  • 브라우저 크기를 넓혀도 p 요소는 최대 600px 이상 커지지 않는다.

 

✅ 활용 포인트 :

  • 텍스트가 너무 압축되거나 과도하게 퍼지는 문제를 예방한다.
  • 가독성을 유지하고 적절한 레이아웃 범위를 지정할 수 있다.
  • 주로 px 단위를 사용하여 하드 제한을 주는 경우가 많다.

 


 

 

Height : Minimum & Maximum

✅ 최소·최대 높이 지정 min-height/max-height :

가로 너비뿐 아니라 세로 높이도 제한할 수 있다.

  • min-height : 요소 박스의 최소 높이 보장
  • max-height : 요소 박스의 최대 높이 제한

 

✅ 예시 코드 :

p {
  min-height: 150px;
  max-height: 300px;
}
  • 모든 p 요소는 최소 높이가 150px 이하로 줄어들지 않는다.
  • 최대 높이는 300px을 넘지 않는다.

 

✅ 주의사항 :

만약 max-height가 너무 낮게 설정된다면?

  • 요소 안의 텍스트나 이미지가 잘려서 밖으로 넘치게(overflow) 될 수 있다.
  • 이 경우 CSS의 overflow 속성을 활용해 해결할 수 있다.

예 :

p {
  max-height: 100px;
  overflow: auto; /* 스크롤바로 넘친 내용 표시 */
}

 


 

Scaling Images and Videos

✅ 반응형 이미지·비디오 비율 유지하기 :

웹사이트에는 다양한 미디어(이미지, 영상 등) 가 포함된다.

이때 중요한 것은 비율을 유지하며 컨테이너 크기에 맞게 조정하는 것이다.

 

 

✅ 예시 코드 :

.container {
  width: 50%;
  height: 200px;
  overflow: hidden;
}

.container img {
  max-width: 100%;
  height: auto;
  display: block;
}
  • .container 설정
    • width: 50% → 브라우저 너비의 절반 크기.
    • height: 200px → 세로 크기 고정.
    • overflow: hidden → 컨테이너보다 큰 콘텐츠는 잘라낸다.
  • 이미지 설정 (.container img)
    • max-width: 100% → 컨테이너 너비를 넘지 않도록 비율 유지.
    • height: auto → 가로 크기에 맞춰 세로 크기 자동 조정.
    • display: block → 인라인 정렬을 막고, 다른 요소와 줄맞춤 문제 해결.
  • 결과
    • 이미지는 컨테이너 크기에 맞춰 가로 폭 기준으로 비율 유지
    • 세로가 컨테이너보다 크면 아래쪽이 잘려 보이지 않음

 

✅ 변형 패턴 :

만약 세로(height) 기준으로 비율을 맞추고 싶다면 속성을 교체한다.

.container img {
  max-height: 100%;
  width: auto;
}

이 경우 세로가 기준이 되며, 가로가 컨테이너보다 크면 양옆이 잘린다.

 


 

Scaling Background Images

✅ CSS 배경 이미지 반응형 처리 :

웹사이트를 제작할 때, 다양한 화면 크기에 대응하기 위해 배경 이미지를 반응형으로 설정하는 방법을 알아야 한다.

body {
  background-image: url('#');
  background-repeat: no-repeat;
  background-position: center;
  background-size: cover;
}

 

 

✅ 주요 속성 정리 :

  • background-image : 배경 이미지를 불러오는 속성이다.
  • background-repeat: no-repeat : 이미지가 반복되는 기본 동작을 막는다.
  • background-position: center : 배경 이미지를 컨테이너의 중앙에 배치한다.
  • background-size: cover : 이미지 비율을 유지하며 요소 전체를 덮는다. 이미지가 잘려 나갈 수 있다.

 

✅ background-size 비교 :

설명
cover 요소를 꽉 채우도록 확대/축소한다. 다만 이미지 일부가 잘릴 수 있다.
contain 이미지 전체가 보이도록 축소/확대한다. 남는 공간이 생길 수 있다.
auto 기본값으로, 원본 크기를 유지한다.

 

 

 


 

참고

https://www.codecademy.com/enrolled/courses/learn-intermediate-css