主题设置

选择强调色与基础色,保存后全站生效。

强调色
基础色
点击切换锁定状态

更新日志

这里有什么新鲜事?

关于 FluxUI 中文网 · 官方 Livewire UI 库的简洁而有用的更新。

December 12, 2024

深色模式控制

版本 ^1.0.30

Flux 一直支持深色模式:当你的系统外观改变时,Flux 会随之适配。

不过,这种“跟随系统”的支持,与提供可独立于系统偏好、由站点自行完全控制的深色模式之间,存在着不小的差距。

在进入细节之前,先看看现在要创建一个如上图所示的深色模式切换器有多么简单。下面就是该切换器所使用的完整代码:

<flux:radio.group variant="segmented" x-model="$flux.appearance">

    <flux:radio value="light" icon="sun">浅色</flux:radio>

    <flux:radio value="dark" icon="moon">深色</flux:radio>

    <flux:radio value="system" icon="computer-desktop">系统</flux:radio>

</flux:radio.group>

这里还有一个更简单的切换按钮代码片段:

<flux:button x-on:click="$flux.dark = ! $flux.dark" ... />

新的 JavaScript API

正如你在上面的代码片段中所看到的,Flux 现在在 Alpine 表达式中提供了一个魔法对象 $flux 可供使用。

这个魔法对象上有两个与深色模式相关的属性:.dark.appearance

你可以通过布尔属性 $flux.dark 获取/设置应用的深色状态。也可以通过 $flux.appearance 获取/设置应用的主题偏好(该属性的取值为三者之一:lightdarksystem)。

有了这两个简单的属性,你就可以实现任意形式的深色模式控制组件。例如:下拉选择、菜单、按钮、开关、单选组、卡片,或分段单选等。只受你的想象力限制。

如果你需要在 Alpine 之外进行控制,我们还在全局 window 上提供了一个 Flux 对象:window.Flux

现在,你可以这样做:

let button = document.querySelector('...')

button.addEventListener('click', () => {

    Flux.dark = ! Flux.dark

})

底层是如何工作的?

开箱即用地,Flux 会在你页面的 <body> 元素上添加/移除 .dark 类。

这意味着你可以很容易地通过如下 Tailwind 配置,让 Tailwind 根据该类而不是系统偏好来切换:

module.exports = {

    darkMode: 'selector',

    ...

}

Flux 还处理了诸多细节,例如将用户的外观偏好存到 localStorage 中,以便在页面加载之间保持该选择。

我们也会在运行时监听系统偏好的变化,从而无需等待页面重新加载就能让站点自适应。

这些事儿自己做并不算火箭科学,但确实比你期望的要复杂。用起来吧。

阅读完整文档,获取更多解释与示例 ->

November 13, 2024

多选

版本 ^1.0.23

我们在发布时暂缓了多选功能,因为我们觉得有很多细节需要打磨。但现在它来了。在 Flux 1.0.23 及以上版本中,你现在可以传入 multiple 属性,将单选选择器变为多选:

<flux:select variant="listbox" multiple>

    <flux:option>Photography</flux:option>

    ...

</flux:select>

当然,数据绑定也如你所料。通过在 wire:model 中传入一个 Livewire 属性名,Livewire 会让该属性的状态与你的选择保持同步:

<flux:select wire:model="selected" variant="listbox" multiple>

<?php

class extends Livewire\Component

{

    public $selected = [];

    

    ...

}

我们对多选的未来有更多计划,例如新增用于选择药丸、标签、头像等的变体,但就目前而言,这是一个很好的开始。

阅读更多关于多选 ->

自定义选中后缀

在你第一次选择后,Flux 会显示已选择的项数,并在后面跟上“selected”一词。

如果你想让它更具上下文含义,可以通过 selected-suffix 属性进行自定义:

<flux:select selected-suffix="industries selected" variant="listbox" multiple>

阅读更多关于选中后缀 ->

复选框指示器

默认的对勾图标现在在多选时可配置。如果你想要复选框作为可视化指示器,可以使用新的 indicator 属性:

<flux:select indicator="checkbox" variant="listbox" multiple>

阅读更多关于自定义选择指示器 ->

完整变更日志

  • 支持多选

  • 当点击选择列表的可清除按钮时分发 input 事件,以便 wire:model.live 捕获更改

在 GitHub 查看完整发布

November 3, 2024

自定义图标集、文件输入、点击外部关闭模态框等

版本 ^1.0.20

Flux 默认内置完整的 Heroicons 图标集。和 Tailwind 团队的一贯作风一样,质量很高。

不过,约 400 个图标相较其他替代方案仍略显有限。

如果你项目中需要的图标在 Heroicons 里没有,很可能可以在 Lucide 中找到。

在 Flux v1.0.20 中,我们提供了一个新命令,可轻松将单个 Lucide 图标导入到你的项目:

php artisan flux:icon

运行后会提示你输入需要的图标名称,并会将图标本地导入到项目中,格式化为可与 Flux 一起使用的 Blade 组件。

如果 Lucide 仍没有你需要的图标,你也可以将自定义图标手动添加到项目中的以下目录:

resources/views/flux/icon/your-custom-icon.blade.php

了解更多关于添加自定义图标 ->

自定义文件输入

浏览器默认的文件输入元素几乎无法样式化,而且坦白说看起来已经过时。

我们为原生文件输入提供了一个简单封装,并通过输入组件的 type="file" 对外提供:

<flux:input type="file" />

当然,我们确保该封装与原生输入一样,对键盘、鼠标和读屏器都工作良好。

了解更多关于文件输入 ->

点击外部关闭模态框

Flux 的模态框使用浏览器较新的 <dialog> 元素。这带来了很多好处,但也有一些小问题。其中之一是 <dialog> 元素不支持通过点击外部来关闭模态框;只能使用 Esc 键或关闭按钮。

通过少量自定义 JavaScript,我们已在 Flux 中实现了该行为。现在默认所有 <flux:modal> 组件都会支持点击外部关闭。

可清除的输入与选择

本次发布的另一个小改进是:当填充内容时,Flux 中任何可搜索的输入都会显示清除按钮。

对于默认不显示清除按钮的输入,我们也提供了可配置:

<flux:input clearable />

<flux:select variant="listbox" clearable>

    ...

</flux:select>

<flux:command>

    <flux:command.input placeholder="搜索..." />

    

    ...

</flux:command>

完整更新日志

  • 添加 flux:icon 命令,用于从 Lucide 导入 Heroicons 缺失的第三方图标

  • 为 listbox、可搜索输入与 command 输入支持清除按钮

  • 将已弃用的 'color-adjust' CSS 属性替换为 'print-color-adjust'

  • 修复侧边栏布局中个人资料名称未被截断的问题

  • 修复复选框、单选与开关在 wire:model 下因异常 input/change 事件触发导致的问题

  • 修复 dynamic-component 属性被双重转义的问题

  • 修复复选框组初始值为 null 的问题

  • 当已选项元素被移除时,保留选中项的展示事件

  • 支持通过点击外部关闭模态框

  • 新增自定义文件输入组件

在 GitHub 查看完整发布说明

© 2025 FluxProMax™. All Rights Reserved.

备案号:皖ICP备13019729号-11

网站导航