Açık ve Koyu Mod İçin Uyarlanabilir Favicon Oluşturma: Kapsamlı Geliştirici Rehberi
Modern web siteleri kullanıcı tercihlerine uyum sağlamalıdır ve favicon teması, kullanıcı deneyimini önemli ölçüde artırabilecek genellikle göz ardı edilen bir ayrıntıdır. Kullanıcılar açık ve koyu modlar arasında geçiş yaptığında, faviconunuz da görsel tutarlılığı korumak için buna uyum sağlamalıdır.
Bu kapsamlı rehber, basit yalnızca HTML çözümlerinden popüler framework'lerdeki gelişmiş JavaScript uygulamalarına kadar her şeyi kapsar. İster statik bir site ister karmaşık bir web uygulaması oluşturuyor olun, projeniz için doğru yaklaşımı bulacaksınız.
Yöntem 1: Yalnızca HTML Çözümü (Çoğu Site İçin Önerilen)
Yalnızca HTML yaklaşımı en güvenilir yöntemdir ve JavaScript gerektirmez. Kullanıcının sistem tercihine göre faviconları otomatik değiştirmek için favicon link etiketlerinin media niteliğindeki CSS medya sorgularını kullanır.
Bu yöntemin neden en iyi çalıştığı:
- Sıfır JavaScript gereksinimi
- Sayfa yüklendiğinde anında çalışır
- Tüm modern tarayıcılar tarafından desteklenir
- Performans yükü yok
Temel Uygulama
<head>
<!-- Varsayılan favicon (desteklenmeyen tarayıcılar için yedek) -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon">
<!-- Açık mod faviconu -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon" media="(prefers-color-scheme: light)">
<!-- Koyu mod faviconu -->
<link rel="icon" href="/favicon-dark.ico" type="image/x-icon" media="(prefers-color-scheme: dark)">
</head>
Eksiksiz Çoklu Boyut Uygulaması
Kapsamlı cihaz desteği için tema varyantlarıyla birden fazla boyut uygulayın:
<head>
<!-- Varsayılan faviconlar (yedek) -->
<link rel="icon" type="image/x-icon" href="/favicon-light.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-light-32x32.png">
<!-- Açık mod faviconları -->
<link rel="icon" type="image/x-icon" href="/favicon-light.ico" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-light-16x16.png" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-light-32x32.png" media="(prefers-color-scheme: light)">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-light.png" media="(prefers-color-scheme: light)">
<!-- Koyu mod faviconları -->
<link rel="icon" type="image/x-icon" href="/favicon-dark.ico" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-dark-16x16.png" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-dark-32x32.png" media="(prefers-color-scheme: dark)">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-dark.png" media="(prefers-color-scheme: dark)">
<!-- Gömülü CSS'li SVG faviconlar -->
<link rel="icon" type="image/svg+xml" href="/favicon-adaptive.svg">
</head>
Uyarlanabilir SVG Favicon
Renk şemasına otomatik uyum sağlayan tek bir SVG favicon oluşturun:
<!-- favicon-adaptive.svg -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<style>
.light-mode { fill: #000000; }
.dark-mode { fill: #ffffff; }
@media (prefers-color-scheme: dark) {
.light-mode { display: none; }
}
@media (prefers-color-scheme: light) {
.dark-mode { display: none; }
}
</style>
<!-- Açık mod tasarımı -->
<circle class="light-mode" cx="16" cy="16" r="12"/>
<text class="light-mode" x="16" y="20" text-anchor="middle" fill="#fff" font-size="14">L</text>
<!-- Koyu mod tasarımı -->
<circle class="dark-mode" cx="16" cy="16" r="12"/>
<text class="dark-mode" x="16" y="20" text-anchor="middle" fill="#000" font-size="14">D</text>
</svg>
Yöntem 2: JavaScript Uygulaması
Sistem tercihlerinin ötesinde dinamik favicon geçişine ihtiyaç duyduğunuzda — özel tema geçişleri veya gerçek zamanlı güncellemeler gibi — JavaScript gereken esnekliği sağlar.
JavaScript'i şu durumlarda kullanın:
- Özel tema kontrolleriniz var
- Uygulamanızın tema durumuyla senkronizasyon gerekiyor
- Sayfa yenilenmeden faviconları güncellemeniz gerekiyor
- Tek sayfa uygulaması (SPA) oluşturuyorsunuz
Temel JavaScript Yaklaşımı
// Temaya göre faviconu güncelleme fonksiyonu
function updateFavicon(theme) {
const favicon = document.querySelector('link[rel="icon"]') ||
document.createElement('link');
favicon.rel = 'icon';
favicon.type = 'image/png';
favicon.href = theme === 'dark' ? '/favicon-dark.png' : '/favicon-light.png';
if (!document.querySelector('link[rel="icon"]')) {
document.head.appendChild(favicon);
}
}
// Sistem tema değişikliklerini dinle
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
// Başlangıç faviconunu ayarla
updateFavicon(mediaQuery.matches ? 'dark' : 'light');
// Değişiklikleri dinle
mediaQuery.addEventListener('change', (e) => {
updateFavicon(e.matches ? 'dark' : 'light');
});
}
Birden Fazla Boyutla Gelişmiş JavaScript
class FaviconManager {
constructor() {
this.sizes = [
{ size: '16x16', selector: 'link[rel="icon"][sizes="16x16"]' },
{ size: '32x32', selector: 'link[rel="icon"][sizes="32x32"]' },
{ size: '180x180', selector: 'link[rel="apple-touch-icon"]' }
];
this.init();
}
init() {
// Başlangıç temasını ayarla
this.updateTheme(this.getSystemTheme());
// Sistem değişikliklerini dinle
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
mediaQuery.addEventListener('change', (e) => {
this.updateTheme(e.matches ? 'dark' : 'light');
});
}
}
getSystemTheme() {
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark' : 'light';
}
updateTheme(theme) {
this.sizes.forEach(({ size, selector }) => {
let link = document.querySelector(selector);
if (!link) {
link = document.createElement('link');
link.rel = size === '180x180' ? 'apple-touch-icon' : 'icon';
link.type = 'image/png';
if (size !== '180x180') link.sizes = size;
document.head.appendChild(link);
}
link.href = `/favicon-${theme}-${size}.png`;
});
// Varsayılan ico dosyasını güncelle
let icoLink = document.querySelector('link[rel="icon"][type="image/x-icon"]');
if (!icoLink) {
icoLink = document.createElement('link');
icoLink.rel = 'icon';
icoLink.type = 'image/x-icon';
document.head.appendChild(icoLink);
}
icoLink.href = `/favicon-${theme}.ico`;
}
// Manuel tema ayarlama yöntemi (özel tema geçişleri için)
setTheme(theme) {
this.updateTheme(theme);
}
}
// Başlat
const faviconManager = new FaviconManager();
// Manuel tema geçişi için dışa aktar
window.faviconManager = faviconManager;
Yöntem 3: Framework Entegrasyonu
Modern framework'ler favicon teması yönetimi için zarif yollar sunar. İşte en popüler JavaScript framework'lerinde uyarlanabilir faviconların nasıl uygulanacağı.
React Uygulaması
import { useEffect, useState } from 'react';
import { Helmet } from 'react-helmet';
function AdaptiveFavicon() {
const [theme, setTheme] = useState('light');
useEffect(() => {
// Sistem tercihini kontrol et
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
setTheme(mediaQuery.matches ? 'dark' : 'light');
// Değişiklikleri dinle
const handleChange = (e) => {
setTheme(e.matches ? 'dark' : 'light');
};
mediaQuery.addEventListener('change', handleChange);
return () => mediaQuery.removeEventListener('change', handleChange);
}, []);
return (
<Helmet>
<link rel="icon" type="image/x-icon" href={`/favicon-${theme}.ico`} />
<link rel="icon" type="image/png" sizes="32x32" href={`/favicon-${theme}-32x32.png`} />
<link rel="apple-touch-icon" sizes="180x180" href={`/apple-touch-icon-${theme}.png`} />
</Helmet>
);
}
Vue 3 Uygulaması
<template>
<div>
<!-- Uygulama içeriğiniz -->
</div>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue'
import { useHead } from '@unhead/vue'
const isDark = ref(false)
const updateFavicon = () => {
const theme = isDark.value ? 'dark' : 'light'
useHead({
link: [
{ rel: 'icon', type: 'image/x-icon', href: `/favicon-${theme}.ico` },
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: `/favicon-${theme}-32x32.png` },
{ rel: 'apple-touch-icon', sizes: '180x180', href: `/apple-touch-icon-${theme}.png` }
]
})
}
onMounted(() => {
// Sistem tercihini kontrol et
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
isDark.value = mediaQuery.matches
// Değişiklikleri dinle
mediaQuery.addEventListener('change', (e) => {
isDark.value = e.matches
})
}
updateFavicon()
})
watch(isDark, updateFavicon)
</script>
Nuxt 3 Uygulaması
// nuxt.config.ts
export default defineNuxtConfig({
app: {
head: {
script: [
{
innerHTML: `
(function() {
const updateFavicon = (isDark) => {
const theme = isDark ? 'dark' : 'light';
const links = [
{ rel: 'icon', type: 'image/x-icon', href: \`/favicon-\${theme}.ico\` },
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: \`/favicon-\${theme}-32x32.png\` }
];
links.forEach(linkData => {
let link = document.querySelector(\`link[rel="\${linkData.rel}"][sizes="\${linkData.sizes || 'any'}"]\`);
if (!link) {
link = document.createElement('link');
Object.assign(link, linkData);
document.head.appendChild(link);
} else {
link.href = linkData.href;
}
});
};
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
updateFavicon(mediaQuery.matches);
mediaQuery.addEventListener('change', e => updateFavicon(e.matches));
}
})();
`
}
]
}
}
})
Yöntem 4: CSS-in-JS Favicon (Gelişmiş)
Canvas ve CSS renkleri kullanarak faviconları dinamik olarak oluşturun:
class DynamicFaviconGenerator {
constructor() {
this.canvas = document.createElement('canvas');
this.ctx = this.canvas.getContext('2d');
this.canvas.width = 32;
this.canvas.height = 32;
}
generateFavicon(theme) {
const colors = {
light: { bg: '#ffffff', text: '#000000' },
dark: { bg: '#000000', text: '#ffffff' }
};
const { bg, text } = colors[theme];
// Canvas'ı temizle
this.ctx.clearRect(0, 0, 32, 32);
// Arka planı çiz
this.ctx.fillStyle = bg;
this.ctx.fillRect(0, 0, 32, 32);
// Kenarlığı çiz
this.ctx.strokeStyle = text;
this.ctx.lineWidth = 2;
this.ctx.strokeRect(2, 2, 28, 28);
// Simge çiz (örnek: harf veya sembol)
this.ctx.fillStyle = text;
this.ctx.font = 'bold 20px Arial';
this.ctx.textAlign = 'center';
this.ctx.textBaseline = 'middle';
this.ctx.fillText('F', 16, 16);
return this.canvas.toDataURL('image/png');
}
updateFavicon(theme) {
const dataUrl = this.generateFavicon(theme);
let link = document.querySelector('link[rel="icon"]');
if (!link) {
link = document.createElement('link');
link.rel = 'icon';
link.type = 'image/png';
document.head.appendChild(link);
}
link.href = dataUrl;
}
}
// Kullanım
const generator = new DynamicFaviconGenerator();
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
generator.updateFavicon(mediaQuery.matches ? 'dark' : 'light');
mediaQuery.addEventListener('change', e => {
generator.updateFavicon(e.matches ? 'dark' : 'light');
});
Tasarım En İyi Uygulamaları
Etkili uyarlanabilir faviconlar oluşturmak, tasarım ilkelerine ve kullanıcı deneyimine dikkatli bir özen gerektirir.
Renk Kontrastı ve Görünürlük
Açık Mod Favicon Tasarımı:
- Saydam veya açık arka planlarda koyu öğeler (metin, simgeler) kullanın
- WCAG AA kontrast oranlarını hedefleyin (minimum 4.5:1)
- Beyaz tarayıcı sekmeleri ve yer imi çubuklarında görünümü test edin
- 16x16 pikselde (en küçük yaygın boyut) netliği sağlayın
Koyu Mod Favicon Tasarımı:
- Saydam veya koyu arka planlarda açık öğeler kullanın
- Koyu tarayıcı temalarına karşı görünürlüğü test edin
- Saf beyaz (#ffffff) yerine kırık beyaz (#f0f0f0) kullanarak daha iyi denge sağlayın
- Tanımlama için ince gölgeler veya dış hatlar düşünün
Tasarım Tutarlılığı İpuçları
- Marka tanınırlığını koruyun - Temel tasarım öğelerinizi tutarlı tutun
- Birden fazla boyutta test edin - 16x16, 32x32 ve 180x180 piksel
- Basit şekiller kullanın - Karmaşık detaylar küçük boyutlarda kaybolur
- Renk körlüğü olan kullanıcıları düşünün - Farklılaştırma için yalnızca renge güvenmeyin
Dosya Adlandırma Kuralı
Favicon dosyalarınızı net adlandırmayla düzenleyin:
/public/
├── favicon-light.ico
├── favicon-dark.ico
├── favicon-light-16x16.png
├── favicon-dark-16x16.png
├── favicon-light-32x32.png
├── favicon-dark-32x32.png
├── apple-touch-icon-light.png
├── apple-touch-icon-dark.png
└── favicon-adaptive.svg
Tarayıcı Uyumluluğu
Uyarlanabilir Faviconlar İçin Modern Tarayıcı Desteği
| Tarayıcı | Media Query Desteği | Notlar |
|---|---|---|
| Chrome 76+ | Tam destek | Mükemmel çalışıyor |
| Firefox 67+ | Tam destek | Mükemmel uygulama |
| Safari 12.1+ | Tam destek | iOS Safari dahil |
| Edge 79+ | Tam destek | Chromium tabanlı Edge |
| Internet Explorer | Destek yok | JavaScript yedek kullanın |
Pazar Kapsamı: Bu sürümler 2025 itibarıyla küresel tarayıcı kullanımının ~%95'ini kapsar.
Yedek Stratejisi
<!-- Her zaman yedekler sağlayın -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon">
<!-- Modern tarayıcılar için gelişmiş destek -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon" media="(prefers-color-scheme: light)">
<link rel="icon" href="/favicon-dark.ico" type="image/x-icon" media="(prefers-color-scheme: dark)">
<!-- Eski tarayıcılar için JavaScript yedek -->
<script>
if (!window.matchMedia || !CSS.supports('(prefers-color-scheme: dark)')) {
// Günün saatine veya diğer buluşsal yöntemlere göre favicon yükle
const hour = new Date().getHours();
const isDark = hour < 6 || hour > 18;
document.querySelector('link[rel="icon"]').href =
isDark ? '/favicon-dark.ico' : '/favicon-light.ico';
}
</script>
Test ve Doğrulama
Manuel Test Kontrol Listesi
- [ ] Açık modda test edin (sistem tercihi)
- [ ] Koyu modda test edin (sistem tercihi)
- [ ] Sistem tema geçişinde faviconun anında değiştiğini doğrulayın
- [ ] Farklı tarayıcılarda kontrol edin (Chrome, Firefox, Safari, Edge)
- [ ] Mobil cihazlarda test edin
- [ ] Eski tarayıcılarda yedek davranışını doğrulayın
Otomatik Test
// Favicon tema geçişi test betiği
function testFaviconThemes() {
const tests = [
{ theme: 'light', expected: '/favicon-light.ico' },
{ theme: 'dark', expected: '/favicon-dark.ico' }
];
tests.forEach(({ theme, expected }) => {
// Media query simüle et
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation(query => ({
matches: query.includes('dark') ? theme === 'dark' : theme === 'light',
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
})),
});
// Güncellemeyi tetikle
updateFavicon(theme);
// Doğrula
const favicon = document.querySelector('link[rel="icon"]');
expect(favicon.href).toContain(expected);
});
}
Performans Optimizasyonu
Tema Faviconlarını Önceden Yükleme
<!-- Anında geçiş için her iki tema faviconunu önceden yükleyin -->
<link rel="preload" as="image" href="/favicon-light.ico">
<link rel="preload" as="image" href="/favicon-dark.ico">
Dosya Boyutlarını Minimize Edin
- ICO dosyalarını 1KB altında tutun
- PNG dosyalarını TinyPNG gibi araçlarla optimize edin
- Basit geometrik tasarımlar için SVG kullanın
- Modern tarayıcılar için WebP formatını düşünün
Önbellekleme Stratejisi
# Favicon önbelleklemesi için Nginx yapılandırması
location ~* \.(ico|png|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
Yaygın Sorunlar İçin Sorun Giderme
Favicon Temalar Arasında Geçiş Yapmıyor
Belirtiler: Sistem tema değişikliklerinden bağımsız olarak favicon aynı kalıyor
Yaygın Nedenler ve Çözümler:
-
Tarayıcı Önbellek Sorunları
<!-- Önbellek kırıcı parametreler ekleyin --> <link rel="icon" href="/favicon-light.ico?v=2025" media="(prefers-color-scheme: light)"> <link rel="icon" href="/favicon-dark.ico?v=2025" media="(prefers-color-scheme: dark)"> -
Yanlış Media Query Söz Dizimi
<!-- Yanlış --> <link rel="icon" href="/favicon-dark.ico" media="dark"> <!-- Doğru --> <link rel="icon" href="/favicon-dark.ico" media="(prefers-color-scheme: dark)">
Birden Fazla Favicon Aynı Anda Yükleniyor
Belirtiler: Network sekmesi birden fazla favicon isteği gösteriyor
Çözüm: Eklemek yerine değiştirmek için JavaScript kullanın:
function replaceFavicon(href) {
// Mevcut tüm favicon bağlantılarını kaldır
document.querySelectorAll('link[rel*="icon"]').forEach(link => link.remove());
// Yeni favicon ekle
const link = document.createElement('link');
link.rel = 'icon';
link.type = 'image/x-icon';
link.href = href;
document.head.appendChild(link);
}
SVG Faviconlar Görüntülenmiyor
Belirtiler: SVG favicon bazı tarayıcılarda çalışıyor ama diğerlerinde çalışmıyor
Temel Neden: Eski tarayıcılarda sınırlı SVG favicon desteği
Çözüm: Her zaman PNG yedekleri sağlayın:
<!-- Modern tarayıcılar: Media query'li SVG -->
<link rel="icon" type="image/svg+xml" href="/favicon-adaptive.svg">
<!-- Yedek: Eski tarayıcılar için PNG -->
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-light-32x32.png" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-dark-32x32.png" media="(prefers-color-scheme: dark)">
Gelişmiş Teknikler
Temaya Duyarlı Bildirim Rozetleri
class NotificationFavicon {
constructor() {
this.canvas = document.createElement('canvas');
this.ctx = this.canvas.getContext('2d');
this.canvas.width = 32;
this.canvas.height = 32;
this.baseIcons = {
light: '/favicon-light-32x32.png',
dark: '/favicon-dark-32x32.png'
};
}
async drawWithBadge(theme, count) {
const baseIcon = new Image();
baseIcon.src = this.baseIcons[theme];
return new Promise(resolve => {
baseIcon.onload = () => {
this.ctx.clearRect(0, 0, 32, 32);
this.ctx.drawImage(baseIcon, 0, 0, 32, 32);
if (count > 0) {
// Bildirim rozetini çiz
const badgeSize = 12;
const x = 32 - badgeSize;
const y = 0;
// Rozet arka planı
this.ctx.fillStyle = '#ff4444';
this.ctx.beginPath();
this.ctx.arc(x + badgeSize/2, y + badgeSize/2, badgeSize/2, 0, 2 * Math.PI);
this.ctx.fill();
// Rozet metni
this.ctx.fillStyle = 'white';
this.ctx.font = '8px Arial';
this.ctx.textAlign = 'center';
this.ctx.textBaseline = 'middle';
this.ctx.fillText(
count > 9 ? '9+' : count.toString(),
x + badgeSize/2,
y + badgeSize/2
);
}
resolve(this.canvas.toDataURL());
};
});
}
async updateWithNotification(count = 0) {
const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
const dataUrl = await this.drawWithBadge(theme, count);
let link = document.querySelector('link[rel="icon"]');
if (!link) {
link = document.createElement('link');
link.rel = 'icon';
document.head.appendChild(link);
}
link.href = dataUrl;
}
}
// Kullanım
const notificationFavicon = new NotificationFavicon();
notificationFavicon.updateWithNotification(3); // 3 sayılı rozet göster
Özet ve Sonraki Adımlar
Uyarlanabilir faviconlar, kullanıcı deneyimini artırmanın küçük ama etkili bir yolunu temsil eder. Detaylara özen gösterir ve kullanıcı tercihlerine saygı duyar, daha profesyonel bir web sitesine katkıda bulunur.
Projeniz İçin Doğru Yöntemi Seçin
| Yöntem | En İyi Kullanım | Karmaşıklık | Performans |
|---|---|---|---|
| Yalnızca HTML | Statik siteler, bloglar, pazarlama sayfaları | Düşük | Mükemmel |
| JavaScript | SPA'lar, özel temalar, dinamik güncellemeler | Orta | İyi |
| Framework entegrasyonu | React/Vue/Nuxt uygulamaları | Orta | İyi |
| Gelişmiş teknikler | Bildirim sistemleri, gerçek zamanlı güncellemeler | Yüksek | Değişken |
Uygulama Kontrol Listesi
Uyarlanabilir favicon sisteminizi dağıtmadan önce:
- [ ] Hem açık hem koyu favicon sürümleri oluşturun
- [ ] Birden fazla tarayıcıda test edin (Chrome, Firefox, Safari, Edge)
- [ ] Sistem tema değişiklikleriyle geçişin çalıştığını doğrulayın
- [ ] Mobil cihazlarda test edin (iOS Safari, Android Chrome)
- [ ] Dosya boyutlarını optimize edin (ICO dosyaları 1KB altında tutun)
- [ ] Eski tarayıcılar için uygun yedekler ekleyin
- [ ] Favicon.im gibi araçlarla uygulamayı doğrulayın
Performans Etkisi
Doğru uygulandığında, uyarlanabilir faviconların performans etkisi minimaldir:
- Yalnızca HTML yöntemi: Sıfır JavaScript yükü
- Dosya boyutu etkisi: Toplam ~2-4KB (açık + koyu sürümler)
- Yükleme süresi: İhmal edilebilir — uygun önbelleklemeyle
İleri Düzey
Şu gelişmiş optimizasyonları düşünün:
- Kritik favicon varlıklarını önceden yükleyin - anında geçiş için
- Modern tarayıcılar için WebP formatı kullanın (PNG yedekleriyle)
- Bildirimler için dinamik favicon rozetleri uygulayın
- Özel etkinlikler veya durumlar için favicon animasyonları ekleyin
Uyarlanabilir faviconları düşünceli bir şekilde uygulayarak, modern kullanıcı tercihlerine uyum sağlayan daha tutarlı ve kullanıcı dostu bir web deneyimi oluşturursunuz.
Use favicon.im to quickly check if your favicon is configured correctly. Our free tool ensures your website's favicon displays properly across all browsers and devices.
Free Public Service
Favicon.im is a completely free public service trusted by developers worldwide.