无样式模式

使用您自己的样式为 PrimeVue 设置主题。

术语无样式用于定义一种替代的样式方法,而不是使用设计令牌的默认主题。PrimeVue 提供了两种选项,可以使用您自己的 CSS 设置组件的样式;混合模式和纯粹模式。

在这两种选项中,都不包含设计令牌的 CSS 变量和使用它们的 CSS 规则集。主要的区别在于,混合模式保留了 DOM 中的选择器,例如p-select,而纯粹模式则不包含它们。无样式的组件仍然需要在您的端进行样式设置,在接下来的部分中,我们将介绍这两种模式的样式解决方案。

混合纯粹
DOM 中的 p-* 选择器
CSS 规则集
CSS 变量

由于有样式化、纯粹和混合等多种选项,选择哪种样式方法可能会令人困惑。我们制作了一个简短的视频,讨论了每种方法的优缺点。

总而言之,样式模式是一个强大的 API,具有对 Figma 的一流支持,因此,当与使用 PrimeVue Figma UI 工具包的 UI 设计师合作时,开发流程将是高效的。当您不希望学习默认的主题 API、希望完全控制样式或需要在应用程序中使用 Tailwind CSS 作为唯一的样式库时,无样式模式会很有用。无样式模式的缺点是,需要在应用程序中维护样式。

通过在 PrimeVue 安装期间启用unstyled选项,可以为整个套件启用纯粹模式。


import { createApp } from "vue";
import PrimeVue from "primevue/config";
const app = createApp(App);

app.use(PrimeVue, { unstyled: true });

或者,即使在默认的样式模式下,也可以通过添加组件的unstyled属性将特定的组件用作无样式组件。


<Button label="Check" icon="pi pi-check" unstyled></Button>

这是一个使用 传递属性使用 Tailwind CSS 设置按钮组件样式的示例。在开始之前,请前往 按钮 文档中的传递部分,以了解有关组件内部结构的更多信息。我们将使用标签图标元素添加自定义样式。


<Button
    label="Search"
    icon="pi pi-search"
    unstyled
    pt:root="bg-teal-500 hover:bg-teal-700 active:bg-teal-900 cursor-pointer py-2 px-4 rounded-full border-0 flex gap-2"
    pt:label="text-white font-bold text-lg"
    pt:icon="text-white text-xl"
/>

可以在应用程序级别创建全局配置,以避免通过全局pt选项进行重复,以便可以从单个位置共享样式。特定组件仍然可以使用其自己的pt属性覆盖全局配置。


import { createApp } from "vue";
import PrimeVue from "primevue/config";
const app = createApp(App);

app.use(PrimeVue, {
    unstyled: true,
    pt: {
        button: {
            root: 'bg-teal-500 hover:bg-teal-700 active:bg-teal-900 cursor-pointer py-2 px-4 rounded-full border-0 flex gap-2',
            label: 'text-white font-bold text-lg',
            icon: 'text-white text-xl'
        },
        panel: {
            header: 'bg-primary text-primary-contrast border-primary',
            content: 'border-primary text-lg text-primary-700',
            title: 'bg-primary text-primary-contrast text-xl',
            toggler: 'bg-primary text-primary-contrast hover:text-primary hover:bg-primary-contrast'
        }
    }
});

Tailwind CSS 非常适合纯粹模式,我们的团队已启动全局pt配置的参考实现,以设置名为 Tailwind CSS 预设的整个 UI 套件的样式。此附加项目目前正在寻找社区贡献者来接管所有权,因为它需要 PrimeTek 大量的带宽来通过传递维护样式模式和无样式模式预设。

通过将主题选项设置为none,可以为整个套件启用混合模式。


import { createApp } from "vue";
import PrimeVue from "primevue/config";
const app = createApp(App);

app.use(PrimeVue, { theme: 'none' });

在混合模式下,不包括默认的 CSS 规则和变量,但是 CSS 选择器驻留在 DOM 中,以便您可以使用它们构建自己的规则。


.p-button {
    background: #a855f7;
    border: 0 none !important;
    color: white;
    padding: 0.5rem 0.75rem;
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    border-radius: 24px;
}

.p-button:enabled:hover {
    background: #a855f7;
}

.p-button:enabled:active {
    background: #9333ea;
}

PrimeTek 基于具有 IntelliSense 支持的@apply指令提供了整个 PrimeVue UI 套件的 Tailwind CSS 版本。请访问PrimeVue 的 Tailwind 版本,以获取文档、演示和其他资源。