Biểu tượng

Hầu hết hình ảnh là một phần trong nội dung của bạn nhưng biểu tượng là một phần của giao diện người dùng. Các phiên bản này nên điều chỉnh theo tỷ lệ và điều chỉnh theo cách tương tự như cách văn bản trên giao diện người dùng điều chỉnh theo tỷ lệ và điều chỉnh.

Đồ hoạ vectơ có thể mở rộng

Đối với hình ảnh chụp, có rất nhiều lựa chọn cho định dạng hình ảnh: JPG, WebP và AVIF. Đối với hình ảnh không phải là hình ảnh, bạn có thể chọn giữa định dạng Đồ hoạ mạng di động (PNG) và định dạng Đồ hoạ vectơ có thể mở rộng (SVG).

Cả PNG và SVG đều xử lý tốt các vùng có màu phẳng và cả hai đều cho phép hình ảnh của bạn có nền trong suốt. Nếu sử dụng tệp PNG, có thể bạn sẽ phải tạo nhiều phiên bản hình ảnh ở nhiều kích thước và sử dụng thuộc tính srcset trong phần tử img để giúp hình ảnh thích ứng. Nếu bạn sử dụng SVG, thì định dạng này sẽ có tính đáp ứng theo mặc định.

PNG (và JPG, WebP và AVIF) là hình ảnh bitmap. Hình ảnh Bitmap lưu trữ thông tin dưới dạng pixel. Trong SVG, thông tin được lưu trữ dưới dạng hướng dẫn vẽ. Khi trình duyệt đọc tệp SVG, các hướng dẫn sẽ được chuyển đổi thành pixel. Hơn hết, các hướng dẫn này chỉ mang tính tương đối. Bất kể bạn dùng kích thước nào để mô tả đường kẻ và hình dạng, mọi thứ đều hiển thị ở độ sắc nét phù hợp. Thay vì tạo nhiều SVG có kích thước khác nhau, bạn có thể tạo một SVG sẽ hoạt động ở mọi kích thước. Bạn không cần dùng thuộc tính 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 được dùng để ghi hướng dẫn trong tệp SVG. Đây là ngôn ngữ đánh dấu, giống như 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>

Mặt cười.

Bạn thậm chí có thể đặt SVG vào bên trong HTML.

<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>

Nếu bạn nhúng một tệp SVG như vậy, thì đó là một yêu cầu ít hơn mà trình duyệt cần thực hiện. Bạn không cần phải chờ tải hình ảnh xuống vì hình ảnh đã được tạo bằng HTML ...trong HTML! Ngoài ra, như bạn sẽ sớm phát hiện ra, việc nhúng các tệp SVG (Đồ hoạ vectơ có thể mở rộng) như thế này cũng giúp bạn kiểm soát tốt hơn việc định kiểu cho chúng.

Biểu tượng và văn bản

Hình ảnh biểu tượng thường có các hình dạng đơn giản trên nền trong suốt. SVG là lựa chọn lý tưởng cho các biểu tượng.

Nếu bạn có một nút hoặc đường liên kết có văn bản và biểu tượng bên trong, thì biểu tượng đó có tính chất trình bày. Văn bản là yếu tố quan trọng. Khi sử dụng phần tử img, thuộc tính alt trống cho biết hình ảnh chỉ mang tính trình bày.

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

Vì CSS dùng để trình bày, bạn có thể đặt biểu tượng trong CSS làm hình nền.

<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;
}

Nếu bạn đặt SVG vào trong HTML, hãy dùng thuộc tính aria-hidden để ẩn SVG đó khỏi công nghệ hỗ trợ.

<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>

Biểu tượng độc lập

Sử dụng văn bản bên trong các nút và đường liên kết nếu bạn muốn rõ ràng mục đích của chúng. Bạn có thể sử dụng biểu tượng không cần văn bản nhưng đừng cho rằng mọi người đều hiểu ý nghĩa của biểu tượng cụ thể. Khi nghi ngờ, hãy thử nghiệm với người dùng thực.

Nếu bạn quyết định sử dụng một biểu tượng không có bất kỳ văn bản đi kèm nào, thì biểu tượng đó sẽ không hiển thị được nữa. Hình nền trong CSS không phải là cách phù hợp để hiển thị biểu tượng. Biểu tượng cần được đặt tên có thể tiếp cận trong HTML.

Nếu bạn sử dụng phần tử img, biểu tượng này sẽ lấy tên thành phần hỗ trợ tiếp cận từ thuộc tính alt.

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

Một lựa chọn khác là đặt tên thành phần hỗ trợ tiếp cận vào chính đường liên kết hoặc nút và tuyên bố rằng hình ảnh là trình bày. Dùng thuộc tính aria-label để cung cấp tên thành phần hỗ trợ tiếp cận.

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

Nếu bạn đặt SVG vào bên trong HTML, hãy sử dụng thuộc tính aria-label trên đường liên kết hoặc nút để đặt tên cho thành phần hỗ trợ tiếp cận, đồng thời sử dụng thuộc tính aria-hidden trên biểu tượng.

<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>

Tạo kiểu biểu tượng

Nếu nhúng biểu tượng SVG trực tiếp vào HTML, bạn có thể tạo kiểu cho các phần trong số đó giống như bất kỳ phần tử nào khác trong trang. Bạn không thể làm việc đó nếu sử dụng phần tử img để hiển thị các biểu tượng.

Trong ví dụ sau, các phần tử rect bên trong SVG có giá trị fillblue để khớp với kiểu cho văn bản của nút.

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

Bạn cũng có thể áp dụng kiểu hoverfocus.

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

Tài nguyên

Biểu tượng là một phần quan trọng trong việc xây dựng thương hiệu cho trang web của bạn. Tiếp theo, bạn sẽ tìm hiểu cách làm cho các khía cạnh khác của thương hiệu có tính thích ứng thông qua sức mạnh của giao diện.

Kiểm tra mức độ hiểu biết của bạn

Kiểm tra kiến thức của bạn về các biểu tượng

SVG có thể xử lý mọi mật độ pixel chỉ bằng một tệp hoặc khối mã <svg>.

Đúng
SVG bao gồm cách vẽ các hình dạng và đường kẻ, ở bất kỳ mật độ pixel, tỷ lệ hoặc tỷ lệ thu phóng nào.
Sai
Không giống như .png hoặc .jpg, SVG không cần phải có srcset hoặc phần tử <picture>.

Mã SVG nằm trực tiếp trong HTML có những ưu điểm nào?

Có thể tạo kiểu từ CSS
So khớp hình dạng biểu tượng SVG với nút và màu thương hiệu.
Không cần tải xuống.
Tất cả hướng dẫn đều có ở đây.
Tải từng phần theo mặc định.
Không cần tải xuống để lười biếng.
Mức sử dụng CPU ít hơn.
Tôi bịa đặt đấy.
Giao diện sáng hoặc tối mà không có thành phần mới.
Truy vấn phương tiện có thể thay đổi kiểu SVG cùng dòng!