web-dev-qa-db-fra.com

Comment puis-je afficher un symbole "Recharger" en HTML sans charger une image via HTTP?

Je souhaite afficher un symbole d'actualisation dans une application HTML/JavaScript que je crée, mais je ne souhaite effectuer aucune requête HTTP pour charger une image. Comment puis-je le faire de manière fiable sur tous les principaux navigateurs?

La valeur Unicode la plus proche que j'ai pu trouver est: ↺ (↺) Mais la flèche pointe dans le mauvais sens.

Existe-t-il une autre valeur Unicode qui fonctionne?

Existe-t-il une police Webdings qui fonctionne? (Ils ne fonctionnent généralement pas dans Opera et Firefox.)

Existe-t-il un moyen de créer une image dans JS en utilisant une source d’image base64 fournie par une chaîne à partir de JavaScript?

MODIFIER:

La raison en est pas des frais généraux. L'application en cours de création doit être autonome dans un seul fichier javascript, sans autres dépendances. C'est un utilitaire de développement qui peut être ajouté à n'importe quel projet, sans avoir besoin d'un réseau.

35
John Fowler

Si le navigateur prend en charge le chargement de données d'image à partir d'une chaîne Base64, vous pouvez utiliser img et définir sa src au format suivant:

data:[<mediatype>][;base64],<data>

par exemple:

data:image/gif;base64,R0lGODl...

Démo JSFiddle

10
fardjad

Si vous trouvez le caractère &#8635; (↻), c'est-à-dire U + 21BB, une flèche acceptable pour vos besoins (sa flèche peut ne pas être placée de la même manière que dans les icônes de rechargement courantes), vous pouvez l'utiliser de manière plutôt sécurisée:

<style>
.reload { font-family: Lucida Sans Unicode }
</style>

<span class=reload>&#x21bb;</span>

La police Lucida Sans Unicode contient le symbole. Elle est disponible dans pratiquement tous les systèmes Windows existants. Selon MS info , il était même inclus dans Windows 98 (et Windows 95 plus).

On peut raisonnablement s’attendre à ce que les systèmes autres que Windows aient le symbole dans la police some et que les navigateurs savent comment le récupérer. Et les polices qui le contiennent ont des formes assez similaires. (Mais si le symbole doit correspondre stylistiquement au texte de votre document, vous devez étudier la situation de manière plus détaillée et essayer de vous assurer que toutes les polices de votre liste de polices, ou «pile de polices», la contiennent.)

83
Jukka K. Korpela

Caractère Unicode

Il existe au moins deux caractères Unicode pouvant servir d'icônes Refresh ou Reload:

  • FLÈCHE À CERCLE SÉPARÉ DE HORLOGES
    U + 27F3
  • FLÈCHE CERCLE OUVERT DANS LE TEMPS
    U + 21BB

Le premier n'apparaît pas dans iOS 7 ou 8 ou 9 dans Safari ou Chrome. Donc, étant donné cela, et compte tenu de la réponse de Paul D. White , je recommande d’utiliser le second, CLOCKWISE OPEN CIRCLE ARROW .

Conseil: Si vous utilisez un ordinateur Mac, procurez-vous l’application gratuite UnicodeChecker . Vous pouvez rechercher des caractères par nom et une liste de polices (sur votre Mac particulier) contenant un glyphe pour ce caractère.

Icon Font

Certaines polices ont été créées avec des icônes vectorielles modulables à la place des glyphes de caractères normaux. 

39
Basil Bourque

L'équivalent dans le sens des aiguilles d'une montre de votre caractère Unicode est &#8635;, ↻ (bien que, comme David C. Bishop notes dans les commentaires, les Chromebooks utilisent #27f2, ).

L'utilisation d'un caractère de texte est une option, mais Windows XP peut ne pas afficher le caractère (selon le caractère que vous utilisez et la police dans laquelle vous l'affichez). @Jukka K. Korpela note que ce caractère est inclus dans la police Lucida Sans Unicode et qu'il devrait donc fonctionner correctement, même sous Windows XP.

En ce qui concerne les polices Wingdings, pour éviter une requête HTTP, vous devez être sûr que la police en question sera installée sur les ordinateurs de l’utilisateur final. Je ne pense pas qu’il existe une police Wingdings commune à plusieurs plates-formes (j’ai peut-être tout à fait tort).

Vous pouvez en effet créer une image à partir d'une chaîne contenant la représentation codée en base64 de l'image à l'aide de JavaScript. Vous pouvez le faire comme ceci:

var image = new Image();
image.src = 'data:image/gif;base64,' + BASE64_ENCODED_STRING; // Replace gif with whatever image format it actually is

Il se peut que Data-uri ne fonctionne pas très bien dans Internet Explorer 8 et les versions antérieures, sur lesquelles les utilisateurs de Windows XP sont peut-être bloqués. (Et vous n’avez pas besoin de JavaScript pour cela: vous pouvez simplement mettre une balise <img> dans votre page avec cet attribut src.)

13
Paul D. Waite

Caractère Unicode 6

'FLÈCHES VERS LE HAUT ET EN HAUTEUR VERS LE HAUT (U + 1F503) ????

Malheureusement, la prise en charge des polices pour le glyphe n’est pas la meilleure des solutions, donc "tous les principaux navigateurs" pourrait sembler un peu louche ...

9
Leia

Vous parlez de "tous les principaux navigateurs", supposons donc que:

  1. tout le monde n'a pas javascript
  2. tout le monde ne peut pas incorporer de polices (blackberry, etc.)
  3. tout le monde ne prend pas en charge toutes les représentations UNCODE (Windows XP)
  4. tout le monde ne supporte pas les données en ligne uri (IE7-)

Alors que reste-t-il? Je suggérerais un élément IMG conforme à HTML1, qui sera également mis en cache après le premier chargement:

<img src="/refresh.gif" alt="refresh">

Cela fonctionnera dans tous les navigateurs que je connaisse, à l'exception de LYNX et d'autres navigateurs basés sur du texte. Mais ils afficheront "refresh" à la place, donc ça va.

Si vous voulez vraiment éviter cette demande supplémentaire de 2 octets pour les navigateurs "modernes", vous pouvez utiliser des commentaires conditionnels pour IE7-:

<!--[if lte IE 7]>
<img src="refresh.gif" alt="refresh">
<![endif]-->

Et quelque chose comme ça pour le reste:

<img src="data:image/gif;base64,..." alt="refresh">

Si vous êtes à la recherche de nouveautés pour les plus récents, vous pouvez utiliser les ombres de la boîte CSS ( demo ):

.refresh{
    border-radius: 0;
    display: inline-block;
    width: 1px;
    height: 1px;
    box-shadow: 0px 0px rgba(0,0,0,0),0px 1px rgba(0,0,0,0),0px 2px rgba(0,0,0,0),0px 3px rgba(0,0,0,0),0px 4px rgba(0,0,0,0),0px 5px rgba(0,0,0,0),0px 6px rgba(0,0,0,0),0px 7px rgba(0,0,0,0),0px 8px rgba(0,0,0,0),0px 9px rgba(0,0,0,0),0px 10px rgba(0,0,0,0),0px 11px rgba(0,0,0,0),0px 12px rgba(0,0,0,0),0px 13px rgba(0,0,0,0),0px 14px rgba(0,0,0,0),0px 15px rgba(0,0,0,0),1px 0px rgba(0,0,0,0),1px 1px rgba(0,0,0,0),1px 2px rgba(0,0,0,0),1px 3px rgba(0,0,0,0),1px 4px rgba(0,0,0,0),1px 5px rgba(0,0,0,0),1px 6px rgba(0,0,0,0),1px 7px rgba(0,0,0,0),1px 8px rgba(0,0,0,0),1px 9px rgba(0,0,0,0),1px 10px rgba(0,0,0,0),1px 11px rgba(0,0,0,0),1px 12px rgba(0,0,0,0),1px 13px rgba(0,0,0,0),1px 14px rgba(0,0,0,0),1px 15px rgba(0,0,0,0),2px 0px rgba(0,0,0,0),2px 1px rgba(0,0,0,0),2px 2px rgba(0,0,0,0),2px 3px rgba(0,0,0,0),2px 4px rgba(0,0,0,0),2px 5px rgba(0,0,0,0.06),2px 6px rgba(0,0,0,0.55),2px 7px rgba(0,0,0,0.79),2px 8px rgba(0,0,0,0.86),2px 9px rgba(0,0,0,0.86),2px 10px rgba(0,0,0,0.65),2px 11px rgba(0,0,0,0.31),2px 12px rgba(0,0,0,0),2px 13px rgba(0,0,0,0),2px 14px rgba(0,0,0,0),2px 15px rgba(0,0,0,0),3px 0px rgba(0,0,0,0),3px 1px rgba(0,0,0,0),3px 2px rgba(0,0,0,0),3px 3px rgba(0,0,0,0),3px 4px rgba(0,0,0,0.25),3px 5px rgba(0,0,0,0.83),3px 6px rgba(0,0,0,0.86),3px 7px rgba(0,0,0,0.83),3px 8px rgba(0,0,0,0.69),3px 9px rgba(0,0,0,0.74),3px 10px rgba(0,0,0,0.86),3px 11px rgba(0,0,0,0.86),3px 12px rgba(0,0,0,0.6),3px 13px rgba(0,0,0,0.06),3px 14px rgba(0,0,0,0),3px 15px rgba(0,0,0,0),4px 0px rgba(0,0,0,0),4px 1px rgba(0,0,0,0),4px 2px rgba(0,0,0,0),4px 3px rgba(0,0,0,0.25),4px 4px rgba(0,0,0,0.83),4px 5px rgba(0,0,0,0.83),4px 6px rgba(0,0,0,0.43),4px 7px rgba(0,0,0,0),4px 8px rgba(0,0,0,0),4px 9px rgba(0,0,0,0),4px 10px rgba(0,0,0,0.13),4px 11px rgba(0,0,0,0.69),4px 12px rgba(0,0,0,0.86),4px 13px rgba(0,0,0,0.6),4px 14px rgba(0,0,0,0),4px 15px rgba(0,0,0,0),5px 0px rgba(0,0,0,0),5px 1px rgba(0,0,0,0),5px 2px rgba(0,0,0,0),5px 3px rgba(0,0,0,0.69),5px 4px rgba(0,0,0,0.86),5px 5px rgba(0,0,0,0.25),5px 6px rgba(0,0,0,0),5px 7px rgba(0,0,0,0),5px 8px rgba(0,0,0,0),5px 9px rgba(0,0,0,0),5px 10px rgba(0,0,0,0),5px 11px rgba(0,0,0,0),5px 12px rgba(0,0,0,0.69),5px 13px rgba(0,0,0,0.86),5px 14px rgba(0,0,0,0.25),5px 15px rgba(0,0,0,0),6px 0px rgba(0,0,0,0),6px 1px rgba(0,0,0,0),6px 2px rgba(0,0,0,0.13),6px 3px rgba(0,0,0,0.86),6px 4px rgba(0,0,0,0.6),6px 5px rgba(0,0,0,0),6px 6px rgba(0,0,0,0),6px 7px rgba(0,0,0,0),6px 8px rgba(0,0,0,0),6px 9px rgba(0,0,0,0),6px 10px rgba(0,0,0,0),6px 11px rgba(0,0,0,0),6px 12px rgba(0,0,0,0.13),6px 13px rgba(0,0,0,0.86),6px 14px rgba(0,0,0,0.65),6px 15px rgba(0,0,0,0),7px 0px rgba(0,0,0,0),7px 1px rgba(0,0,0,0),7px 2px rgba(0,0,0,0.43),7px 3px rgba(0,0,0,0.86),7px 4px rgba(0,0,0,0.31),7px 5px rgba(0,0,0,0),7px 6px rgba(0,0,0,0),7px 7px rgba(0,0,0,0),7px 8px rgba(0,0,0,0),7px 9px rgba(0,0,0,0),7px 10px rgba(0,0,0,0),7px 11px rgba(0,0,0,0),7px 12px rgba(0,0,0,0),7px 13px rgba(0,0,0,0.75),7px 14px rgba(0,0,0,0.83),7px 15px rgba(0,0,0,0),8px 0px rgba(0,0,0,0),8px 1px rgba(0,0,0,0.43),8px 2px rgba(0,0,0,0.69),8px 3px rgba(0,0,0,0.86),8px 4px rgba(0,0,0,0.6),8px 5px rgba(0,0,0,0.31),8px 6px rgba(0,0,0,0),8px 7px rgba(0,0,0,0),8px 8px rgba(0,0,0,0),8px 9px rgba(0,0,0,0),8px 10px rgba(0,0,0,0),8px 11px rgba(0,0,0,0),8px 12px rgba(0,0,0,0),8px 13px rgba(0,0,0,0.69),8px 14px rgba(0,0,0,0.86),8px 15px rgba(0,0,0,0),9px 0px rgba(0,0,0,0),9px 1px rgba(0,0,0,0.48),9px 2px rgba(0,0,0,0.86),9px 3px rgba(0,0,0,0.86),9px 4px rgba(0,0,0,0.86),9px 5px rgba(0,0,0,0.13),9px 6px rgba(0,0,0,0),9px 7px rgba(0,0,0,0),9px 8px rgba(0,0,0,0),9px 9px rgba(0,0,0,0),9px 10px rgba(0,0,0,0),9px 11px rgba(0,0,0,0),9px 12px rgba(0,0,0,0),9px 13px rgba(0,0,0,0.75),9px 14px rgba(0,0,0,0.83),9px 15px rgba(0,0,0,0),10px 0px rgba(0,0,0,0),10px 1px rgba(0,0,0,0),10px 2px rgba(0,0,0,0.79),10px 3px rgba(0,0,0,0.86),10px 4px rgba(0,0,0,0.6),10px 5px rgba(0,0,0,0),10px 6px rgba(0,0,0,0),10px 7px rgba(0,0,0,0),10px 8px rgba(0,0,0,0),10px 9px rgba(0,0,0,0),10px 10px rgba(0,0,0,0),10px 11px rgba(0,0,0,0),10px 12px rgba(0,0,0,0.13),10px 13px rgba(0,0,0,0.86),10px 14px rgba(0,0,0,0.65),10px 15px rgba(0,0,0,0),11px 0px rgba(0,0,0,0),11px 1px rgba(0,0,0,0),11px 2px rgba(0,0,0,0.38),11px 3px rgba(0,0,0,0.83),11px 4px rgba(0,0,0,0.06),11px 5px rgba(0,0,0,0),11px 6px rgba(0,0,0,0),11px 7px rgba(0,0,0,0),11px 8px rgba(0,0,0,0),11px 9px rgba(0,0,0,0),11px 10px rgba(0,0,0,0),11px 11px rgba(0,0,0,0),11px 12px rgba(0,0,0,0.69),11px 13px rgba(0,0,0,0.86),11px 14px rgba(0,0,0,0.25),11px 15px rgba(0,0,0,0),12px 0px rgba(0,0,0,0),12px 1px rgba(0,0,0,0),12px 2px rgba(0,0,0,0),12px 3px rgba(0,0,0,0.31),12px 4px rgba(0,0,0,0),12px 5px rgba(0,0,0,0),12px 6px rgba(0,0,0,0.25),12px 7px rgba(0,0,0,0),12px 8px rgba(0,0,0,0),12px 9px rgba(0,0,0,0),12px 10px rgba(0,0,0,0.13),12px 11px rgba(0,0,0,0.69),12px 12px rgba(0,0,0,0.86),12px 13px rgba(0,0,0,0.6),12px 14px rgba(0,0,0,0),12px 15px rgba(0,0,0,0),13px 0px rgba(0,0,0,0),13px 1px rgba(0,0,0,0),13px 2px rgba(0,0,0,0),13px 3px rgba(0,0,0,0),13px 4px rgba(0,0,0,0),13px 5px rgba(0,0,0,0.06),13px 6px rgba(0,0,0,0.83),13px 7px rgba(0,0,0,0.83),13px 8px rgba(0,0,0,0.69),13px 9px rgba(0,0,0,0.75),13px 10px rgba(0,0,0,0.86),13px 11px rgba(0,0,0,0.86),13px 12px rgba(0,0,0,0.6),13px 13px rgba(0,0,0,0.06),13px 14px rgba(0,0,0,0),13px 15px rgba(0,0,0,0),14px 0px rgba(0,0,0,0),14px 1px rgba(0,0,0,0),14px 2px rgba(0,0,0,0),14px 3px rgba(0,0,0,0),14px 4px rgba(0,0,0,0),14px 5px rgba(0,0,0,0.13),14px 6px rgba(0,0,0,0.55),14px 7px rgba(0,0,0,0.79),14px 8px rgba(0,0,0,0.86),14px 9px rgba(0,0,0,0.86),14px 10px rgba(0,0,0,0.65),14px 11px rgba(0,0,0,0.31),14px 12px rgba(0,0,0,0),14px 13px rgba(0,0,0,0),14px 14px rgba(0,0,0,0),14px 15px rgba(0,0,0,0),15px 0px rgba(0,0,0,0),15px 1px rgba(0,0,0,0),15px 2px rgba(0,0,0,0),15px 3px rgba(0,0,0,0),15px 4px rgba(0,0,0,0),15px 5px rgba(0,0,0,0),15px 6px rgba(0,0,0,0),15px 7px rgba(0,0,0,0),15px 8px rgba(0,0,0,0),15px 9px rgba(0,0,0,0),15px 10px rgba(0,0,0,0),15px 11px rgba(0,0,0,0),15px 12px rgba(0,0,0,0),15px 13px rgba(0,0,0,0),15px 14px rgba(0,0,0,0),15px 15px rgba(0,0,0,0);
}
2
David Hellsing

.refresh {
  display: inline-block;
  transform: rotate(90deg);
}
<span>↻</span>
<hr>
<span class="refresh">↻</span>

0
Alex