Favicon
det lille billede en browser viser ved en side
Hvad det er
Et favicon er det ikon, et websted udpeger som sit eget, så browseren kan sætte
det i fanen, i adresselinjen, ud for et bogmærke og i historikken. Navnet er en
sammentrækning af det engelske »favorites icon«, efter bogmærkemenuen i Internet
Explorer, som var den første browser, der ledte efter et. I bestemt form hedder
det faviconet, i flertal favicons, og i daglig tale siges også faneikon. I HTML
erklæres det med et link-element, hvis rel er icon; ældre markup skriver
shortcut icon, og den stavemåde godtager standarden stadig af historiske
grunde.
En side kan erklære flere på én gang, hver med en type, en sizes-værdi og
eventuelt en media-forespørgsel, og browseren vælger det, der passer til det
sted, den tegner. Størrelserne angives i enhedspixel, så 32x32 betyder 32
fysiske punkter, og nøgleordet any er forbeholdt et skalerbart format som SVG.
Står to kandidater lige, vinder den, der er erklæret sidst. Erklærer siden slet
intet ikon, må en browser, der har hentet den over HTTP eller HTTPS, alligevel
spørge efter /favicon.ico i roden af værten: en vane fra slutningen af
1990’erne, som HTML-standarden i dag skriver ned som tilladt adfærd.
.ico-filen bag den vane er en beholder og ikke ét enkelt billede. Én fil kan
rumme flere bitmaps i forskellige størrelser, og browseren tager den ramme, der
passer; den registrerede medietype er image/vnd.microsoft.icon. I dag er PNG
og SVG de almindelige alternativer, og i princippet er ethvert format, browseren
kan afkode, tilladt: en af dette websteds egne sider erklærer et WebP.
Faviconet er det mindste medlem af en familie, som er let at blande sammen.
Apples ikon til hjemmeskærmen, apple-touch-icon, er en separat PNG, som iOS
leder efter under sit eget navn. En installeret webapp henter som regel sine
ikoner fra web app-manifestet, inklusive en »maskable« variant, der er tegnet
med en sikker margen, så platformen kan beskære den til en cirkel eller en
afrundet firkant. Det store billede, en chatapp viser, når nogen indsætter et
link, er et delingsbillede, som sættes af helt anden markup, og som ingen
browser bruger i en fane.
Hvorfor det betyder noget
Den beslutning, et team reelt står over for, er, hvor mange ikonfiler der skal udgives, ud fra hvilken kilde, og hvem der holder dem i takt. Det ligner en designdetalje. I praksis er det et lille stykke infrastruktur, der berører hver platform, sitet optræder på.
Genkendelse er den del, en køber ser først. Ved 16 CSS-pixel i en række på tyve faner er faviconet det eneste stykke af brandet, man kigger på, mens opmærksomheden er et andet sted, og et generisk sidesymbol på den plads ligner et websted, ingen gjorde færdigt. Det samme ikon markerer bogmærket, posten i historikken og hos flere søgemaskiner selve søgeresultatet.
Pris og korrekthed er den del, en udvikler ser. Hver flade har sin egen
konvention: en ICO eller PNG til fanen, en PNG på 180 pixel til Apples
hjemmeskærm, et sæt kvadratiske PNG’er i manifestet til installation og en mørk
fanebjælke, hvor et mørkt mærke forsvinder. Den hurtige vej er en
favicongenerator, der skriver tredive filer og en klump markup, man sætter ind.
Det virker, men indsat markup bærer indsatte påstande, og en sizes-værdi, der
beskriver en andens filer, er forkert fra første dag.
Cachen er den del, ingen planlægger. Browsere gemmer ikoner langt længere end
sider, og standarden siger udtrykkeligt, at de ikke er forpligtet til at
opdatere et ikon, når listen over erklærede ikoner ændrer sig. Et nyt logo når
derfor tilbagevendende besøgende efter browserens tidsplan og ikke sitets.
Gættet på roden har sin egen pris: hvert første besøg spørger efter
/favicon.ico, så et websted uden den fil skriver en 404 i loggen for hver ny
læser, og et websted bag et login kan finde på at svare gættet med en dialog,
der beder om adgangskode.
Hvilket format så? En SVG er én lille fil, der skalerer til enhver størrelse og
kan skifte farver med prefers-color-scheme. En detaljeret tegning klarer sig
til gengæld bedre som raster, med ICO-filen bevaret til software, der kun læser
den. De fleste websteder har brug for både et favicon og et apple-touch-ikon,
fordi hver platform læser sit eget og lader det andet ligge.
Sådan ser det ud i praksis
Dette websteds ikoner kommer fra tegninger og ikke fra en generator. Den visuelle identitet blev bygget ud fra to håndlavede tegninger, og skripter frembringer alt, der afledes af dem, herunder favicon-sættet i de krævede størrelser og berøringsikonerne. Frembringelsen er en opgave, enhver kan køre. Et forældelsestjek sammenligner ændringstidspunktet for hvert afledt aktiv med kildens og fejler, når en afledt fil er ældre, og afledte filer redigeres aldrig i hånden. Siden nævner selv prisen: en hård afhængighed af værktøjskæden.
Kolofonen nævner værktøjerne bag den rørledning: Python, der styrer ImageMagick og genererer ikonsættet ud fra én tegning af mærket.
Sitets egne skabeloner viser de valg, der fulgte. Hver side erklærer en PNG på 180 pixel og en ICO med tre rammer på 16, 32 og 48 pixel. Fanemærket var engang et fedt tandhjul, ud fra teorien om, at en enkel silhuet klarer sig bedre ved 16 pixel end en detaljeret tegning. Vist side om side over en lys og en mørk fanebjælke holdt den detaljerede tegning, og tandhjulet gjorde ikke, så fanen viser nu en rastergengivelse af hjernen, det mærke, sitet bruger overalt. Manifestet lister de samme to rodfiler, og dets ikonsæt læses fra disken i de mapper, generatoren skriver til, med hver størrelse aflæst af filnavnet, så en ny størrelse dukker op i listen, uden at nogen taster den ind.
Hvor det går galt
Det gamle ikon overlever et nyt logo. Sitet udgiver en ny fil under det
samme navn, og tilbagevendende besøgende ser det gamle mærke i ugevis, fordi
browseren har sin egen kopi og ikke skylder siden en opdatering. Udgiv det nye
ikon under et nyt filnavn, ret link-elementerne, og behandl /favicon.ico i
roden som en reserve, der skiftes til sidst.
De erklærede størrelser beskriver en anden fil. Markup kopieret fra et
eksempel lister størrelser, filen aldrig har rummet, og browseren vælger en
kandidat på et falsk grundlag og skalerer den forkerte ramme. Dette websteds
manifest sagde engang, at dets ICO rummede syv rammer, hvor generatoren skrev
tre, og listede en SVG med tre pixelstørrelser, som en vektorfil slet ikke har.
Skriv sizes ud fra selve filen, eller afled værdien af generatorens output.
Et gættet stinavn svarer med noget andet end et ikon. iOS spørger efter
/apple-touch-icon.png i roden af en vært, når en side ikke erklærer et
Apple-ikon, og browsere gør det samme med /favicon.ico. På en vært, hvor
ukendte stier falder igennem til en anden applikation, får gættet en
omdirigering, en loginside eller, på en af dette websteds sider, der serveres
fra en anden vært, en 401. Når ikonet erklæres eksplicit, bliver gættet til en
forespørgsel efter en fil, der findes.
Mærket forsvinder på en mørk fanebjælke. Et sort logo på gennemsigtig
baggrund går i ét med fanerne, når browseren tegner dem i mørkegrå. Vis ikonet
over både en lys og en mørk bjælke, før det vælges, og giv et SVG-favicon en
regel for prefers-color-scheme eller rasterbilledet sin egen baggrund.
Detaljerne bliver til grød ved 16 pixel. Et helt logo med ordmærke, skaleret ned til en faneplads, bliver en plet. Afprøv den rigtige størrelse i en rigtig fane frem for designfilen i 800 %, og vælg den del af mærket, der stadig kan læses dér.
Læs mere
- HTML Standard: linktypen »icon«
— hvordan en browser vælger blandt erklærede ikoner, hvad
sizesbetyder, og hvornår den selv må hente/favicon.ico. - IANA: image/vnd.microsoft.icon — registreringen af medietypen for ICO-formatet.
- Image Resource — W3C’s definition af
et ikon med
src,sizesogtype, som manifester genbruger. - Apple: Configuring Web Applications
— konventionen for
apple-touch-iconog det opslag i roden, iOS falder tilbage på.