img element - by. UXKM

요약 설명

<img> 요소는 문서에 이미지를 삽입할 때 사용하는 비시맨틱 태그로, 시각적 콘텐츠를 표시하는 데 사용됩니다.
src 속성에 이미지의 경로를 지정하고, alt 속성을 통해 이미지의 대체 텍스트를 제공하여 접근성과 정보 전달을 높입니다. 자체적으로 닫는 태그 없이 사용되며, 레이아웃 제어를 위해 width, height 등의 속성과 CSS 스타일을 함께 사용할 수 있습니다. 의미보다는 시각적 표현이 목적인 요소입니다.

주요 역할 및 특징

  1. 이미지 삽입
    • <img> 요소는 문서 내에서 이미지를 표시하는 기본 요소입니다.
    • src 속성을 사용해 이미지의 경로나 URL을 지정합니다.
  2. 대체 텍스트 제공 가능 (alt 속성)
    • alt 속성을 통해 이미지가 로드되지 않을 경우 표시될 텍스트를 지정할 수 있습니다.
    • 또한, 스크린 리더가 해당 텍스트를 읽어줄 수 있어 웹 접근성을 향상시킵니다.
  3. 파일 형식 지원
    • JPEG(JPG), PNG, GIF, SVG, WebP, AVIF 등의 다양한 이미지 포맷을 지원합니다.
    • WebP와 AVIF는 최신 포맷으로, 파일 크기가 작고 성능이 뛰어나지만 브라우저 호환성을 확인해야 합니다.
  4. SEO 및 성능 최적화
    • alt 속성을 올바르게 설정하면 검색 엔진이 이미지를 인식하는 데 도움을 줍니다.
    • loading="lazy" 속성을 사용하면 사용자가 화면을 스크롤할 때 필요한 순간에만 이미지를 로드하여 성능을 향상시킬 수 있습니다.
  5. 반응형 디자인 적용 가능

    width / height 속성을 사용하거나 CSS에서 max-width: 100%를 적용하면 화면 크기에 맞게 유동적으로 조정할 수 있습니다.

CSS 기본 값

<img> 요소는 기본적으로 인라인 레벨 요소입니다.

기본 문법

속성

<img> 속성 요약

  • 속성명
  • 설명
  • src [필수]

    이미지 파일의 경로 지정

  • alt [필수]

    대체 텍스트 (접근성 및 SEO)

  • width/height

    이미지의 크기 지정 (CSS에서 설정 가능)

  • srcset

    반응형 이미지 지원 (다양한 해상도의 이미지 제공)

  • sizes

    srcset과 함께 사용되며, 뷰포트 크기에 따라 적절한 이미지 선택

  • loading [권장]

    지연 로딩(lazy)을 지원하여 성능 최적화

  • decoding

    브라우저가 이미지를 디코딩하는 방법 지정 (sync, async, auto)

  • crossorigin

    CORS 요청을 위한 속성 (anonymous, use-credentials)

  • referrerpolicy

    이미지를 요청할 때 참조 헤더(Referer)를 제어(거의 사용되지 않음)

  • usemap

    <map> 요소와 연결하여 이미지 맵 기능 제공 (거의 사용되지 않음)

  • ismap

    서버 측 이미지 맵을 사용할 때 클릭 좌표 전달 (거의 사용되지 않음)

  • longdesc

    이미지의 긴 설명을 위한 URL 지정, HTML5에서 폐기됐다가 HTML5.1에 다시 추가 (거의 사용되지 않음, aria-describedby 사용을 권장)

[src] 필수 <img src="이미지 경로">

<img> 태그에서 반드시 필요한 속성으로, 이미지 파일의 경로(URL)를 지정합니다.
이미지 경로는 프로젝트 폴더 내의 로컬 경로일 수 있으며, 외부 이미지 서버나 다른 도메인의 이미지 경로를 사용할 수도 있습니다.

[alt] 필수 <img alt="설명 텍스트">

접근성을 위해 필수적인 속성으로, 이미지가 표시되지 않을 경우 대신 보여줄 텍스트를 설정합니다. 이 텍스트는 접근성 도구(스크린 리더 등)에서 이미지를 설명하는 용도로 사용됩니다.

[width / height] 선택 사항 <img width="값" height="값">

이미지의 가로(width), 세로(height) 크기를 지정합니다.
비율 유지(aspect ratio)를 위해 가로/세로 중 한쪽만 설정하거나 CSS를 사용하는 것이 좋습니다.

단위 :
px, %, auto

[srcset] 선택 사항 <img srcset="이미지 경로1, 이미지 경로2">

화면 크기에 따라 다른 이미지를 로드할 수 있도록 설정하는 속성입니다.
이미지를 로드하는 화면 너비의 분기점은 고정된 값이 아니라, 프로젝트의 요구 사항과 사용자 환경에 따라 유동적으로 설정할 수 있습니다.

아래 예제 설명 :
기본적으로 medium.jpg가 로드됩니다.
화면 너비가 600px 이하이면 small.jpg가 사용됩니다.
화면 너비가 1200px 이하이면 medium.jpg가 사용됩니다.
화면 너비가 1800px 이상이면 large.jpg가 사용됩니다.

[sizes] 선택 사항 <img size="값">

srcset과 함께 사용되며, 특정 화면 크기에 따라 이미지가 표시될 공간의 크기를 지정합니다. 브라우저는 이 정보를 바탕으로 srcset에서 최적의 이미지를 선택합니다.
즉, sizes 속성은 이미지 자체의 크기가 아니라 이미지가 표시될 공간 크기를 지정하는 역할을 합니다.

아래 예제 설명 :
브라우저가 srcset을 지원하지 않는 경우 default.jpg가 로드됩니다.
sizes에 두 가지 값이 설정되어 있습니다. (값 1 : (max-width: 800px) 600px / 값 2 : 1200px)
(max-width: 800px) 600px : 화면 너비가 800px 이하일 경우, 브라우저는 600px 너비의 공간에 적합한 이미지를 선택합니다.
1200px : 화면 너비가 800px을 초과하면, 브라우저는 1200px 너비의 공간에 적합한 이미지를 선택합니다.

[loading] 선택 사항 - 권장 <img loading="값">

이미지를 지연 로딩(lazy loading)할지 여부를 설정합니다.

값 :
auto(기본값) : loading 속성을 지정하지 않으면 기본값으로 설정되며, 브라우저가 이미지 로딩 방식을 자동으로 결정합니다. 사용자의 네트워크 상태, 이미지 위치, 중요도 등을 고려하여 적절한 시점에 이미지를 로드합니다.
lazy : 페이지 로딩 성능을 최적화하고, 화면에 보여질 때 이미지를 로드합니다.
eager : 페이지가 로드될 때 즉시 이미지를 불러옵니다.

[decoding] 선택 사항 <img decoding="값">

브라우저가 이미지를 디코딩하는 방식을 지정합니다.
(디코딩이란? 이미지 파일을 화면에 표시할 수 있는 데이터로 변환하는 과정입니다.)

값 :
auto(기본값) : decoding 속성을 지정하지 않으면 기본값으로 설정되며, 브라우저가 최적의 방식으로 디코딩을 결정합니다.
sync : 이미지가 로드되는 즉시 동기적으로 디코딩하여 빠르게 표시하지만, 페이지 렌더링 속도에 영향을 미칠 수 있습니다.
async : 이미지를 비동기적으로 디코딩하여 페이지 내 다른 요소의 렌더링에 영향을 주지 않으며, 페이지 성능을 개선합니다.

[crossorigin] 선택 사항 <img crossorigin="값">

이미지가 외부 도메인에서 로드될 때 CORS(Cross-Origin Resource Sharing) 정책을 설정합니다.
(CORS 정책이란? 다른 출처의 리소스를 안전하게 요청하고 공유할 수 있도록 허용하는 보안 메커니즘입니다.)

값 :
anonymous : 인증 없이 요청합니다. CORS 정책에 맞지 않으면 이미지를 표시하지 않습니다.
use-credentials : 인증 정보(쿠키 등)를 포함하여 요청합니다.

[referrerpolicy] 선택 사항 - 거의 사용 안함 <img referrerpolicy="값">

referrerpolicy는 이미지를 요청할 때 어떤 정보를 Referer 헤더에 포함시킬지 설정하는 옵션입니다. 쉽게 말해, 어떤 링크를 클릭하거나 이미지를 로드할 때, 어떤 주소 정보를 보낼지를 결정하는 것입니다.
(Referer 헤더란? 웹 브라우저가 요청을 보낼 때, 현재 요청을 발생시킨 이전 페이지의 URL 정보를 서버에 전달하는 HTTP 헤더입니다.)

값 :
no-referrer : 아예 아무 정보도 보내지 않습니다.
origin : 도메인(웹사이트 주소)만 보냅니다.
strict-origin : 도메인만 보내는데, 보안상 동일 출처(예: 같은 웹사이트)일 때만 보냅니다.
unsafe-url : 웹 페이지의 전체 주소를 보냅니다.

[usemap] 선택 사항 - 거의 사용 안함 <img usemap="#map">

usemap 속성은 <img> 요소와 연결된 이미지 맵을 사용하도록 지정합니다. 이미지 맵은 클릭 가능한 특정 영역을 이미지 안에서 정의할 수 있게 해주며, 해당 영역을 클릭하면 연결된 링크로 이동합니다.

아래 예제 설명 :
이미지 맵을 정의하는 HTML 요소인 <map>과 함께 사용됩니다.
usemap 속성의 값은 연결된 <map> 요소의 name 속성과 일치해야 합니다.
(아래 예제는 <img> 요소의 usemap="#map"<map> 요소의 name="map" 값이 일치)
<map> 요소 내에서는 <area> 요소를 사용하여 이미지 내의 클릭 가능한 영역을 정의합니다.

[map 요소] 자세한 설명 보기

[ismap] 선택 사항 - 거의 사용 안함 <img ismap>

ismap 속성은 서버에서 클릭 좌표를 해석하는 서버 측 이미지 맵을 만들 때 사용됩니다.
반드시 <a> 태그 안에서 사용해야 하며, 클릭 시 x,y 형식으로 좌표가 URL에 포함됩니다. 클라이언트 측(usemap)과 달리, 영역을 미리 정의하지 않고 서버에서 처리할 때 유용합니다.

[longdesc] 선택 사항 - 거의 사용 안함 <img longdesc="URL">

이미지를 설명하는 긴 설명을 포함하는 페이지 URL을 지정합니다.
현재는 사용되지 않으며 aria-describedby 또는 <figure><details>와 같은 대체 방법이 권장됩니다.

기존 사용 방법 (longdesc 속성 사용 - 현재 비권장)

longdesc 속성을 사용하여 별도의 페이지에 이미지 설명을 제공합니다. 하지만 접근성이 떨어지고, 브라우저 지원이 제한적이므로 현재는 권장되지 않습니다.

현재 권장되는 방법 (aria-describedby 활용)

aria-describedby 속성을 사용하여 이미지에 대한 긴 설명을 제공할 수 있습니다. 접근성이 높고, SEO에도 유리합니다.

다른 권장 방법 (<figure><details> 사용)

<details><summary>를 활용하면 사용자가 원할 때만 설명을 열어볼 수 있어 UI를 깔끔하게 유지할 수 있습니다.
또한, <figcaption>을 사용하여 이미지 설명을 포함하면 의미론적 HTML 구조를 더욱 강화할 수 있습니다.

예제

아래 모든 예제에는 지연 로딩(loading="lazy")이 적용됩니다.

기본 이미지 삽입 및 크기 지정

이미지의 원본 비율을 유지하려면 width 값을 지정하고 height 값을 auto로 설정합니다. 반대로, height에 특정 값을 지정하고 widthauto로 설정하는 방법도 가능합니다.

반응형 이미지 (max-width: 100%)

max-width: 100%;를 지정하면 이미지가 부모 요소의 너비를 초과하지 않고 자동으로 축소되어, 화면 크기에 따라 유동적으로 조정됩니다.

(Full screen) 버튼을 클릭하여 전체 화면에서 브라우저 가로 크기를 조정해 보세요.

반응형 이미지 (srcset 활용)

max-width: 100%;를 지정하면 이미지가 부모 요소의 너비를 초과하지 않고 자동으로 축소되어, 화면 크기에 따라 유동적으로 조정됩니다.

(Full screen) 버튼을 클릭하여 전체 화면에서 브라우저 가로 크기를 조정해 보세요.

위 예제에서 브라우저 크기에 따라 이미지가 변경되지 않는다면, 아래 버튼을 클릭하여 새 창에서 확인해 보세요.

새창에서 예제 확인

CSS와 같이 사용하여 부모 요소에 꽉 차게

object-fit: cover; (비율 유지 + 꽉 차게)

CSS의 object-fit: cover; 속성을 사용하면, 이미지가 비율을 유지하면서 부모 요소를 꽉 채우도록 조정됩니다. 일부 이미지가 잘릴 수 있지만, 배경 이미지처럼 화면을 꽉 채우는 효과를 제공합니다.

(Full screen) 버튼을 클릭하여 전체 화면에서 브라우저 가로 크기를 조정해 보세요.

object-fit: contain; (비율 유지 + 잘리지 않게)

CSS의 object-fit: contain; 속성을 사용하면, 이미지가 비율을 유지하면서 부모 요소 안에 맞게 조정됩니다. 이미지가 잘리지 않지만, 부모 요소의 가로세로 비율과 이미지의 비율이 다를 경우 빈 공간이 생길 수 있습니다.

(Full screen) 버튼을 클릭하여 전체 화면에서 브라우저 가로 크기를 조정해 보세요.

주의사항

  • 접근성과 SEO 최적화를 위해 모든 <img> 요소에는 alt 속성을 추가해야 합니다.
  • width 또는 height 값을 잘못 지정하면 이미지 비율이 깨질 수 있으므로 주의해야 합니다. 특별한 경우가 아니라면 height를 설정하지 않고 width만 지정하여 비율을 유지하는 것이 좋습니다.
  • 고해상도 이미지의 용량이 클 경우, WebP 또는 AVIF 포맷을 활용하거나 외부 이미지 압축 사이트를 이용해 용량을 줄이면 웹사이트 성능을 향상할 수 있습니다.
    JPG, PNG 용량 압축 사이트 바로가기
  • 정보 전달의 의미가 없는 디자인적 이미지나 UI 요소(아이콘, 배경 등)는 <img> 요소보다 CSS의 background-image를 활용하는 것이 더 효율적입니다.