AD JB Toolbox 01

CSS 강좌 / 배경색과 배경 이미지 설정하기

CSS에서 배경색은 background-color, 배경 이미지는 background-image로 지정합니다. 이미지를 배경 영역에 꽉 채우려면 cover, 전체 그림을 잘리지 않게 넣으려면 contain을 사용하며, 반복 여부와 위치는 별도로 정합니다. 이미지와 상자의 가로세로 비율이 다를 때 두 크기 설정의 차이가 분명해집니다.

배경색과 배경 이미지는 어떤 역할일까요?

배경색은 이미지가 없는 곳과 투명한 부분 뒤에 보입니다. 이미지가 불러와지지 않을 때도 배경색은 남길 수 있습니다. 배경 이미지 자체는 요소의 내용이 아니며 요소 높이를 자동으로 만들어 주지 않습니다. 비어 있는 div에 이미지 URL만 넣고 높이를 지정하지 않으면 표시할 영역이 없을 수 있습니다.

.sample {
  height: 300px;
  background-color: #e8e8e8;
  background-image: url("images/landscape.webp");
}

본문의 사진·설명 도표처럼 이미지 자체가 정보를 전달하면 HTML의 img와 대체 텍스트를 사용하는 편이 적합합니다. CSS 배경에는 alt 속성을 직접 붙일 수 없습니다. 이 강의의 빈 실습 상자에는 비교 결과를 설명하는 접근성 이름을 넣지만, 장식 배경을 실제 서비스에서 사용할 때마다 역할을 추가할 필요는 없습니다. 중요한 설명문을 배경 이미지에만 넣지 마세요.

실습 이미지와 폴더 준비하기

아래 600×400 실습용 배경 이미지를 열어 landscape.webp라는 이름으로 저장합니다. 좌우의 나무와 가운데 원을 비교 대상으로 사용합니다. 3:2 비율의 그림을 정사각형 상자에 넣으므로 어느 부분이 잘리는지 확인하기 쉽습니다.

background-practice/
  backgrounds.html
  images/
    landscape.webp

전체 예제의 style은 HTML 파일 안에 있으므로 images/landscape.webp는 backgrounds.html을 기준으로 찾습니다. CSS를 별도의 css/style.css로 옮기면 같은 그림의 상대 경로는 ../images/landscape.webp가 됩니다. 별도 CSS 파일의 상대 URL은 HTML 파일이 아니라 CSS 파일을 기준으로 해석됩니다. 대소문자와 확장자도 정확히 맞추세요. 경로 규칙은 MDN의 background-image 설명를 참고하세요.

cover와 contain을 같은 이미지로 비교하기

값 이미지 비율 300×300 상자에 600×400 그림을 넣은 결과
cover 유지 450×300으로 확대·축소하여 좌우가 각각 75px 잘림
contain 유지 300×200으로 축소하여 위아래에 각각 50px 남음
100% 100% 원래 비율이 달라질 수 있음 300×300으로 맞추어 원이 타원처럼 변형될 수 있음

위 계산은 테두리와 padding이 없는 300×300 배경 영역, background-position: center, background-repeat: no-repeat를 전제로 합니다. cover는 빈 공간 없이 채우는 대신 일부를 잘라내고, contain은 전체 그림을 보이는 대신 비율이 맞지 않는 부분에 배경색을 남깁니다. 비율이 이미 같은 경우에는 둘의 차이가 보이지 않을 수 있습니다. 크기 계산과 조건은 MDN의 background-size 설명에서 확인할 수 있습니다.

다음은 전체 예제의 두 배경을 같은 크기로 표시한 결과입니다. cover에서는 좌우 끝 나무 일부가 잘리고, contain에서는 그림 전체와 위아래의 회색 배경이 보입니다.

같은 가로형 그림을 정사각형 배경에 넣은 비교. cover는 좌우가 잘리고 contain은 위아래에 회색 공간이 남습니다.

고유한 크기와 비율이 없는 CSS 그라데이션만으로 cover·contain을 비교하면 같은 영역을 채워 차이가 거의 보이지 않습니다. 잘림 실습에는 지금처럼 크기와 비율이 정해진 이미지 파일을 사용하세요.

반복과 위치는 크기와 별개로 설정합니다

.repeat {
  background-size: 100px auto;
  background-repeat: repeat;
  background-position: left top;
}
.no-repeat {
  background-size: 100px auto;
  background-repeat: no-repeat;
  background-position: left top;
}

background-size: 100px auto는 너비를 100px로 하고 높이는 원래 비율에 맞춥니다. repeat는 작은 그림을 배경 영역에 반복해서 채우고, no-repeat는 한 번만 표시합니다. 기본 반복 때문에 contain의 빈 공간에도 그림이 반복될 수 있으므로 전체 그림 한 장을 비교할 때는 no-repeat를 함께 지정하세요.

background-position은 이미지의 배치 기준을 정합니다. center는 남는 공간이나 잘리는 부분을 양쪽에 나누고, left top은 왼쪽 위를 기준으로 맞춥니다. cover에서 위치를 바꾸면 크기가 달라지는 것이 아니라 잘리는 쪽이 달라집니다. 예제는 속성을 따로 쓰므로 나중에 background 단축 속성을 추가해 다른 설정을 초기화하지 않도록 주의하세요.

복사해서 실행하는 전체 예제

앞서 준비한 폴더의 backgrounds.html에 아래 코드를 UTF-8로 저장하고 엽니다. 네 상자에 같은 그림을 사용해 크기와 반복 여부를 비교합니다. 창이 좁으면 상자 너비는 줄어들고 높이는 300px을 유지하므로 잘림과 빈 공간의 크기도 다시 계산됩니다.

<!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>배경 이미지 크기 비교</title>
  <style>
    * { box-sizing: border-box; }
    body { margin: 24px; color: #333; font: 1rem/1.7 sans-serif; }
    .sample { width: 100%; max-width: 300px; height: 300px; margin-block-end: 24px;
      background-color: #e8e8e8; background-image: url("images/landscape.webp");
      background-position: center; background-repeat: no-repeat; }
    .cover { background-size: cover; }
    .contain { background-size: contain; }
    .repeat { background-size: 100px auto; background-repeat: repeat; background-position: left top; }
    .no-repeat { background-size: 100px auto; background-position: left top; }
  </style>
</head>
<body>
  <h1>배경 이미지 비교</h1>
  <h2>cover:상자를 채움</h2><div class="sample cover" role="img" aria-label="좌우가 잘린 배경"></div>
  <h2>contain:그림 전체를 넣음</h2><div class="sample contain" role="img" aria-label="위아래 빈 공간이 있는 배경"></div>
  <h2>repeat:작게 반복</h2><div class="sample repeat" role="img" aria-label="작은 그림을 반복한 배경"></div>
  <h2>no-repeat:작게 한 번 표시</h2><div class="sample no-repeat" role="img" aria-label="왼쪽 위에 한 장만 표시한 배경"></div>
</body>
</html>

한 속성씩 바꾸어 확인하기

  1. 창을 충분히 넓게 해서 첫 두 상자가 300×300인지 개발자 도구에서 확인합니다. cover의 좌우 잘림과 contain의 위아래 공간을 비교합니다.
  2. cover의 background-position만 left top으로 바꿉니다. 왼쪽 나무가 더 보이고 오른쪽이 더 잘리는지 확인한 뒤 center로 되돌립니다.
  3. contain의 background-repeat를 repeat로 바꿉니다. 빈 공간에 그림 일부가 반복되는지 확인하고 no-repeat로 되돌립니다.
  4. .no-repeat의 크기를 100px auto에서 100% 100%로 바꿉니다. 가운데 원의 비율이 달라지는지 확인하고 원래 값으로 되돌립니다.

그림이 안 보이거나 예상과 다를 때

  • 실습 이미지 링크를 직접 열어 원본 파일이 보이는지 확인합니다. 저장한 파일명과 실제 확장자를 점검하고 HTML·CSS 위치에 맞게 경로를 계산하세요.
  • 개발자 도구의 Network에서 이미지 요청을 확인합니다. 404라면 경로, 응답은 정상인데 안 보이면 상자의 너비·높이와 background-image 적용 규칙을 확인합니다.
  • 빈 공간 없이 채워지기를 원하면 cover인지 확인합니다. 그림 전체를 보이려면 contain과 no-repeat를 함께 지정합니다. 그림 비율이 상자와 같으면 두 값의 차이가 작습니다.
  • 글자 뒤에 배경을 넣는 경우 밝고 어두운 부분 모두에서 글자가 읽히는지 확인합니다. 이 강의에서는 그림 비교가 목적이므로 설명문을 상자 밖에 배치했습니다.

배경 이미지를 억지로 늘려 넣기 전에 “전체가 보여야 하는 그림인가, 일부를 잘라도 되는 장식인가”를 결정하세요. 상품 사진이나 설명 도표처럼 전체 내용이 필요한 이미지와 장식 배경은 같은 기준으로 처리하지 않는 것이 좋습니다.

같은 카테고리의 다른 글
CSS 강좌 / width, height, min, max, box-sizing으로 크기 조절하기

CSS 강좌 / width, height, min, max, box-sizing으로 크기 조절하기

content-box와 border-box의 너비 계산, 최소·최대 크기, 고정 높이와 내용에 맞는 높이를 비교합니다. 화면과 글자 크기를 바꾸며 넘침을 진단하고 백분율 높이의 조건을 확인합니다.

CSS / Tutorial / ul, ol 가운데 정렬하는 방법

CSS / Tutorial / ul, ol 가운데 정렬하는 방법

목록 자체가 아니라 목록 안의 내용만 가운데 정렬할 때는 text-align 속성을 사용합니다. 목록 요소 자체를 가운데 정렬할 때는 margin 속성을 사용합니다. 만약 요소의 내용에 맞게 자동으로 크기가 정해지게 하고 싶으면 display 속성을 사용합니다.

CSS 강좌 / 문단과 목록의 간격, 정렬, 목록 표시 설정하기

CSS 강좌 / 문단과 목록의 간격, 정렬, 목록 표시 설정하기

문단 안의 줄 간격, 문단 사이 여백, 첫 줄 들여쓰기를 구분합니다. 긴 목록을 이용해 outside·inside 표시 위치와 항목 간격을 비교하고 정렬 문제를 확인할 수 있습니다.

CSS 강좌 / CSS를 HTML에 적용시키는 방법

CSS 강좌 / CSS를 HTML에 적용시키는 방법

인라인·내부·외부 CSS의 작성 위치를 비교하고, 두 HTML 페이지가 하나의 스타일시트를 공유하도록 구성합니다. 폴더 위치에 따른 경로와 CSS가 적용되지 않을 때의 확인 순서도 설명합니다.

CSS / Tutorial / 구분선 만드는 방법

CSS / Tutorial / 구분선 만드는 방법

글의 완급 조절, 내용 전환 등을 위해 구분선을 사용하는 경우가 많습니다. 선은 여러 가지 방식으로 만들 수 있는데, 보기 좋게 꾸미는 것은 CSS로 합니다. 아래는 div 태그에 모양을 입혀서 구분선을 만드는 몇 가지 예제입니다.

CSS 강좌 / display와 기본 배치 흐름 이해하기

CSS 강좌 / display와 기본 배치 흐름 이해하기

block·inline·inline-block의 줄바꿈과 크기 적용을 같은 요소로 비교합니다. display: none과 visibility: hidden의 공간 차이, 인라인 이미지의 크기 예외를 실행하며 확인합니다.

CSS / Tutorial / 인용문(Blockquote) 꾸미는 방법

CSS / Tutorial / 인용문(Blockquote) 꾸미는 방법

blockquote 요소의 기본 모양은 양쪽에 여백이 있는 것입니다. 그대로 사용하기보다는 여러 가지 모양으로 꾸미는 것이 일반적입니다. 다음은 아래와 같은 인용문을 꾸미는 몇 가지 예제입니다.

CSS 강좌 / 문법

CSS 강좌 / 문법

CSS의 선택자·선언·구분 기호·주석을 예제로 설명합니다. 잘못된 속성값과 세미콜론 누락을 비교하고, 실행 가능한 예제와 오류 수정 실습으로 브라우저가 적용한 결과를 확인합니다.

CSS 강좌 / 테두리, 둥근 모서리, 그림자 만들기

CSS 강좌 / 테두리, 둥근 모서리, 그림자 만들기

테두리와 윤곽선의 차이, 둥근 모서리, 그림자의 이동·흐림·퍼짐을 설명합니다. 원·타원과 부모 영역에서 그림자가 잘리는 상황을 실제 예제로 비교합니다.

CSS 강좌 / 글꼴, 글자 크기, 굵기, 줄 간격 설정하기

CSS 강좌 / 글꼴, 글자 크기, 굵기, 줄 간격 설정하기

글꼴·글자 크기·굵기·줄 간격을 설정하고 실제 사용된 글꼴을 확인하는 방법을 설명합니다. 단위 없는 line-height와 em 값의 상속 차이를 실행 가능한 예제로 비교합니다.