개발 일기

25.03.15 반응형 웹 디자인 (Responsive Design)란?

와라리요 2025. 3. 15. 20:39

반응형 디자인은 웹 페이지가 다양한 화면 크기(모바일, 태블릿, 데스크톱 등)에서 일관된 사용자 경험을 제공하도록 설계하는 방법이다.
해상도나 기기의 화면 비율이 달라도 콘텐츠가 자연스럽게 조정되도록 하는 것이 목표며,

반응형 디자인을 구현하는 주요 방법은 CSS 미디어 쿼리, 유동적인 레이아웃, Flexbox 및 Grid 활용이 있다.


 

CSS 미디어 쿼리 사용

미디어 쿼리(Media Queries)는 특정 화면 크기에 따라 CSS 스타일을 다르게 적용할 수 있도록 해주며,
이걸 이용하면 작은 화면에서는 요소를 세로로 배치하고, 큰 화면에서는 가로로 배치하는 식의 조정이 가능하다.

@media (max-width: 768px) {
  .container {
    flex-direction: column;
  }
}
 

이유:

  • max-width: 768px → 화면 크기가 768px 이하일 때 적용됨.
  • .container의 flex-direction을 column으로 변경 → 모바일 화면에서 요소들이 위에서 아래로 정렬됨.
  • 작은 화면에서는 세로 배치가 더 가독성이 좋고, 터치하기도 쉬움.

 

추가 예제 (화면 크기에 따른 폰트 크기 조정)

body {
  font-size: 16px;
}

@media (max-width: 600px) {
  body {
    font-size: 14px;
  }
}

 

이유:

  • max-width: 600px → 화면 크기가 600px 이하일 때 적용됨.
  • font-size를 줄여서 좁은 화면에서도 텍스트가 잘 보이도록 조정.

즉, 미디어 쿼리는 화면 크기에 맞춰 CSS 스타일을 유동적으로 조정하는 핵심적인 방법이다.


 

유동적인 레이아웃 (Fluid Layout)

고정된 px 단위 대신 %, vw, vh, em, rem 같은 상대 단위를 사용하여 유연한 레이아웃을 만드는 방법이다.
이렇게 하면 다양한 화면 크기에서 요소들이 자연스럽게 늘어나거나 줄어들어 사용자 경험이 향상된다.

.container {
  width: 80%;
  max-width: 1200px;
}
 

이유:

  • width: 80% → 부모 요소의 크기에 따라 자동으로 조정됨.
  • max-width: 1200px → 너무 커지지 않도록 최대 너비를 제한하여 가독성 유지.

 

예제 (뷰포트 단위 활용)

 
.hero {
  width: 100vw;
  height: 50vh;
}

이유:

  • vw(Viewport Width), vh(Viewport Height)를 사용하면 기기의 화면 크기에 따라 자동 조정됨.
  • width: 100vw → 가로 폭을 항상 화면 전체에 맞춤.
  • height: 50vh → 현재 화면 높이의 50%만큼 차지.

 

예제 (폰트 크기 유동적 조정)

body {
  font-size: 1rem;
}

@media (max-width: 600px) {
  body {
    font-size: 0.875rem;
  }
}

이유:

  • rem 단위를 사용하면 html의 font-size를 기준으로 상대 크기를 적용할 수 있어.
  • 화면 크기가 작아질수록 글자가 줄어들어 가독성을 유지함.

즉, 유동적인 레이아웃을 사용하면 다양한 해상도에서 콘텐츠가 자연스럽게 조정될 수 있어.


 

Flexbox 및 Grid 활용

요소의 정렬을 유연하게 조정하기 위해 FlexboxCSS Grid를 사용하면 반응형 디자인을 쉽게 구현할 수 있다.

Flexbox

예제 (Flexbox를 사용한 반응형 레이아웃)

 
.container {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

이유:

  • display: flex → 요소들을 가로로 정렬함.
  • flex-wrap: wrap → 화면이 작아지면 자동으로 줄 바꿈이 발생하여 콘텐츠가 넘치지 않음.
  • justify-content: space-between → 요소들 사이에 동일한 간격을 줘서 레이아웃이 균형 잡힘.

 

미디어 쿼리와 함께 사용하면 더 효과적

 
@media (max-width: 600px) {
  .container {
    flex-direction: column;
  }
}

이유:

  • 작은 화면에서는 flex-direction: column을 사용하여 세로로 배치, 가독성 향상.

 

CSS Grid

💡 예제 (Grid를 사용한 반응형 레이아웃)

 
@media (max-width: 600px) {
  .container {
    flex-direction: column;
  }
}

이유:

  • grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    • 자동으로 적절한 크기로 조정됨 (너비 200px 이상일 때는 1fr을 유지).
  • gap: 20px; → 요소들 사이의 간격을 균일하게 설정.

즉, Flexbox와 Grid를 사용하면 요소 정렬을 반응형으로 쉽게 조정할 수 있다.


 

정리

방법 설명 예제
CSS 미디어 쿼리 특정 해상도에서 CSS 스타일 변경 @media (max-width: 768px) { flex-direction: column; }
유동적인 레이아웃 px 대신 %, vw, vh, rem 등 사용 width: 80%; max-width: 1200px;
Flexbox 활용 요소를 자동 정렬하고 줄 바꿈 조정 display: flex; flex-wrap: wrap;
Grid 활용 자동 크기 조정 및 정렬 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));