Les Data URI Base64 en CSS et HTML
Comment les data URI Base64 intègrent images, polices et SVG directement dans le CSS et le HTML : la syntaxe exacte, les compromis de performance et quand l'inlining aide ou nuit.
Un data URI vous permet d'intégrer un fichier entier —une image, une police, une icône SVG— directement dans votre HTML ou votre CSS, sans requête réseau séparée. Le fichier est encodé en Base64 et collé en ligne sous forme de texte. Bien utilisé, il fait gagner des millisecondes au chargement des pages. Utilisé sans précaution, il alourdit vos feuilles de style et ralentit tout. Ce guide montre la syntaxe exacte, les véritables compromis et une règle claire pour savoir quand y recourir.
Vous voulez en générer un tout de suite ? Collez un fichier dans Base64 Decode pour l'encoder, ou utilisez le générateur de data URI dédié pour obtenir une chaîne data: prête à coller.
À quoi ressemble un data URI
Un data URI suit une structure simple définie dans la RFC 2397 :
data:[<media type>][;base64],<data>
Décomposé en parties :
data:— le schéma, commehttps:oumailto:<media type>— le type MIME, p. ex.image/png,font/woff2,image/svg+xml;base64— signale que la charge utile est encodée en Base64 (omettez-le pour les formats en texte brut)<data>— les octets encodés proprement dits
Un exemple réel pour un tout petit PNG :
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" alt="1px dot">
Le navigateur décode cette chaîne et la rend sous forme d'image, sans requête HTTP vers un fichier séparé.
Utiliser les data URI en CSS
L'endroit le plus courant où les data URI brillent, ce sont les arrière-plans CSS, où éliminer une requête évite un aller-retour qui bloque le rendu :
.icon-check {
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0i...");
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
Vous pouvez intégrer des polices web de la même manière dans une règle @font-face :
@font-face {
font-family: "Brand";
src: url("data:font/woff2;base64,d09GMgABAAAAAA...") format("woff2");
font-display: swap;
}
SVG : le seul format que vous ne devriez souvent PAS passer en Base64
Le SVG est du texte, pas du binaire. L'encoder en Base64 fonctionne, mais cela rend en réalité le fichier plus gros et illisible. Pour le SVG, préférez l'encodage URL : il reste plus petit et vous pouvez encore le modifier à la main :
/* Base64 — plus gros, opaque */
background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxu...");
/* Encodé en URL — plus petit, lisible par un humain */
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'...%3E");
Un outil dédié comme le convertisseur SVG vers data URI produit automatiquement la forme optimisée et encodée en URL. Réservez le Base64 aux ressources réellement binaires comme PNG, JPEG et WOFF2.
Le compromis de performance
L'inlining n'est pas gratuit. Chaque data URI comporte les mêmes coûts et avantages :
Avantages
- Une requête HTTP en moins. Pour de toutes petites ressources au-dessus de la ligne de flottaison, supprimer un aller-retour peut améliorer de façon mesurable le premier rendu.
- Livraison atomique. La ressource arrive avec le HTML ou le CSS, il n'y a donc pas de clignotement d'image manquante ni de seconde requête susceptible d'échouer.
- Aucun problème de CORS ni de chemin. Les données voyagent avec le document.
Coûts
- Charge utile ~33 % plus grande. Le Base64 gonfle les données binaires d'environ un tiers (chaque 3 octets deviennent 4 caractères). Une image de 9 Ko devient ~12 Ko de texte.
- Pas de mise en cache indépendante. Un
image.pngséparé est mis en cache une fois et réutilisé sur chaque page. Une image intégrée est retéléchargée dans chaque fichier HTML ou CSS qui la contient, à chaque défaut de cache. - Le CSS bloquant le rendu devient plus lourd. Intégrer de grandes images dans une feuille de style retarde toute la feuille de style, et donc le premier rendu.
- Plus difficile à maintenir. Un blob Base64 de 40 Ko dans votre CSS est illisible et alourdit les diffs.
La pénalité de 33 % sur la taille est inhérente à l'encodage. Si vous voulez comprendre exactement pourquoi cela se produit, consultez qu'est-ce que l'encodage Base64.
Une règle empirique simple
Utilisez un data URI quand toutes ces conditions sont réunies :
- La ressource est petite (une recommandation courante est en dessous de ~2 à 4 Ko).
- Elle est critique et au-dessus de la ligne de flottaison (un logo, une icône principale, un arrière-plan utilisé immédiatement).
- Elle est utilisée sur une ou quelques pages, de sorte que vous ne la dupliquez pas sur tout le site.
Utilisez un <img src> normal ou un url() externe quand :
- La ressource est grande (photos, illustrations) : la surcharge de 33 % et la perte de mise en cache l'emportent sur la requête économisée.
- Elle est réutilisée sur de nombreuses pages : la mise en cache partagée l'emporte.
- Vous comptez sur un CDN, le chargement différé ou un
srcsetresponsive, dont aucun ne fonctionne avec des données intégrées.
Le HTTP/2 et le HTTP/3 modernes multiplexent les requêtes à moindre coût, ce qui a réduit l'intérêt de l'inlining par rapport à l'ancienne époque du HTTP/1.1. Intégrez délibérément, pour des ressources petites et précises, et non comme stratégie générale.
Générer et décoder des data URI
Pour créer un data URI, encodez le fichier en Base64 et enveloppez-le dans le préfixe data:<mime>;base64,. Le générateur de data URI le fait en une seule étape et choisit le bon type MIME pour vous.
Pour relire un data URI vers un fichier, supprimez tout jusqu'à la virgule incluse, puis décodez le reste en Base64. L'outil Base64 vers image prévisualise le résultat, et Base64 vers fichier récupère n'importe quel type de fichier. Tout s'exécute dans votre navigateur, de sorte que les ressources sensibles ne quittent jamais votre machine.
FAQ
Qu'est-ce qu'un data URI Base64 ?
Un data URI est une chaîne qui intègre le contenu d'un fichier directement dans le HTML ou le CSS à l'aide du schéma data:. Lorsque le fichier est binaire (comme un PNG), il est encodé en Base64 et préfixé par data:<mime-type>;base64,. Le navigateur le décode en ligne, aucune requête réseau séparée n'est donc nécessaire.
Les data URI rendent-ils une page plus rapide ?
Ils le peuvent, pour de petites ressources critiques, en supprimant une requête HTTP. Mais ils ajoutent ~33 % à la taille de la ressource et ne peuvent pas être mis en cache indépendamment, de sorte qu'intégrer des fichiers volumineux ou largement réutilisés rend généralement les pages plus lentes au global.
Dois-je encoder du SVG en Base64 pour un data URI ?
En général, non. Le SVG est du texte, donc l'encodage URL le garde plus petit et lisible par un humain. Réservez le Base64 aux formats réellement binaires comme PNG, JPEG et les polices WOFF2.
Quelle est la taille maximale d'un data URI ?
Il n'y a pas de limite stricte dans la spécification, mais les navigateurs ont historiquement plafonné les data URI (l'ancien IE les limitait à 32 Ko). En pratique, gardez-les petits —quelques kilo-octets— car de grandes ressources intégrées alourdissent votre HTML/CSS et nuisent à la mise en cache et aux temps de rendu.
Comment convertir une image en data URI ?
Encodez l'image en Base64 et ajoutez le préfixe data:image/png;base64, (en faisant correspondre le type MIME réel). Le générateur de data URI et Base64 Decode le font dans le navigateur, sans aucun envoi vers un serveur.
Pourquoi mon image en data URI ne s'affiche-t-elle pas ?
Les coupables habituels sont un type MIME erroné, un drapeau ;base64 manquant, des espaces ou des sauts de ligne parasites à l'intérieur de la chaîne, ou un Base64 tronqué. Réencodez le fichier proprement et vérifiez que le préfixe correspond au format réel.
Essayez par vous-même
Utilisez notre outil en ligne gratuit pour commencer immédiatement