自定义样式
自定义主题
Filament 允许您通过编译自定义样式表来替换默认样式表,从而更改用于呈现 UI 的 CSS,这种自定义样式表称为“主题”。
要为面板创建自定义主题,可以使用 php artisan make:filament-theme
命令:
# 指定使用 yarn 构建主题
php artisan make:filament-theme --pm=yarn
# 如果存在多个后台可以添加参数指定自定义主题的名称
php artisan make:filament-theme admin
--pm
指定编译的工具,默认是 npm
,如果使用 yarn
则需要添加 --pm=yarn
参数。
该命令将在目录中创建一个 CSS 文件 /resources/css/filament
和 Tailwind 配置文件,然后可以通过编辑这些文件来自定义主题。
它还将为您提供有关如何编译主题并将其注册到 Filament 中的说明。请按照命令中的说明完成设置过程:
⇂ First, add a new item to the `input` array of `vite.config.js`: `resources/css/filament/admin/theme.css`
⇂ Next, register the theme in the admin panel provider using `->viteTheme('resources/css/filament/admin/theme.css')`
⇂ Finally, run `npm run build` to compile the theme
- 添加新项到
vite.config.js
的input
数组中:resources/css/filament/admin/theme.css
- 在
AdminPanelProvider
中使用->viteTheme('resources/css/filament/admin/theme.css')
注册主题 - 运行
npm run build
或者yarn build
编译主题
注意
请参考命令查看需要注册的确切文件名,它们可能不是 admin/theme.css
。
自定义配色 colors()
通过
colors
方法指定具体配色,它们默认来自 tailwind 自定义颜色。phpuse Filament\Panel; use Filament\Support\Colors\Color; public function panel(Panel $panel): Panel { return $panel // ... ->colors([ 'danger' => Color::Red, 'gray' => Color::Slate, 'info' => Color::Blue, 'primary' => Color::Blue, 'success' => Color::Green, 'warning' => Color::Amber, ]); }
使用非 Tailwind 提供的颜色
- 通过以 oklch 格式传递从 50 到 950 的色调数组来使用 Tailwind CSS 调色板中未包含的自定义颜色
phpuse Filament\Support\Facades\FilamentColor; public function boot() { FilamentColor::register([ 'primary' => [ 50 => 'oklch(0.969 0.015 12.422)', 100 => 'oklch(0.941 0.03 12.58)', 200 => 'oklch(0.892 0.058 10.001)', 300 => 'oklch(0.81 0.117 11.638)', 400 => 'oklch(0.712 0.194 13.428)', 500 => 'oklch(0.645 0.246 16.439)', 600 => 'oklch(0.586 0.253 17.585)', 700 => 'oklch(0.514 0.222 16.935)', 800 => 'oklch(0.455 0.188 13.697)', 900 => 'oklch(0.41 0.159 10.272)', 950 => 'oklch(0.271 0.105 12.094)', ], ]); }
- 从十六进制代码生成自定义颜色
Color::hex()
phpuse Filament\Support\Colors\Color; use Filament\Support\Facades\FilamentColor; FilamentColor::register([ 'primary' => '#6366f1', ]);
- 从 RGB 值生成自定义颜色
Color::rgb()
phpuse Filament\Support\Colors\Color; use Filament\Support\Facades\FilamentColor; FilamentColor::register([ 'primary' => 'rgb(99, 102, 241)', ]);
使用
rgb
方式
use Filament\Panel;
use Filament\Support\Colors\Color;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->colors([
'primary' => '#6366f1',
'danger' => 'rgb(99, 102, 241)',
]);
}
自定义字体 font()
默认情况下,Filament 使用的是 Inter 字体。可以使用 font()
方法更改默认设置。
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->font('JetBrains Mono');
}
所有 Google 字体 都可以使用。
默认使用 Bunny Fonts CDN 用于提供字体。也可以使用 font()
方法的 provider
参数自定义字体提供者。
use Filament\FontProviders\GoogleFontProvider;
$panel->font('Inter', provider: GoogleFontProvider::class)
或者,使用 LocalFontProvider
从本地样式表提供字体:
use Filament\FontProviders\LocalFontProvider;
$panel->font(
'Inter',
url: asset('css/fonts.css'),
provider: LocalFontProvider::class,
)
在视图中使用 Tailwind CSS 类
即使 Filament 使用 Tailwind CSS 来编译框架,它也没有设置为自动扫描在项目中使用的任何 Tailwind 类,因此这些类不会包含在编译的 CSS 中。
要在项目中使用 Tailwind CSS 类,您需要设置一个自定义主题来自定义面板中的已编译 CSS 文件。在主题的 theme.css
文件中,会发现两行:
@source '../../../../app/Filament';
@source '../../../../resources/views/filament';
这 2 行告诉 Tailwind 扫描 app/Filament
和 resources/views/filament
目录,查找在项目中使用的任何 Tailwind 类。
可以在此处添加任何其他要扫描 Tailwind 类的目录。
禁用黑暗模式 darkMode()
要禁用黑暗模式切换,可以使用 darkMode()
方法进行配置。
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->darkMode(false);
}
更改默认主题模式 defaultThemeMode()
默认情况下,Filament 使用用户的系统主题作为默认模式。
例如,如果用户的计算机处于黑暗模式,Filament 将默认使用黑暗模式。
如果用户更改计算机模式,Filament 中的系统模式是被动的。
如果想改变默认模式以强制亮模式或暗模式,使用 defaultThemeMode()
方法,传递 ThemeMode::Light
或 ThemeMode::Dark
。
use Filament\Panel;
use Filament\Enums\ThemeMode;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->defaultThemeMode(ThemeMode::Light);
}
添加Logo brandLogo()
默认情况下,Filament 使用应用名称来呈现简单的基于文本的徽标。
如果想简单地更改徽标中使用的文本,可以使用 brandName()
方法:
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->brandName('Filament');
}
要呈现图像,可以将 URL 传递给 brandLogo()
方法:
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->brandLogo(asset('images/logo.svg'));
}
或者,可以直接将 HTML 传递给 brandLogo()
方法以呈现内联 SVG 元素,例如:
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->brandLogo(fn () => view('filament.admin.logo'));
}
如果黑暗模式下的Logo需要特殊处理,可以使用 darkModeBrandLogo()
方法。
使用 brandLogoHeight()
法自定义呈现徽标的高度:
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->brandLogo(fn () => view('filament.admin.logo'))
->brandLogoHeight('2rem');
}
自定义 favicon favicon()
要添加一个自定义的 favicon
,可以使用 favicon()
方法,将图标文件的 URL 传递给它。
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->favicon(asset('images/favicon.png'));
}