Responsive/Res-Basic

[Responsive] 반응형 웹 배경 이미지(background image) 처리

ui-o 2025. 8. 12. 17:48
반응형

반응형 웹 background image 처리

  • 반응형 웹에서 백그라운드 이미지 처리는 화면 크기, 해상도, 디바이스 종류에 따라 적절한 이미지를 보여주거나, 이미지가 깨지지 않고 자연스럽게 보이도록 하는 게 중요

성능 최적화 및 팁

  • 이미지 용량 최적화: 웹용으로 압축된 JPEG, WebP 포맷 사용 권장
  • Lazy Loading: 백그라운드 이미지는 보통 lazy loading 불가하므로, 화면에 보일 때만 로드하는 방법 고민
  • 이미지 캐싱: CDN 활용 시 캐싱 설정 중요
  • 브라우저 지원 확인: image-set() 등 최신 CSS 기능은 지원 범위 확인 필요
  • 배경이미지 vs 콘텐츠 이미지 구분: 의미 있는 이미지는 <img>로 처리하고, 장식용이면 배경 이미지로 처리

1. CSS background-image + 미디어쿼리 활용

  • 화면 크기별로 다른 이미지를 미디어쿼리로 적용하는 방식

특징

  • 가장 간단한 방법
  • 화면 너비에 따라 이미지 교체 가능
  • 단, 모바일에서 불필요한 큰 이미지를 먼저 로드할 수 있음 (성능 문제)

사용 상황

  • 화면 크기에 따라 이미지가 달라야 할 때
  • 모바일에선 작은 용량의 이미지를, 데스크탑에선 큰 이미지를 주어 성능과 디자인 모두 최적화 가능

유의사항

  • CSS 파일이 로드될 때 기본 이미지(bg-desktop.jpg)가 먼저 로드되므로 모바일 환경에서 불필요한 큰 이미지가 로드되는 경우가 있음 → 네트워크 비용과 성능 영향
  • 이 문제를 해결하려면 서버에서 device detection 후 적절한 CSS를 제공하거나, JS로 이미지 교체하는 방법도 고려
/* 기본 이미지 (데스크탑) */
body {
  background-image: url('background-desktop.jpg');
  background-size: cover;
  background-position: center;
}

/* 모바일 화면에서 다른 이미지 적용 */
@media (max-width: 768px) {
  body {
    background-image: url('background-mobile.jpg');
  }
}

2. background-size 속성 활용

  • cover를 쓸 때는 중심이 되는 부분을 background-position으로 잘 맞춰줘야 자연스러운 화면이 됨
  • 가로/세로 비율이 다른 이미지가 들어올 때 이미지의 중요한 부분이 잘리는지 체크 필요
속성값 설명 사용처 및 특징
cover - 배경 이미지를 요소의 영역 전체를 덮도록 확대/축소.
- 일부 잘릴 수 있음
- 배경 전체를 꽉 채우고 싶을 때 (헤더, 섹션 등).
- 자연스럽고 시각적으로 깔끔함
contain - 배경 이미지가 요소 안에 전부 들어가도록 확대/축소.
- 이미지가 요소 영역보다 작으면 빈 공간이 생김
- 이미지가 잘리지 않고 전부 보여져야 하는 경우.
- 단, 빈 공간이 생길 수 있음
auto 원본 이미지 크기 그대로 유지 이미지가 작거나, 특정 크기를 유지하고 싶을 때

 

 

[CSS] background 속성

backgroundbackground-image요소의 배경으로 사용할 이미지 URL을 지정기본값: none (배경 이미지 없음)background-repeat배경 이미지를 반복할지 여부와 방향을 설정기본값: repeat (가로, 세로 모두 반복)속성값

u-pub.tistory.com

.hero {
  background-image: url('hero.jpg');
  background-size: cover; /* 영역 전체 덮기 */
  background-position: center center;
  background-repeat: no-repeat;
}

3. 해상도별 이미지 교체 (Retina 대응)

  • 고해상도 디바이스에 맞게 2배 이상 해상도의 이미지를 준비해서 품질을 유지하는 방법
  • 장점 : 고해상도 이미지를 고해상도 기기에만 로드해줌 → 성능과 품질 모두 챙김
  • 단점 :
    • image-set()은 브라우저 호환성이 제한적(크롬, 파이어폭스 지원, IE 미지원)
    • 미디어쿼리 방식은 코드가 좀 늘어나고 관리가 번거로움

대응 방법

1. 미디어쿼리로 해상도 체크해서 배경 이미지 변경

  • 레티나, 고해상도 화면에서 이미지가 깨지지 않음
  • 이미지 용량이 커질 수 있으니 필요할 때만 적용
.section {
  background-image: url('bg.png');
  background-size: cover;
}

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  .section {
    background-image: url('bg@2x.png');
  }
}

2. CSS image-set() 함수 사용

  • 브라우저가 적절한 해상도의 이미지를 자동 선택
  • 간결하고 유지보수에 편리
  • 아직 모든 브라우저에서 완전 지원은 아님 (크롬, 파이어폭스는 지원)
.section {
  background-image: image-set(
    url('bg.png') 1x,
    url('bg@2x.png') 2x
  );
  background-size: cover;
}

4. CSS background-attachment: fixed와 패럴랙스 효과

  • 스크롤할 때 배경 이미지를 고정시켜 움직임 효과를 주는 방식

유의사항

  • 모바일 환경에서는 대부분 지원이 제한적(특히 iOS Safari)
  • 성능 저하가 발생할 수 있으니 섹션 크기나 이미지 용량을 고려해 적용
  • 대안으로 JS를 활용한 패럴랙스 라이브러리를 사용할 수 있음
.parallax-section {
  background-image: url('parallax-bg.jpg');
  background-attachment: fixed;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}

5. 다중 배경 이미지 활용

  • 한 요소에 여러 장의 배경 이미지를 겹쳐서 쓸 수 있음
  • 위치, 반복 여부, 크기를 각각 설정 가능

사용 상황

  • 디자인적으로 여러 레이어를 겹치고 싶을 때
  • 반응형에서 특정 디바이스에 따라 배경 아이콘을 추가/제거 가능
.box {
  background-image: url('icon1.png'), url('pattern.png');
  background-position: left top, center;
  background-repeat: no-repeat, repeat;
  background-size: 50px 50px, auto;
}

6. HTML <picture> 태그 및 srcset vs CSS background-image

  • 백그라운드 이미지는 아니지만, 반응형 이미지를 정확하게 처리할 때 <picture> 태그와 srcset을 활용
  • <picture> 와 srcset은 콘텐츠 이미지에 적합하며, 브라우저가 자동으로 적절한 이미지를 골라줌
  • background-image는 장식적 이미지에 적합하며, CSS로 별도 관리

배경 이미지로 사용하고 싶다면?

  • CSS와 JS를 혼용해, 뷰포트 크기에 따라 JS가 배경 이미지를 바꾸는 방법도 있음
  • 하지만 복잡도 증가, SEO 및 접근성 문제 있음
 

[Responsive] 반응형 이미지 작업 / img 태그 속성(srcset, sizes, picture)

srcset 속성여러 크기 혹은 해상도의 이미지를 한 곳에 모아둔 것브라우저가 자신의 화면 환경에 가장 적합한 이미지를 골라서 다운로드함ex) 480w, 800w, 1200w)는 이미지 각각의 너비(픽셀 단위)를 뜻

u-pub.tistory.com


처리 방법 비교

방법 특징 장저 단점/주의점
미디어쿼리 + background-image 화면 크기별 이미지 교체 간단함 초기 로드 이미지가 클 수 있음
background-size 이미지 크기 자동 조절 이미지 비율 유지 용이 적절한 값 설정 필요
해상도별 이미지 교체 레티나 대응 선명한 이미지 제공 이미지 용량 증가
CSS image-set() 해상도별 이미지 자동 선택 코드 간결, 유지보수 편리 브라우저 지원 제한
background-attachment 패럴랙스 효과 시각적 효과 우수 모바일 지원 제한, 성능 문제 가능
여러 배경 이미지 사용 다중 이미지 레이어링 디자인 자유도 높음 복잡성 증가
picture + srcset 반응형 콘텐츠 이미지 처리 정확한 이미지 선택 배경 이미지에는 직접 적용 어려움
반응형