<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Icon on 花蕊·Blog</title>
    <link>https://huarui.xyz/tags/icon/</link>
    <description>Recent content in Icon on 花蕊·Blog</description>
    <generator>Hugo -- 0.154.0</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 08 May 2024 10:54:27 +0000</lastBuildDate>
    <atom:link href="https://huarui.xyz/tags/icon/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>如何在 Gyoza 中使用图标？</title>
      <link>https://huarui.xyz/posts/how-to-use-icons/</link>
      <pubDate>Wed, 08 May 2024 10:54:27 +0000</pubDate>
      <guid>https://huarui.xyz/posts/how-to-use-icons/</guid>
      <description>&lt;p&gt;Gyoza 选择 font-class 的方式引用图标。这些图标大部分来源于 &lt;a href=&#34;https://remixicon.com/&#34;&gt;Remix Icons&lt;/a&gt;，并且在 &lt;a href=&#34;https://www.iconfont.cn/&#34;&gt;iconfont&lt;/a&gt; 上进行管理和导出。&lt;/p&gt;
&lt;p&gt;下图展示了项目中的所有图标：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;所有图标&#34; loading=&#34;lazy&#34; src=&#34;https://s2.loli.net/2024/05/08/mbdT5HqYMEajyRG.webp&#34;&gt;&lt;/p&gt;
&lt;p&gt;当你在添加首页显示的社交账号时，你可能会想要使用这些图标。在对应的配置项中填写图标下面有 &lt;code&gt;icon-&lt;/code&gt; 前缀的名称即可。&lt;/p&gt;
&lt;p&gt;如果是在组件中使用图标，可以按照如下方式：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-jsx&#34; data-lang=&#34;jsx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;iconfont icon-xxx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;为什么不是-svg-图标&#34;&gt;为什么不是 SVG 图标？&lt;/h2&gt;
&lt;p&gt;你可能看到很多的项目在使用 &lt;a href=&#34;https://iconify.design/&#34;&gt;iconify&lt;/a&gt;。iconify 是一个开源图标集，包含超过 20 万个图标，提供了多种框架的引入方式。Astro 中也有对应的插件 astro-icon 可以使用（如果对此感兴趣，可以查看他们的&lt;a href=&#34;https://github.com/natemoo-re/astro-icon&#34;&gt;文档&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;我在项目中也尝试使用过 iconify，但是出于以下几个原因，我最终还是转向了 font-class 的方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;由于项目中同时使用了 Astro 和 React，而在 Astro 组件和 React 组件中使用 iconify 图标的方式是不同的，这会导致代码中不得不存在两种使用方式。&lt;/li&gt;
&lt;li&gt;iconify 在加载时需要请求它的服务器，&lt;del&gt;我会担心请求失败&lt;/del&gt;，虽然这种担心是多余的。&lt;/li&gt;
&lt;li&gt;有一个功能是我会在渲染文章时往 markdown 中注入一些图标，例如外部链接尾部的图标，iconify 想要做到这一点并不方便。&lt;/li&gt;
&lt;li&gt;在 HTML 中直接嵌入 SVG icon 的方式并不优雅，使用 font-class 只需要对应的类名，感觉相较而言最终的 HTML 体积小一点，页面加载会快点。我还没有做过具体的测试，但是至少我会尽量避免页面中出现大量的 SVG 仅仅只是作为图标使用。&lt;/li&gt;
&lt;li&gt;该项目中用到的图标并不多，主要是一些常用的社交账号的图标，供自定义联系方式时使用。我希望所有图标集中在一起管理，这样更方便一点。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我必须要承认，目前的图标方案并不优雅，每当图标集合发生修改时我都需要更新对应的字体文件和 CSS 文件。而且其他人想要管理图标集合也变得困难。&lt;/p&gt;
&lt;p&gt;也许我会在未来尝试其他方式，例如 &lt;a href=&#34;https://github.com/iconify/iconify/tree/main/plugins/tailwind&#34;&gt;@iconify/tailwind&lt;/a&gt;，如果你有更好的方案，也欢迎给我留言。&lt;/p&gt;
&lt;h2 id=&#34;自定义图标&#34;&gt;自定义图标&lt;/h2&gt;
&lt;p&gt;如果你想要替换 iconfont 的图标，请修改以下文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;public/fonts/iconfont.ttf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;public/fonts/iconfont.woff
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;public/fonts/iconfont.woff2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;src/styles/iconfont.css
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意，这将会替换掉项目中使用的所有图标，所以请确保你知道自己在做什么。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
