如何在HTML中显示“重新加载”符号而无需通过HTTP加载图像?

70
我想在我正在创建的HTML/JavaScript应用中显示一个“刷新”符号,但我不想发起任何HTTP请求来加载图像。如何在所有主流浏览器中可靠地实现这一点? 最接近的Unicode值是:↺ (↺),但箭头指向错误的方向。 还有其他有效的Unicode值吗? 是否有Webdings字体可以使用?(通常在Opera和Firefox中不起作用。) 是否有一种方法可以使用JS提供的base64图像源创建一个图像? 编辑: 原因并非开销。正在创建的应用程序必须包含在单个JavaScript文件中,没有任何其他依赖项。它是一种开发实用工具,可以添加到任何项目中,无需网络。

2
这个必须在Lynx上运行吗?我很好奇为什么图片不合适。然而,这个问题讨论了如何使用JS从二进制加载图像 - 或许那会有所帮助? - RB.
3
为什么不使用“刷新”这个词呢?想一想,难道非得用一个符号来告诉用户它是刷新吗? - Joseph
2
“Wrong way”是什么意思?重新加载是否有物理空间方向?客户机使用大端或小端内存访问是否重要?在数学中,符号“↺”通常表示“正旋转”。根据“右手定则”,如果我们将手指卷曲到旋转方向,拇指会向后指,就像叫出租车一样。这表示“我们正在从屏幕上拉出页面的新副本”:重新加载! - Kaz
35
好的,我会尽力进行翻译。以下是需要翻译的内容:⭯ ⭮ ↺ ↻ ⟲ ⟳这些符号是特殊的箭头符号,分别表示向上箭头、向下箭头、逆时针箭头、顺时针箭头、逆时针旋转箭头和顺时针旋转箭头。 - Dan Dascalescu
3
@DanRoberts:不需要!这是一个谣言。只有极少数字符需要编码,具体取决于它们出现的位置。最重要的是< - Dan Dascalescu
显示剩余5条评论
8个回答

137

如果你觉得字符↻ (↻),也就是U+21BB顺时针打开圆形箭头符号,符合你的需求(它的箭头可能与常见的刷新图标不同),那么你可以放心地使用它:

.reload {
  font-family: Lucida Sans Unicode
}
<span class=reload>&#x21bb;</span>

Lucida Sans Unicode字体包含该符号,并且在几乎任何Windows系统中都可以找到这些天。根据微软信息,它甚至包括在Windows 98(以及Windows 95 Plus)中。

除了Windows系统外,其他系统也可以合理地期望在某些字体和浏览器中找到该符号并提取它们。而且包含它的字体对于它的形状非常相似。(但如果该符号需要与文档的文本在风格上匹配,则需要更详细地研究情况并尝试确保您字体列表或“字体堆栈”中的所有字体都包含它。)


@dpd,你的jsfiddle想要演示什么?它声明了Arial字体,但是Arial并不包含U+21BB字符,所以你得到的将是浏览器的默认字体或备用字体,或者在一些旧浏览器中会出现错误。 - Jukka K. Korpela

69

Unicode字符

至少有两个Unicode字符可以作为“刷新”或“重新加载”图标:

  • 顺时针间隔圆形箭头
    U+27F3
  • 顺时针开放圆形箭头
    U+21BB

第一个在iOS 7或8或9的Safari或Chrome中不可见。所以,鉴于此,以及Paul D. White的答案,我建议使用第二个,顺时针开放圆形箭头

提示:如果您是Mac用户,请获取免费应用程序UnicodeChecker。您可以通过名称搜索字符,并查看包含该字符的字体列表(在您特定的Mac上)。

图标字体

一些字体已创建为具有可缩放的基于矢量的图标,代替常规字符字形。


1
⟳ 是一个看起来像 Chrome UI 中使用的符号。(HTML 实体 &#102270;) - Pylinux

17
如果浏览器支持从Base64字符串加载图像数据,则可以使用 img 并将其 src 设置为以下格式:
data:[<mediatype>][;base64],<data>

例子:

var img = document.getElementById("yourImage");
img.src = "data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub//ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7";
<img id="yourImage" />


4
不要忘记,与使用<img src='**'>加载的文件相比,这会增加开销。这将包括整个图片的B64格式(如果我没记错的话,重量增加了2.5倍)。每次页面呈现时都会重新加载它,而不是像静态图片一样只加载一次(使用缓存)。如果图片很小(可能在这里是这种情况),并且超额开销可以接受,这仍然可以是一个有效的解决方案。(gzip或deflate http通道也可以帮助减少开销) - Steve B
@SteveB:“如果我没记错的话,重量会增加2.5倍”——我认为这取决于图像本身以及gzip压缩对包含base64编码字符串的文件的影响。 - Paul D. Waite
@SteveB:“每次页面被渲染时都会重新加载,而不是在提供静态图片时只加载一次(使用缓存)”——但如果包含base64编码字符串的文件被缓存,则不会重新加载。 - Paul D. Waite
@PaulD.Waite: 可能是可行的,但需要完全加载动态内容的JavaScript(否则刷新操作就没有意义了)。但这是可能的。 - Steve B
1
@SteveB:嗯,base64编码的字符串可能包含在一个被缓存的外部JavaScript文件中,这并不意味着只因为HTML页面被重新下载,它就会被重新下载。 - Paul D. Waite
显示剩余2条评论

15

你的Unicode字符的顺时针等价物是&#8635;,↻(尽管,正如David C. Bishop在评论中指出的那样,Chromebook使用#27f2,⟳)。

使用文本字符是一种选择,但Windows XP可能无法显示该字符(取决于您使用的字符和显示它的字体)。@Jukka K. Korpela指出,此字符包含在Lucida Sans Unicode字体中,因此即使在Windows XP中也应该可以正常工作。

就Wingdings字体而言,为避免HTTP请求,您需要确信所涉及的字体将安装在最终用户的计算机上。 我不认为有通用的跨平台Wingdings字体(尽管我可能完全错了)。

您确实可以使用JavaScript从包含图像的字符串创建图像的Base64编码表示形式。 您可以这样做:

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

数据URI在Internet Explorer 8及更早版本中可能无法正常工作,这可能会影响使用Windows XP的用户。 (实际上,您不需要JavaScript来实现此操作:您只需在页面中放置一个带有该src属性的标签即可。)

4
"27f2"是Chrome浏览器用于表示刷新的Unicode符号。您可以从此链接(http://xahlee.info/comp/unicode_computing_symbols.html)了解更多相关信息。 - David C. Bishop
3
27f2 是表示反向旋转的符号 ⟲,而 27f3 则代表顺时针旋转的符号。 - Malvineous

14

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


10

Unicode 6 字符

'CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS'(U+1F503)

很遗憾,对于该字符的字体支持并不是最好的,因此“所有主要浏览器”可能有点牵强... :-/


// 适用于Chromium和Firefox - Nathan Basanese

3
您提到“所有主要浏览器”,因此我们可以假设以下情况:
  1. 不是每个人都有JavaScript
  2. 不是每个人都能嵌入字体(如黑莓等)
  3. 不是每个人都支持所有的UNICODE表示(如Windows XP)
  4. 不是每个人都支持内联数据URI(如IE7-)
那么还剩下什么?我建议使用符合HTML1标准的IMG元素,这样在第一次加载后也将被缓存:
<img src="/refresh.gif" alt="refresh">

除了Lynx和其他纯文本浏览器外,它可以在我知道的每个浏览器中运行。但是,它们将显示“刷新”,因此没有问题。

如果您真的想避免针对“现代”浏览器的额外2字节请求,则可以使用IE7-的条件注释。

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

而对于其余部分,可以像这样进行处理:
<img src="data:image/gif;base64,..." alt="refresh">

如果您想尝试一些新的东西,可以使用CSS盒子阴影 (演示):

.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);
}

感谢您的详细解释,这非常有帮助。是否有一种备用方法,结合数据URI和Unicode,可以在所有主要浏览器上运行? - John Fowler
1
回想起黑莓曾经是一个合法的问题,这真是有趣。 - Tony
关于你的假设1的说明:OP明确表示了JavaScript。 - Cadoiz

1

我认为这个图标对你会有帮助。

编码

 - HTML Entity (decimal)    &#128472;
 - HTML Entity (hex)    &#x1f5d8;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接