아이콘

대부분의 이미지는 콘텐츠의 일부이지만 아이콘은 사용자 인터페이스의 일부입니다. UI 텍스트가 조정되고 조정되는 것과 동일한 방식으로 확장되고 조정되어야 합니다.

확장 가능한 벡터 그래픽

사진 이미지의 경우 JPG, WebP, AVIF 등 다양한 이미지 형식을 선택할 수 있습니다. 사진이 아닌 이미지의 경우 PNG (Portable Network Graphics) 형식과 SVG (Scalable Vector Graphics) 형식 중에서 선택할 수 있습니다.

PNG와 SVG는 모두 평평한 색상 영역을 처리하는 데 탁월하며 이미지 배경을 투명하게 할 수 있습니다. PNG를 사용하는 경우 다양한 크기로 여러 버전의 이미지를 만들고 img 요소에 srcset 속성을 사용하여 이미지를 반응형으로 만들어야 할 수 있습니다. SVG를 사용하면 기본적으로 반응형입니다.

PNG (및 JPG, WebP, AVIF)는 비트맵 이미지입니다. 비트맵 이미지는 정보를 픽셀로 저장합니다. SVG에서 정보는 그리기 명령으로 저장됩니다. 브라우저가 SVG 파일을 읽을 때 명령은 픽셀로 변환됩니다. 무엇보다도 이러한 지침은 상대적입니다. 선과 도형을 설명하는 데 사용하는 크기와 관계없이 모든 것이 적절한 선명하게 렌더링됩니다. 크기가 다른 여러 SVG를 만드는 대신 모든 크기에서 작동하는 하나의 SVG를 만들 수 있습니다. srcset 속성을 사용할 필요가 없습니다.

<img src="image.svg" alt="A description of the image." width="25" height="25">
<img src="image.svg" alt="A description of the image." width="250" height="250">

XML은 SVG 파일에 명령을 작성하는 데 사용됩니다. 이는 HTML과 같은 마크업 언어입니다.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="-21 -21 42 42" width="100" height="100">
  <title>Smiling face</title>
  <circle r="20" fill="yellow" stroke="black"/>
  <ellipse rx="2.5" ry="4" cx="-6" cy="-7" fill="black"/>
  <ellipse rx="2.5" ry="4" cx="6" cy="-7" fill="black"/>
  <path stroke="black" d="M -12,5 A 13.5,13.5,0 0,0 12,5 A 13,13,0 0,1 -12,5"/>
</svg>

웃는 얼굴

HTML에 SVG를 넣을 수도 있습니다.

<figure>
  <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="-21 -21 42 42" width="100" height="100">
    <title>Smiling face</title>
    <circle r="20" fill="yellow" stroke="black"/>
    <ellipse rx="2.5" ry="4" cx="-6" cy="-7" fill="black"/>
    <ellipse rx="2.5" ry="4" cx="6" cy="-7" fill="black"/>
    <path stroke="black" d="M -12,5 A 13.5,13.5,0 0,0 12,5 A 13,13,0 0,1 -12,5"/>
  </svg>
  <figcaption>
  A description of the image.
  </figcaption>
</figure>

이와 같이 SVG를 삽입하면 브라우저에서 실행해야 하는 요청이 하나 줄어듭니다. 이미지가 HTML 에 HTML과 함께 제공되므로 이미지가 다운로드될 때까지 기다릴 필요가 없습니다. 또한, 곧 알게 되겠지만 이와 같은 SVG를 삽입하면 스타일을 더 세밀하게 제어할 수 있습니다.

아이콘 및 텍스트

아이콘 이미지는 투명한 배경에 단순한 도형을 사용하는 경우가 많습니다. SVG는 아이콘에 적합합니다.

텍스트와 그 안에 아이콘이 있는 버튼 또는 링크가 있는 경우 아이콘은 표시용입니다. 가장 중요한 것은 텍스트입니다. img 요소를 사용할 때 빈 alt 속성은 이미지가 표시용임을 나타냅니다.

<button>
<img src="hamburger.svg" alt="" width="16" height="16">
Menu
</button>

CSS는 표현용이므로 CSS에 아이콘을 배경 이미지로 넣을 수 있습니다.

<button class="menu">
Menu
</button>
.menu {
  background-image: url(hamburger.svg);
  background-position: 0.5em;
  background-repeat: no-repeat;
  background-size: 1em;
  padding-inline-start: 2em;
}

HTML에 SVG를 삽입하는 경우 aria-hidden 속성을 사용하여 보조 기술로부터 SVG를 숨깁니다.

<button class="menu">
  <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 80" width="16" height="16">
    <rect width="100" height="20" />
    <rect y="30" width="100" height="20"/>
    <rect y="60" width="100" height="20"/>
  </svg>
  Menu
</button>

독립형 아이콘

용도를 명확히 하려면 버튼과 링크 안에 텍스트를 사용하세요. 텍스트 없이 아이콘을 사용할 수 있지만 모든 사람이 특정 아이콘의 의미를 이해한다고 가정해서는 안 됩니다. 확실하지 않으면 실제 사용자를 대상으로 테스트하세요.

텍스트 없이 아이콘을 사용하기로 결정한 경우 아이콘은 더 이상 표시되지 않습니다. CSS의 배경 이미지는 아이콘을 표시하는 적절한 방법이 아닙니다. 아이콘에는 HTML에서 액세스 가능한 이름을 부여해야 합니다.

img 요소를 사용하는 경우 아이콘은 alt 속성에서 액세스 가능한 이름을 가져옵니다.

<button>
<img src="hamburger.svg" alt="Menu" width="16" height="16">
</button>

또 다른 방법은 링크나 버튼 자체에 액세스 가능한 이름을 넣고 이미지가 프레젠테이션용임을 선언하는 것입니다. aria-label 속성을 사용하여 액세스 가능한 이름을 제공합니다.

<button aria-label="Menu">
<img src="hamburger.svg" alt="" width="16" height="16">
</button>

SVG를 HTML에 넣는 경우 링크 또는 버튼에 aria-label 속성을 사용하여 액세스 가능한 이름을 지정하고 아이콘에 aria-hidden 속성을 사용합니다.

<button aria-label="Menu">
  <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 80" width="16" height="16">
    <rect width="100" height="20" />
    <rect y="30" width="100" height="20"/>
    <rect y="60" width="100" height="20"/>
  </svg>
</button>

아이콘 스타일 지정

SVG 아이콘을 HTML에 직접 삽입한 경우 페이지의 다른 요소와 마찬가지로 아이콘 일부의 스타일을 지정할 수 있습니다. img 요소를 사용하여 아이콘을 표시하는 경우에는 이 방법을 사용할 수 없습니다.

다음 예에서 SVG 내 rect 요소에는 버튼 텍스트의 스타일과 일치하는 fillblue이 있습니다.

button {
 color: blue;
}
button rect {
  fill: blue;
}

hoverfocus 스타일을 적용할 수도 있습니다.

button:hover,
button:focus {
  color: red;
}
button:hover rect,
button:focus rect {
  fill: red;
}

자료

아이콘은 사이트 브랜딩에서 중요한 부분입니다. 이제 테마 설정을 사용하여 브랜딩의 다른 측면을 반응형으로 만드는 방법을 알아보겠습니다.

학습 내용 확인하기

아이콘에 관한 지식 테스트

SVG는 단일 파일 또는 <svg> 코드 블록으로 모든 픽셀 밀도를 처리할 수 있습니다.

SVG에는 픽셀 밀도, 배율 또는 확대/축소 수준에서 도형과 선을 그리는 방법이 포함되어 있습니다.
거짓
.png 또는 .jpg와 달리 SVG에는 srcset 또는 <picture> 요소가 필요하지 않습니다.

HTML에 직접 포함된 SVG 코드는 어떤 이점이 있나요?

CSS에서 스타일 지정 가능
SVG 아이콘 모양을 버튼 및 브랜드 색상과 일치시킵니다.
다운로드가 필요하지 않습니다.
모든 안내가 나와 있습니다.
기본적으로 지연 로드됩니다.
귀찮은 다운로드가 없습니다.
CPU 사용량이 적습니다.
내가 만든 거지.
새 애셋 없이 밝은 테마 또는 어두운 테마
미디어 쿼리로 인라인 SVG 스타일을 변경할 수 있습니다.