blade-ui-kit / blade-icons
一个用于在Laravel Blade视图中轻松使用图标的包。
Requires
- php: ^7.4|^8.0
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0
- illuminate/filesystem: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
- illuminate/view: ^8.0|^9.0|^10.0|^11.0
- symfony/console: ^5.3|^6.0|^7.0
- symfony/finder: ^5.3|^6.0|^7.0
Requires (Dev)
- mockery/mockery: ^1.5.1
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- phpunit/phpunit: ^9.0|^10.5|^11.0
This package is auto-updated.
Last update: 2024-09-14 14:45:15 UTC
README
Blade Icons
一个用于在Laravel Blade视图中轻松使用SVG图标的包。最初由 Adam Wathan 开发的 "Blade SVG"。
转换...
<!-- camera.svg --> <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"/> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"/> </svg>
为...
<x-icon-camera class="w-6 h-6" />
或者为...
@svg('camera', 'w-6 h-6')
寻找特定的图标?试试我们的图标搜索: https://blade-ui-kit.com/blade-icons#search
任何赞助以 资助开发 都非常感激 ❤️
图标包
Blade Icons 是一个基础包,让您轻松在应用程序中使用SVG图标。此外,还有一些第三方图标集包。感谢社区为此作出贡献!
我们不接受自行构建新图标包的请求,但您可以 开始构建自己的。
- Blade Academicons 由 Swapnil Sarwe
- Blade Akar Icons 由 Swapnil Sarwe
- Blade Ant Design Icons 由 Swapnil Sarwe
- Blade Bootstrap Icons 由 David H. Sianturi
- Blade Boxicons 由 Dan Pock
- Blade Bytesize Icons 由 Swapnil Sarwe
- Blade Carbon Icons 由 Swapnil Sarwe
- Blade Clarity Icons 由 Swapnil Sarwe
- Blade Coolicons 由 Swapnil Sarwe
- Blade CoreUI Icons 由 Adrián UB
- Blade Country Flags 由 Stijn Vanouplines
- Blade Cryptocurrency Icons 由 Swapnil Sarwe
- Blade CSS Icons 由 khatabWedaa
- Blade Dev Icons 由 Swapnil Sarwe 创建
- Blade Element Plus Icons 由 Swapnil Sarwe 创建
- Blade Elusive Icons 由 Swapnil Sarwe 创建
- Blade Emblemicons 由 Swapnil Sarwe 创建
- Blade Entypo 由 Owen Voke 创建
- Blade EOS Icons 由 Swapnil Sarwe 创建
- Blade Eva Icons 由 Nehal Hasnayeen 创建
- Blade Evil Icons 由 Swapnil Sarwe 创建
- Blade Feather Icons 由 Bruno Falcão 创建
- Blade File Icons 由 Swapnil Sarwe 创建
- Blade File Type Icons 由 Brandon Nifong 创建
- Blade FluentUi System Icons 由 Swapnil Sarwe 创建
- Blade Flowbite Icons 由 Dominique Thomas 创建
- Blade Font Audio 由 Swapnil Sarwe 创建
- Blade Font Awesome 由 Owen Voke 创建
- Blade Fontisto Icons 由 Swapnil Sarwe 创建
- Blade Fork Awesome 由 Swapnil Sarwe 创建
- Blade Github Octicons 由 Tim Joosten 创建
- Blade Google Material Design Icons 由 Swapnil Sarwe 创建
- Blade Gov Icons 由 Swapnil Sarwe 创建
- Blade Gravity UI Icons 由 Swapnil Sarwe 创建
- Blade Grommet Icons 由 Swapnil Sarwe 创建
- Blade Health Icons 由 Giulio Troccoli-Allard 提供
- Blade Heroicons 由 Dries Vints 提供
- Blade Hugeicons 由 Mustafa Afat 提供
- Blade Humbleicons 由 Swapnil Sarwe 提供
- Blade IcoMoon Icons 由 Joe Sylnice 提供
- Blade Icon Park Icons 由 Swapnil Sarwe 提供
- Blade Iconic Icons 由 Malik Alleyne-Jones 提供
- Blade Iconoir 由 Andrei Ioniță 提供
- Blade Iconsax 由 Saade 提供
- Blade Ikonate Icons 由 Swapnil Sarwe 提供
- Blade Ionicons 由 Faisal Ahmed 提供
- Blade Jam Icons 由 Swapnil Sarwe 提供
- Blade Lets Icons 由 Mansoor Ahmed 提供
- Blade Line Awesome Icons 由 Swapnil Sarwe 提供
- Blade Lineicons 由 Ngô Quốc Đạt 提供
- Blade Lucide Icons 由 Dan Pock 提供
- Blade Majestic Icons 由 Swapnil Sarwe 提供
- Blade Maki Icons 由 Swapnil Sarwe 提供
- Blade Material Design Icons 由 Postare 提供
- Blade Memory Icons 由 Swapnil Sarwe 提供
- Blade Microns 由 Swapnil Sarwe 提供
- Blade Mono Icons 由 Swapnil Sarwe 提供
- Blade Pepicons 由 Swapnil Sarwe 提供
- Blade Phosphor icons 由 Swapnil Sarwe 提供
- Blade Pixelarticons 由 Swapnil Sarwe 提供
- Blade Polaris Icons 由 Samoilenko Eduard 提供
- Blade Prime Icons 由 Swapnil Sarwe 提供
- Blade Radix Icons 由 Swapnil Sarwe 提供
- Blade Remix Icon 由 Andrei Ioniță 提供
- Blade RPG Awesome Icons 由 Swapnil Sarwe 提供
- Blade Simple Icons 由 Adrián UB 提供
- Blade Simple Line Icons 由 Swapnil Sarwe 提供
- Blade Solar Icons 由 Swapnil Sarwe 提供
- Blade System UIcons 由 Swapnil Sarwe 提供
- Blade Tabler Icons 由 Ryan Chandler 提供
- Blade Teeny Icons 由 Swapnil Sarwe 提供
- Blade Typicons 由 Swapnil Sarwe 提供
- Blade Uiw Icons 由 Swapnil Sarwe 提供
- Blade Unicons 由 Swapnil Sarwe 提供
- Blade UntitledUI Icons 由 Arthur Monney 提供
- Blade Vaadin Icons 由 Swapnil Sarwe 提供
- Blade VSCode Codicons 由 Swapnil Sarwe 提供
- Blade Weather Icons 由 Swapnil Sarwe 提供
- Blade Zondicons 由 Swapnil Sarwe 提供
要求
- PHP 7.4 或更高版本
- Laravel 8.0 或更高版本
安装
使用 composer 安装包
composer require blade-ui-kit/blade-icons
然后,发布配置并取消注释 默认 图标集
php artisan vendor:publish --tag=blade-icons
请确保为该图标集定义的路径存在。默认情况下是 resources/svg
。您的 SVG 图标需要放置在这个目录中。
升级
在升级库时,请参阅 升级指南
。
缓存
当使用 Blade Icons,尤其是第三方图标集时,您通常会处理大量的图标集。这可能会极大地减慢您的应用程序速度,尤其是在使用 Blade 组件 时。为了解决这个问题,Blade Icons 内置了缓存支持。要启用图标缓存,可以运行以下命令
php artisan icons:cache
这将在 bootstrap/cache
中创建一个类似于 packages.php
缓存文件的 blade-icons.php
文件。它将包含所有已知集合和图标及其路径位置清单。
缓存图标意味着您将无法添加额外的图标,更改图标集的路径或安装/删除图标包。要这样做,请确保首先清除图标缓存,并在更改这些设置后刷新缓存。
php artisan icons:clear
将 icons:cache
命令作为部署流程的一部分并始终在生产中缓存图标是个好主意。
或者,您可以选择完全禁用 Blade 组件。
此外,在添加新图标、重命名图标路径中的目录时,在刷新页面之前清除视图总是一个好主意。
php artisan view:clear
配置
定义集合
Blade Icons 支持多个集合。您可以通过在 blade-icons.php
配置文件的 sets
设置中传递键/值组合来定义这些集合
<?php return [ 'sets' => [ 'default' => [ 'path' => 'resources/svg', ], ], ];
您可以随意添加任意数量的集合。Blade Icons 为您的应用程序提供了一个 default
集合,您可以根据自己的喜好进行调整。
图标路径
如果您想从应用程序中的不同目录添加图标,例如 resources/images/svg
,您可以设置为这样
<?php return [ 'sets' => [ 'default' => [ 'path' => 'resources/images/svg', ], ], ];
警告
请始终确保您指向的是现有目录。
多个路径
除了单个路径外,您还可以使用 paths
选项为单个集合定义多个路径
<?php return [ 'sets' => [ 'default' => [ 'paths' => [ 'resources/images/icon-set', 'resources/images/other-icon-set', ], ], ], ];
这使您可以从单个集合中分组来自不同路径的图标,其中您可以定义相同的前缀和默认类。
警告
当使用多个路径而不是单个路径时,Blade Icons 将返回当图标名称存在于多个路径时找到的第一个图标。如果您想检索正确的图标,请确保在注册多个路径时使用唯一的图标名称。
文件系统磁盘
如果您在外部文件系统存储上托管图标,可以将图标集的 disk
选项设置为您的 filesystems.php
配置文件中定义的磁盘。例如,您可能将图标存储在 AWS S3 存储桶中,该存储桶在您的 filesystems.php
配置文件中以 s3-icons
作为磁盘密钥设置
<?php return [ 'sets' => [ 'default' => [ 'path' => '/', 'disk' => 's3-icons', ], ], ];
从现在起,我们的默认集合将从此 S3 存储桶中提取图标。请注意,我们已经将路径调整为 /
,因为我们将图标存储在这个 S3 存储桶的根目录中。如果您有多个图标集上传到同一磁盘,您可以相应地设置路径
<?php return [ 'sets' => [ 'heroicons' => [ 'path' => 'heroicons', 'disk' => 's3-icons', 'prefix' => 'heroicon', ], 'zondicons' => [ 'path' => 'zondicons', 'disk' => 's3-icons', 'prefix' => 'zondicon', ], ], ];
回退图标
如果您想在找不到图标时提供一个回退图标,您可以在特定集合上定义 fallback
选项
<?php return [ 'sets' => [ 'default' => [ 'fallback' => 'cake', ], ], ];
现在,当您尝试解析默认图标集的非现有图标时,它将返回渲染的“蛋糕”图标。
您还可以提供一个全局回退图标。当找不到图标且集合没有自己的回退图标定义时,将使用此图标。它可以引用任何已注册图标集中的任何图标。
<?php return [ 'fallback' => 'heroicon-cake', ];
注意
在使用回退图标时有一个需要注意的地方,那就是当使用Blade 组件时它们可能不起作用。在这种情况下,Laravel 将抛出一个找不到组件的异常。如果您想使用回退图标,请考虑其他使用方式。
图标前缀
在默认图标集中,icon
前缀将被应用到每个图标上,但您可以在blade-icons.php
配置文件中调整这一点。
<?php return [ 'sets' => [ 'default' => [ 'prefix' => 'icon', ], ], ];
为每个集合定义前缀是必需的,并且每个前缀应该是唯一的。
当使用Blade 指令或助手引用图标时,您可以选择省略前缀以引用default
集合中的图标。当引用其他集合的图标时,使用前缀是必需的。
如果默认集合中的一个图标名称与集合的前缀冲突,则首先检索默认集合中的图标。
请注意,最好将图标本身的名字中不要包含前缀。所以,如果您有一个名为icon
的前缀,并且您的图标命名为icon-example.svg
,您应该将它们重命名为example.svg
。否则,您可能会遇到意外的名称解析问题。
同样重要的是要注意,图标前缀不能包含破折号(-
),因为这是我们用来将其与图标名称其他部分分开的分隔符。
默认类
您可以选择定义将应用于每个图标的类,通过在blade-icons.php
配置文件中填写class
设置来实现。
<?php return [ 'class' => 'icon icon-default', ];
如果您不希望默认应用任何类,请将其留为空字符串。此外,相同的选项在集合中也可用,因此您可以为每个集合设置默认类。
应用类的顺序是<全局类> <集合类> <显式类>
。您可以通过传递具有属性的自定义类来始终覆盖此顺序。组件类不能被覆盖。
默认属性
您还可以选择在blade-icons.php
配置文件的attributes
设置中定义一些属性,这些属性将添加到每个图标中。
<?php return [ 'attributes' => [ 'width' => 50, 'height' => 50, ], ];
这始终需要是一个关联数组。此外,集合中也有相同的选项,因此您可以为每个集合设置默认属性。
应用类的顺序是默认属性 / 集合属性 / 显式属性
,后者覆盖前者。无法覆盖SVG图标上已定义的现有属性。如果您已经为要覆盖的图标定义了属性,请先删除它们。
用法
有几种方法可以将图标插入到您的Blade模板中。我们个人推荐使用Blade组件,但如果您愿意,也可以使用Blade指令。
组件
开始使用集合中的图标最简单的方法是使用Blade组件。
<x-icon-camera/>
可以使用点符号引用子目录中的图标。
<x-icon-solid.camera/>
您还可以向图标组件传递类(默认类也将应用)。
<x-icon-camera class="icon-lg"/>
或任何其他属性
<x-icon-camera class="icon-lg" id="settings-icon" style="color: #555" data-baz/>
注意
使用Blade组件,即使在引用默认集合中的图标时,也始终需要使用前缀。
延迟图标
当您在页面上许多地方使用相同的图标时,DOM元素的数量可能会急剧增加。为了解决这个问题,您可以将defer属性添加到组件中。
<x-icon-camera defer />
这将把图标推送到“bladeicons”堆栈,您应该在页面的底部加载此堆栈。
... <svg hidden class="hidden"> @stack('bladeicons') </svg> </body> </html>
警告
仅使用<x-icon>
组件可以延迟图标。此功能与@svg
Blade指令或svg()
助手函数不兼容。
在JavaScript中使用延迟图标
您可以通过提供自定义的defer值作为标识符来重用blade中的图标,在您的JavaScript渲染视图中
<x-icon-camera defer="my-custom-hash" />
然后,在您的JavaScript中,创建一个带有use
和href="#icon-{your-hash}"
属性的svg
元素。
function icon() { return <svg><use href="#icon-my-custom-hash"></use></svg> }
默认组件
如果您不想使用上面的组件语法,您也可以使用Blade Icons附带的默认Icon
组件。只需通过$name
属性传递图标名称即可
<x-icon name="camera"/>
如果您想为该组件使用不同的名称,您可以在blade-icons.php
配置文件中自定义components.default
选项
<?php return [ 'components' => [ 'default' => 'svg', ], ];
然后按照以下方式引用默认图标
<x-svg name="camera"/>
如果您想完全禁用此默认组件,可以将它的名称设置为null
<?php return [ 'components' => [ 'default' => null, ], ];
禁用组件
尽管它们默认启用,但如果您根本不希望使用组件,您可以选择通过将blade-icons.php
配置文件中的components.disabled
设置设置为true
来完全禁用它们
<?php return [ 'components' => [ 'disabled' => true, ], ];
当您只使用指令或辅助函数时,这样做是有意义的,并且可以提高整体性能。
指令
如果您不喜欢组件,您可以使用Blade指令。如果您在配置中定义了默认的icon
类,并且想使用icon-lg
类渲染一个camera
图标,可以这样做
@svg('camera', 'icon-lg')
任何附加属性都可以作为第三个数组参数传递,并且它们将被渲染在svg
元素上
@svg('camera', 'icon-lg', ['id' => 'settings-icon'])
如果没有要定义的类,您也可以将这些属性作为第二个参数传递
@svg('camera', ['id' => 'settings-icon'])
如果您想覆盖默认的类,请将类作为属性传递
@svg('camera', ['class' => 'icon-lg'])
也支持没有键的属性
@svg('camera', ['data-foo'])
辅助函数
如果您想使用,可以使用svg
辅助函数来暴露用于设置SVG属性的流畅语法
{{ svg('camera')->id('settings-icon')->dataFoo('bar')->dataBaz() }}
可访问性
如果图标应该具有语义意义,可以使用title属性添加文本替代。请参考此文档的用法部分了解如何添加属性。
对于几乎所有用例,您的图标都将扮演图像的角色。这意味着您需要决定图标是否有任何语义意义,或者其语义意义是什么,您可以使用WCAG alt文本决策树。
如果图标具有语义意义,使用title属性将应用于SVG元素以下功能
<title>
的子元素具有包含传递值的唯一ID- 包含传递值的
title
属性 role="img"
aria-labelledby
用于引用标题元素的唯一ID
示例用法
<x-icon-camera title="camera" /> @svg('camera', ['title' => 'camera'])
示例结果
<svg title="Camera" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" > <title> Camera </title> <path fill="currentColor" d="M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z"></path> </svg>
如果图标没有语义意义,您可能希望隐藏图标以减少整个文档的杂乱。您可以通过在图标中添加aria-hidden="true"
来实现这一点。
构建软件包
如果您对构建自己的第三方软件包以集成图标集感兴趣,这很容易做到。我们为您创建了一个模板仓库,以供您开始使用。您可以在其readme中找到入门说明。
如果您想了解如何创建软件包,我们可以推荐这两门优秀的课程
请确保从您包的服务提供者的 register
方法中加载您的 SVG 文件。提供 SVG 文件的路径,并提供您自己独特的集合名称和组件前缀。
use BladeUI\Icons\Factory; public function register(): void { $this->callAfterResolving(Factory::class, function (Factory $factory) { $factory->add('heroicons', [ 'path' => __DIR__.'/../resources/svg', 'prefix' => 'heroicon', ]); }); }
现在您可以使用组件、指令或助手引用这些图标。
<x-heroicon-o-bell/> @svg('heroicon-o-bell') {{ svg('heroicon-o-bell') }}
别忘了在您的包的 composer.json
中将 blade-ui-kit/blade-icons
添加为依赖项。
生成图标
Blade Icons 还提供了一种简单的方法来为您的包生成图标。通过定义一个包含预定义源路径和目标路径的配置文件,您可以轻松更新您的图标。
首先,在图标包的 config
目录中创建一个 generation.php
配置文件。接下来,您可以定义一个数组来指定您要生成的每个图标集合。以下是这个文件的完整版本,其中包含每个选项的解释。只需提供 source
和 destination
选项即可。
<?php use Symfony\Component\Finder\SplFileInfo; return [ [ // Define a source directory for the sets like a node_modules/ or vendor/ directory... 'source' => __DIR__.'/../node_modules/heroicons/outline', // Define a destination directory for your icons. The below is a good default... 'destination' => __DIR__.'/../resources/svg', // Strip an optional prefix from each source icon name... 'input-prefix' => 'o-', // Set an optional prefix to applied to each destination icon name... 'output-prefix' => 'o-', // Strip an optional suffix from each source icon name... 'input-suffix' => '-o', // Set an optional suffix to applied to each destination icon name... 'output-suffix' => '-o', // Enable "safe" mode which will prevent deletion of old icons... 'safe' => true, // Call an optional callback to manipulate the icon with the pathname of the icon, // the settings from above and the original icon file instance... 'after' => static function (string $icon, array $config, SplFileInfo $file) { // ... }, ], // More icon sets... ];
查看 Heroicons 包的示例 config/generation.php
文件。
配置好配置文件后,您可以从图标包目录的根目录使用以下命令生成图标:
vendor/bin/blade-icons-generate
更新日志
查看本存储库中的所有最新更改的 CHANGELOG
。
维护者
Blade Icons 由 Dries Vints 开发和维护。
许可证
Blade Icons 是开源软件,受 MIT 许可证 许可。