Cách thêm favicon
Lưu biểu tượng trên trang web và trỏ tới nó bằng thẻ <link rel="icon"> trong <head>:
<link rel="icon" href="/favicon.ico">
Với một trang web cơ bản, chỉ cần vậy là đủ. href có thể trỏ tới tệp .ico, .png hoặc .svg. Ví dụ dưới đây dùng một SVG viết thẳng vào href dưới dạng data URI, nên không cần tệp riêng. Bản xem trước nằm trong một trang khác thì không đổi được tab trình duyệt của bạn, nên script vẽ cùng biểu tượng đó lên một tab giả và ở ba kích thước:
Ở 16 pixel chỉ đủ chỗ cho một chữ cái đậm hoặc một hình đơn giản, còn chi tiết nhỏ sẽ biến mất. Hãy thiết kế biểu tượng cho kích thước nhỏ nhất trước. Đổi fill='%232563eb' sang màu khác (%23 là dấu # đã mã hóa URL) và mọi bản sao đều cập nhật theo.
Cần có những tệp nào
Trình duyệt, điện thoại và trình khởi chạy ứng dụng tìm những biểu tượng khác nhau. Một bộ nhỏ là đủ cho tất cả:
<link rel="icon" href="/favicon.ico" sizes="32x32">
<link rel="icon" href="/icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.webmanifest">
| Tệp | Kích thước | Dùng cho |
|---|---|---|
favicon.ico | 32×32 | Tab trình duyệt, và những công cụ chỉ tìm /favicon.ico |
icon.svg | Bất kỳ (vector) | Tab sắc nét ở mọi mật độ màn hình, trên Chrome, Edge và Firefox |
apple-touch-icon.png | 180×180 | Biểu tượng khi ai đó thêm trang của bạn vào màn hình chính iPhone hoặc iPad |
| Biểu tượng trong manifest | PNG 192×192 và 512×512 | Màn hình chính Android và ứng dụng web đã cài |
Hầu hết trình duyệt cũng tự yêu cầu /favicon.ico ở thư mục gốc của trang khi trang không có thẻ link biểu tượng, nên đặt một tệp favicon.ico ở đó là lựa chọn mặc định hữu ích. Thuộc tính sizes cho trình duyệt biết kích thước của từng tệp để chọn tệp phù hợp nhất. Hãy dùng rel="icon"; rel="shortcut icon" cũ hơn vẫn chạy chỉ vì trình duyệt bỏ qua từ thừa.
Favicon bằng emoji
Với bản thử nghiệm hay trang cá nhân, emoji là cách làm favicon nhanh. Đặt emoji bên trong phần tử <text> của SVG:
%F0%9F%8D%AA là emoji bánh quy đã mã hóa URL. Emoji được vẽ bằng font emoji của hệ điều hành, nên trông khác nhau trên Windows, macOS và Android; với một sản phẩm thật, biểu tượng được thiết kế riêng là lựa chọn tốt hơn.
Biểu tượng đổi theo chế độ tối
Favicon SVG có thể mang CSS riêng, kể cả media query prefers-color-scheme, nên một biểu tượng tối có thể chuyển sang sáng khi trình duyệt dùng giao diện tối:
<!-- icon.svg -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<style>
circle { fill: #111827; }
@media (prefers-color-scheme: dark) { circle { fill: #f9fafb; } }
</style>
<circle cx="16" cy="16" r="14"/>
</svg>
Đổi favicon bằng JavaScript
Các trang web dùng favicon thay đổi để hiện chấm thông báo hoặc màu trạng thái. Vẽ biểu tượng mới lên một <canvas> rồi gán href của thẻ link bằng ảnh của canvas:
Trên một trang thật trong Chrome hoặc Firefox, biểu tượng trên tab đổi mỗi lần href được gán, cùng lúc với ảnh xem trước thay đổi ở đây.
Lỗi thường gặp
- Sai đường dẫn.
href="favicon.ico"là đường dẫn tương đối so với trang hiện tại, nên sẽ hỏng ở/blog/post. Hãy dùng đường dẫn từ gốc:href="/favicon.ico". - Mong biểu tượng mới hiện ra ngay. Trình duyệt lưu favicon trong bộ nhớ đệm rất lâu. Tải lại sau khi xóa bộ nhớ đệm, hoặc đổi URL (
/favicon.ico?v=2) khi bạn thay biểu tượng. - Thu nhỏ một logo nhiều chi tiết xuống 16 pixel. Hãy đơn giản hóa: một chữ cái hoặc một hình có độ tương phản cao.
- Chỉ có SVG. Giữ thêm ICO hoặc PNG cho những trình duyệt không hỗ trợ favicon SVG, và thêm
apple-touch-iconcho iOS. - Đặt thẻ link trong
<body>. Hãy để nó trong<head>cùng thẻ title và các metadata khác.
Câu hỏi thường gặp
Làm sao thêm favicon trong HTML?
Đặt tệp biểu tượng lên trang web và thêm <link rel="icon" href="/favicon.ico"> (hoặc đường dẫn tới tệp PNG hay SVG) bên trong <head>. Khi đó trình duyệt hiển thị biểu tượng trên tab, trong dấu trang và trong lịch sử duyệt web.
Favicon nên có kích thước bao nhiêu?
Hãy có một favicon.ico (hoặc PNG) 32×32 cho tab, một tệp SVG co giãn được mọi kích thước, và một apple-touch-icon PNG 180×180 cho màn hình chính của iPhone. Ứng dụng web có tệp manifest thì khai báo thêm PNG 192×192 và 512×512.
Vì sao favicon không hiển thị?
Nguyên nhân thường gặp là đường dẫn trong href sai, thẻ <link> nằm ngoài <head>, hoặc trình duyệt vẫn hiện biểu tượng cũ trong bộ nhớ đệm. Mở trực tiếp URL của biểu tượng để kiểm tra đường dẫn, rồi tải lại trang sau khi xóa bộ nhớ đệm hoặc thêm phiên bản như ?v=2 vào URL.
Có dùng SVG hoặc PNG làm favicon được không?
Được. Dùng <link rel="icon" href="/icon.svg" type="image/svg+xml"> hoặc <link rel="icon" href="/icon.png" type="image/png">. SVG chạy trên Chrome, Edge và Firefox; hãy giữ thêm một tệp ICO hoặc PNG cho những trình duyệt không hỗ trợ.
Có cần rel="shortcut icon" không?
Không. rel="icon" là giá trị chuẩn. Từ shortcut là phần sót lại từ Internet Explorer cũ và không có tác dụng gì trên các trình duyệt hiện nay.
Có dùng emoji làm favicon được không?
Được, bằng cách bọc emoji trong một SVG: một data URI SVG chứa phần tử <text> với emoji bên trong. Cách này tiện cho bản thử nghiệm, nhưng emoji trông khác nhau trên mỗi hệ điều hành.