如何在 Vaadin 流程中包含自己的图标集合?

How to include own icon collection in Vaadin flow?

如何在 Vaadin Flow 中包含自己的图标?您是否制作了一个 HTML 文件,例如来自 Vaadin Icons 的 this 文件并通过

包含它
@HtmlImport("frontend://path/to/your/icons.html")

到目前为止我没有找到任何文档。所以我想这是一种可能性?

这是一个向 Vaadin Flow 应用程序添加一些 IcoMoon 图标的示例;

  1. 使用 'Generating Icons in SVG & More' 部分下 https://icomoon.io/docs.html 中的注释,我生成了 iron-iconset-svg 格式的 Polymer 兼容图标集。

    • 访问 https://icomoon.io/app/ 和 select 图标(您可以添加来自不同库的图标),
    • 点击'Generate SVG & More',
    • 点击 'Preferences' 和 select Polymer 作为目标格式并下载,
  2. 解压缩 zip 文件,然后打开 polymer 文件夹。它包含 *-svg.html 文件,这是 @Jouni 在上面的注释中提到的 'iron-iconset-svg' 格式文件。这个 html 文件实际上是一个 collection 内联 SVG。

  3. 将 html 文件复制到您的资源文件夹;

    e.g. resources/META-INF/resources/frontend/styles/

  4. 并使用 @HtmlImport;

    导入

    e.g. @HtmlImport("frontend://styles/icomoon-iconset-svg.html")

  5. 然后可以使用collection名称和图标名称创建图标;

    Icon icon = new Icon("icomoon", "mobile");

    • collection名称是html文件中<iron-iconset-svg name=...中的名称值。

您也可以手动创建图标集。 我使用 https://github.com/vaadin/vaadin-icons/blob/master/iconset.html 作为模板(或多或少):

  1. 绘制或下载一些 SVG 文件。
  2. 创建一个以

    开头的新 SVG 文件 myicons.svg

    <iron-iconset-svg name="myiconset"><svg><defs>

  3. ...并以

    结尾

    </defs></svg></iron-iconset-svg>

  4. 在 defs-tag 中,为每个图形插入一个 "g" 元素,例如:

    <g id="myicon" viewBox="0 0 52 56"></g>

  5. 在此文件中设置唯一的 ID。

  6. 使用原始 SVG 文件中的值设置 viewBox 属性(可见尺寸)。
  7. 从原始 SVG 文件复制路径元素(并删除任何 "g" 或 "symbol" 或 "title" 或任何其他不存在的元素path/line/shape) 并将 it/them 粘贴到新创建的 "g" 元素中。

    <path d="m14 15h-13c-.55228475 [...]" />

  8. 将这个创建的 myicons.svg 文件放在任何你想要的地方。

  9. 在您的 Java 代码中读取 myicons.svg 文件并将其粘贴到您的站点中,例如以这种直接的方式(如果您选择另一个路径,请替换路径):

    add(new Html(Files.readString(new File("src/main/webapp/img/myicons.svg").toPath())));

  10. 创建图标:

    com.vaadin.flow.component.icon.Icon myIcon = new Icon("myiconset", "myicon"); myIcon.getStyle().set("color", "var(--lumo-primary-text-color)"); add(myIcon);

更新:从 Vaadin 14(兼容模式除外)开始,您应该改为使用 @JsModule。即@JsModule("@polymer/iron-icon/iron-icon.js")