11강

반응형 디자인

4 조회 3

이번 강에서 배울 것

  • 반응형 웹이란 — 모바일 퍼스트 전략
  • 미디어쿼리 문법과 브레이크포인트 설정
  • 뷰포트(viewport) 단위 vw, vh, dvh
  • 반응형 이미지와 picture 태그
  • CSS transition으로 부드러운 애니메이션 구현

1. 반응형 웹이란

반응형 웹 디자인(Responsive Web Design)이란 하나의 HTML/CSS 코드로 모바일·태블릿·PC 등 다양한 화면 크기에 최적화된 레이아웃을 제공하는 것입니다. 2015년 이후 모바일 웹 트래픽이 PC를 초과했고, 구글은 모바일 우선 인덱싱(Mobile-First Indexing)을 적용 중입니다.

/* 모바일 퍼스트 전략 — 작은 화면이 기본, 큰 화면을 덮어씌움 */

/* 기본 (모바일 ~767px) */
.container { padding: 16px; }
.card-grid { grid-template-columns: 1fr; }  /* 1열 */

/* 태블릿 (768px~) */
@media (min-width: 768px) {
  .container { padding: 24px; }
  .card-grid { grid-template-columns: repeat(2, 1fr); }  /* 2열 */
}

/* 데스크탑 (1024px~) */
@media (min-width: 1024px) {
  .card-grid { grid-template-columns: repeat(3, 1fr); }  /* 3열 */
}

/* 와이드 (1280px~) */
@media (min-width: 1280px) {
  .container { max-width: 1200px; margin: 0 auto; }
}

2. 미디어쿼리 기본 문법

/* 기본 형식 */
@media 미디어타입 and (조건) {
  /* 조건 충족 시 적용할 CSS */
}

/* 화면 너비 기준 */
@media screen and (min-width: 768px) { }   /* 768px 이상 */
@media screen and (max-width: 767px) { }   /* 767px 이하 */
@media (min-width: 768px) and (max-width: 1023px) { } /* 범위 지정 */

/* 다크모드 대응 */
@media (prefers-color-scheme: dark) {
  body { background: #111; color: #f5f5f5; }
}

/* 인쇄 */
@media print {
  .no-print { display: none; }
  body { font-size: 12pt; color: black; }
}

/* 가로/세로 방향 */
@media (orientation: landscape) { }  /* 가로 모드 */
@media (orientation: portrait) { }   /* 세로 모드 */

3. 표준 브레이크포인트

이름 기준값 대상 기기
xs (default)~479px소형 스마트폰
sm480px~일반 스마트폰
md768px~태블릿
lg1024px~노트북·소형 데스크탑
xl1280px~대형 모니터

4. 뷰포트 단위 vw, vh, dvh

/* vw/vh: 뷰포트 너비/높이의 % */
.hero { height: 100vh; }   /* 화면 전체 높이 */
.text { font-size: 5vw; }  /* 화면 너비의 5% */

/* dvh(Dynamic Viewport Height): 모바일 주소창 고려 */
/* iOS 사파리의 주소창 등장/숨김에 따른 높이 변동 대응 */
.hero { height: 100dvh; }  /* 실제 보이는 화면 높이 */

/* 유용한 조합 */
.full-screen { width: 100vw; height: 100dvh; }
.min-full { min-height: 100dvh; }  /* 최소 전체 화면, 내용 많으면 더 늘어남 */

5. 반응형 이미지

/* CSS로 반응형 이미지 */
img {
  max-width: 100%;
  height: auto;
}

/* object-fit: 이미지 비율 유지하며 크기 제어 */
.card-thumb {
  width: 100%;
  height: 200px;
  object-fit: cover;    /* 잘라서 채움 (자주 사용) */
  object-fit: contain;  /* 비율 유지, 여백 생김 */
  object-position: center top;  /* 잘릴 때 기준 위치 */
}

/* picture 태그: 화면 크기별 다른 이미지 제공 */
<picture>
  <source media="(min-width: 1024px)" srcset="hero-desktop.jpg">
  <source media="(min-width: 768px)"  srcset="hero-tablet.jpg">
  <img src="hero-mobile.jpg" alt="히어로 이미지">  <!-- 기본값 -->
</picture>

6. CSS transition — 부드러운 전환 효과

/* transition: 속성 지속시간 타이밍함수 지연 */
.btn {
  background: #6366f1;
  color: white;
  transition: background 0.3s ease, transform 0.2s ease;
}
.btn:hover {
  background: #4f46e5;
  transform: translateY(-2px);   /* 위로 2px 이동 */
}

/* 여러 속성 한번에 */
.card { transition: all 0.3s ease; }

/* 타이밍 함수 */
transition-timing-function: ease;        /* 처음 빠르고 끝 느림 (기본) */
transition-timing-function: ease-in;     /* 처음 느림 */
transition-timing-function: ease-out;    /* 끝 느림 */
transition-timing-function: linear;      /* 일정 속도 */
transition-timing-function: cubic-bezier(0.34, 1.56, 0.64, 1); /* 스프링 효과 */

/* transform: 이동, 회전, 크기 변환 (GPU 가속으로 빠름) */
transform: translateX(20px);    /* 가로 이동 */
transform: translateY(-10px);   /* 세로 이동 */
transform: scale(1.05);         /* 1.05배로 확대 */
transform: rotate(45deg);       /* 45도 회전 */
transform: scale(1.1) translateY(-4px); /* 복합 적용 */

11강 핵심 요약

  • 모바일 퍼스트 — 작은 화면 기본, @media min-width로 확장
  • 브레이크포인트: 480 / 768 / 1024 / 1280px
  • height: 100dvh로 모바일 주소창 높이 문제 해결
  • object-fit: cover로 카드 이미지 비율 유지
  • transition + transform으로 GPU 가속 애니메이션 구현
  • 다음 강: 종합 실습 — 배운 모든 것으로 한 페이지 사이트 완성!

관련 검색어  ·  CSS반응형, 미디어쿼리, 모바일퍼스트, viewport단위, object-fit, CSS transition, transform애니메이션

Advertisement

댓글 0

채용정보
공지사항
인사이트
MY