← Blog

Die dynamische Welt animierter SVG-Favicons

Eine neue Ära für Browser-Tabs

Erinnern Sie sich an die winzigen Symbole in Ihren Browser-Tabs? Das sind Favicons, ursprünglich statisch, verpixelt und meist unbeachtet. Doch das Web entwickelt sich weiter und mit ihm seine Elemente. Willkommen in der Ära der SVG-Favicons (Scalable Vector Graphics), die bei Tab-Symbolen alles verändern. Anders als die klassischen, pixelbasierten Favicons sind SVGs vektorbasiert und liefern scharfe, skalierbare Bilder ohne Qualitätsverlust. Und wissen Sie was? Sie können tanzen, blinken und sich verändern – sie lassen sich animieren!

SVG-Favicons: nicht nur Symbole, sondern Mini-Leinwände

Mit SVGs als Favicons wird jedes winzige Symbol zur Mini-Leinwand für Kreativität. Da SVG auf XML basiert, lässt es sich direkt in HTML einbetten. Das bedeutet mehr als statische Bilder: Sie sehen interaktive, dynamische kleine Kunstwerke im Tab Ihres Browsers.

Emojis und Text: Favicons mit Persönlichkeit

Sie können jetzt Ihre Lieblings-Emojis und Botschaften direkt ins Favicon setzen. Betten Sie ein Emoji ein oder fügen Sie einen Buchstaben hinzu, und Sie haben ein Favicon, das nicht nur ein Symbol, sondern ein Statement ist. Ein Vorgeschmack, wie das geht:

<link rel="icon" id="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>👨‍💻</text></svg>">

Setzen Sie dies in den <head> Ihres HTML, und das Symbol erscheint.

JavaScript: Favicons zum Leben erwecken

Aber warum bei statisch aufhören? Animieren wir! Mit etwas JavaScript-Magie können sich Favicons verändern, den Ausdruck wechseln oder mit der Zeit sogar Botschaften übermitteln.

window.addEventListener("load", (event) => {
    let intervalId = null;

    // Start the interval when the page is first loaded
    startInterval();

    // Listen for visibilitychange and pagehide events
    document.addEventListener('visibilitychange', handleVisibilityChange);
    window.addEventListener('pagehide', handlePageHide);

    const emojis = ['👋', '💼', '💻','🔧','📊','📱', '👨‍💻','🚀','💡', '📈','📝','💡','📢'];
    const icon = document.getElementById('icon');
    let currentIndex = 0;
    const text = "I"
    let message;
    let faviconText;

    function setFavicon(item) {
        // Update the icon element with the new message
        icon.href = `data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200"><text id="t1" x="50%" y=".9em" fill="hsl(36, 100%, 50%)" font-size="180" font-family="system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'" text-anchor="middle">${item}</text>
</svg>`;

    }

    function startInterval() {
        clearInterval(intervalId);
        intervalId = setInterval(() => {
            // Get the current message and shift it two characters to the left
            if(currentIndex == 0) {
                message = text;
            }

            // If we've reached the end of the message, show a random emoji
            if (message.length < 1) {
                const emoji = emojis[Math.floor(Math.random() * emojis.length)];
                message = emoji;
                currentIndex = 0;
                faviconText = emoji
            } else {
                currentIndex += 2;
                faviconText = message.substr(0, 2);
            }

            setFavicon(faviconText);
            message = message.substr(2);
        }, 1500);
    }

    function stopInterval() {
        setFavicon(emojis[Math.floor(Math.random() * emojis.length)]);
        clearInterval(intervalId);
        intervalId = null;
    }

    function handleVisibilityChange() {
    if (document.hidden) {
        // Page is hidden, stop the interval after x seconds
        setTimeout(() => {
            stopInterval();
        }, 60000);

    } else {
        // Page is visible, start the interval
        startInterval();
    }
    }

    function handlePageHide() {
        // Page is being unloaded, stop the interval
        setTimeout(() => {
            stopInterval();
        }, 60000);
    }
});

Dieses Skript ist die Geheimzutat. Es wechselt das Favicon anhand eines Arrays aus Emojis und Text und reagiert auf verschiedene Browser-Ereignisse, um die Animation zu starten und zu stoppen.

Browser-Unterstützung

Derzeit unterstützen Chrome, Firefox und Edge diese Funktion. Von den grösseren Browsern fehlt sie nur in Safari.

SVG favicons – Can I use…

Schlussgedanken: eine kleine Revolution

Animierte SVG-Favicons mit Emojis und Text sind mehr als hübsche Symbole. Sie verbinden Kunst und Technik und eröffnen neue Wege für Kreativität und Interaktion im Webdesign. Diese Symbole mögen klein sein, doch ihr möglicher Einfluss auf Nutzererlebnis und Markenauftritt ist enorm. Im Webdesign machen oft die kleinsten Details den grössten Unterschied. Willkommen in der dynamischen, ausdrucksstarken Zukunft der Favicons.