Preline UI
基于 Tailwind CSS 的开源组件库,提供 840+ 预构建 UI 组件和 190+ 启动模板
ReactTailwind CSS开源组件库Figma 设计系统
Preline UI 提供 840+ 免费 UI 组件和 190+ 模板,以丰富的组件数量和高质量 Figma 设计文件闻名,通过 Tailwind CSS 工具类实现样式并内置 JavaScript 插件处理交互行为。
Preline UI
基于 Tailwind CSS 的开源组件库,提供 840+ 预构建 UI 组件、190+ 启动模板和免费 Figma 设计系统。
技术简介说明
Preline UI 是由 HTMLStream 团队开发的基于 Tailwind CSS 的组件库,提供超过 840 个免费 UI 组件和 190+ 启动模板。它以丰富的组件数量和高质量的 Figma 设计文件而闻名,是 Tailwind 生态中组件数量最多的库之一。
Preline UI 的核心理念是"设计到开发"的一致性。它提供免费的 Figma 设计系统文件,与组件库完全同步,确保设计师和开发者使用同一套设计语言。组件通过 Tailwind CSS 工具类实现,并通过内置的 JavaScript 插件处理交互行为(模态框、下拉菜单、标签页等)。
截至 2026 年 5 月,Preline UI 已发布 v4.2.0 版本,全面支持 Tailwind CSS v4,并提供 10+ 框架的安装指南。GitHub 上拥有约 6.3K stars,采用 MIT 许可证,同时提供 Pro 付费版本。
基本信息
- 官网:https://preline.co
- GitHub:https://github.com/htmlstreamofficial/preline
- License:MIT License(开源)/ Pro 商业许可
- 最新版本:v4.2.0(2026 年 5 月 10 日)
- 主要维护者:HTMLStream(htmlstreamofficial)
快速上手
安装
# npm 安装
npm i preline// tailwind.config.js
module.exports = {
content: [
'./node_modules/preline/preline.js',
'./src/**/*.{html,js,ts,jsx,tsx}'
],
plugins: [
require('preline/plugin')
]
}基础配置
<!-- CDN 快速引入 -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/preline.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/preline.min.js"></script>// 在入口文件中初始化
import 'preline/preline'最小示例
<!-- 下拉菜单 -->
<div class="hs-dropdown relative inline-flex">
<button id="hs-dropdown-default"
type="button"
class="hs-dropdown-toggle py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-gray-200 bg-white text-gray-800 shadow-sm hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none dark:bg-neutral-800 dark:border-neutral-700 dark:text-white dark:hover:bg-neutral-700"
aria-haspopup="menu"
aria-expanded="false"
aria-label="Dropdown">
下拉菜单
<svg class="hs-dropdown-open:rotate-180 size-4" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"/></svg>
</button>
<div class="hs-dropdown-menu transition-[opacity,margin] duration hs-dropdown-open:opacity-100 opacity-0 hidden min-w-60 bg-white shadow-md rounded-lg mt-2 dark:bg-neutral-800 dark:border dark:border-neutral-700"
role="menu"
aria-orientation="vertical"
aria-labelledby="hs-dropdown-default">
<div class="p-1 space-y-0.5">
<a class="flex items-center gap-x-3.5 py-2 px-3 rounded-lg text-sm text-gray-800 hover:bg-gray-100 focus:outline-hidden focus:bg-gray-100 dark:text-neutral-400 dark:hover:bg-neutral-700 dark:hover:text-neutral-300 dark:focus:bg-neutral-700"
href="#">
选项一
</a>
<a class="flex items-center gap-x-3.5 py-2 px-3 rounded-lg text-sm text-gray-800 hover:bg-gray-100 focus:outline-hidden focus:bg-gray-100 dark:text-neutral-400 dark:hover:bg-neutral-700 dark:hover:text-neutral-300 dark:focus:bg-neutral-700"
href="#">
选项二
</a>
</div>
</div>
</div>核心概念与架构
组件架构
Preline UI 采用"CSS + JS 插件"的分层架构:
- CSS 层:所有组件通过 Tailwind CSS 工具类实现样式
- JS 插件层:内置 JavaScript 插件处理交互行为
- Figma 层:免费 Figma 设计系统与设计稿同步
- 模板层:190+ 预组合的页面模板
JavaScript 交互插件
| 插件 | 功能 |
|---|---|
| HSOverlay | 模态框/抽屉覆盖层 |
| HSDropdown | 下拉菜单 |
| HSTabs | 标签页切换 |
| HSAccordion | 手风琴展开 |
| HSSelect | 自定义选择器 |
| HSToggleCount | 计数切换 |
| HSRemoveElement | 元素移除 |
| HSTooltip | 工具提示 |
| HSPopover | 弹出框 |
组件模式
<!-- 所有交互组件通过 data-* 属性声明 -->
<div data-hs-overlay="#hs-overlay-example">
<button type="button"
class="hs-overlay-toggle py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-transparent bg-blue-600 text-white hover:bg-blue-700">
打开模态框
</button>
</div>
<div id="hs-overlay-example"
class="hs-overlay hidden size-full fixed top-0 start-0 z-[80] overflow-x-hidden overflow-y-auto"
role="dialog"
tabindex="-1"
aria-labelledby="hs-overlay-example-label">
<!-- 模态框内容 -->
</div>核心特性
- 840+ 组件:覆盖导航、表格、表单、卡片、模态框、下拉菜单等
- 190+ 模板:电商、仪表盘、着陆页等场景模板
- JS 交互插件:内置插件处理模态框、下拉菜单等交互
- 深色模式:所有组件支持
dark:前缀切换 - 免费 Figma:完整的设计系统 Figma 文件
- 多框架支持:React、Vue、Next.js、Nuxt、Laravel、Astro 等
- RTL 支持:支持从右到左的布局方向
- 可访问性:企业级 ARIA 属性支持
- Pro 版本:高级企业组件和专属模板
生态图
核心产品
| 项目 | 说明 |
|---|---|
| Preline UI | 核心开源组件库 |
| Preline Pro | 商业付费版本 |
| Preline Templates | 190+ 页面模板 |
框架支持
| 框架 | 支持状态 | 说明 |
|---|---|---|
| HTML (Vanilla) | ✅ 完整支持 | 原生 JavaScript |
| React | ✅ 官方指南 | 详细安装文档 |
| Vue | ✅ 官方指南 | 详细安装文档 |
| Next.js | ✅ 官方指南 | App Router 支持 |
| Nuxt | ✅ 支持 | v3 支持 |
| Laravel | ✅ 官方指南 | Blade 模板 + YouTube 教程 |
| Astro | ✅ 支持 | 官方文档 |
| Svelte | ⚠️ 社区支持 | 非官方 |
| Qwik | ⚠️ 有限支持 | 存在 SPA 卸载问题 |
设计工具
| 工具 | 说明 |
|---|---|
| Figma 设计系统 | 免费 Figma 文件 |
| Claude Code Skill | AI 主题生成器 |
适用场景
- 快速原型开发:840+ 组件即拿即用
- 营销网站/着陆页:丰富的模板库
- 管理后台/仪表盘:专业模板和组件
- 电商网站:完整电商组件集
- 设计到开发协作:Figma 系统与设计高度一致
- Tailwind CSS 项目:原生集成最佳搭配
- 多框架团队:覆盖主流前端框架
开发与工程化
开发流程
- 通过 npm 安装 Preline 依赖
- 配置 Tailwind CSS 引入 Preline 插件和 content 路径
- 按需使用 HTML + Tailwind 类名组合组件
- 引入 Preline JavaScript 处理交互行为
- 使用 Figma 设计文件保持设计与代码一致
框架开发
# Next.js 项目
npm i preline
# 在 next.config.js 中配置 transpilePackages
# Laravel 项目
npm i preline
# 在 webpack.mix.js 或 vite.config.js 中引入构建部署
npm run build # Tailwind 编译 + 项目构建SPA 注意事项
Preline 使用直接 DOM 操作(非虚拟 DOM),在 SPA 框架中需要注意:
// React 中手动初始化
import { useEffect } from 'react'
import { HSStaticMethods } from 'preline/preline'
useEffect(() => {
HSStaticMethods.autoInit()
}, [])性能与安全
性能特点
| 维度 | 说明 |
|---|---|
| CSS 体积 | 通过 Tailwind PurgeCSS 优化 |
| JS 体积 | 轻量插件,按需加载 |
| 运行时 | 直接 DOM 操作,无框架依赖 |
| Tree-shaking | 通过 npm 包支持按需导入 |
优化建议
- 生产环境确保 PurgeCSS 启用
- 避免 CDN 和生产环境混用
- SPA 框架注意组件挂载/卸载时的 DOM 清理
- 复杂页面使用懒加载
安全注意事项
- 避免直接使用
innerHTML渲染用户输入 - 注意 XSS 防护
- 模态框等交互组件注意焦点管理
技术对比
| 维度 | Preline UI | Flowbite | DaisyUI | shadcn/ui |
|---|---|---|---|---|
| 组件数量 | 840+ | 600+ | 50+ 主题组件 | 50+ |
| 底层 | Tailwind CSS | Tailwind CSS | Tailwind CSS | Tailwind + Radix |
| JS 交互 | 内置插件 | 内置 JS | 纯 CSS(无 JS) | 客户端组件 |
| 深色模式 | ✅ | ✅ | ✅ | ✅ |
| 框架支持 | 多框架 | 多框架 | 多框架 | React 优先 |
| 许可证 | MIT | MIT | MIT | MIT |
| Figma 集成 | ✅ 免费 | ✅ 免费 | ⚠️ 社区 | ⚠️ 社区 |
| GitHub Stars | ~6.3K | ~33K | ~35K | ~118K |
| 社区规模 | 中等 | 大 | 大 | 最大 |
| 代码所有权 | 库依赖 | 库依赖 | 库依赖 | 复制源码 |
关键差异
- vs Flowbite:Preline 组件更多(840+ vs 600+),Figma 集成更好;Flowbite 社区更大、框架包更成熟
- vs DaisyUI:Preline 组件更丰富含 JS 交互;DaisyUI 更轻量纯 CSS
- vs shadcn/ui:shadcn 给予完全代码所有权;Preline 组件数量更多
最佳实践
组件使用
- 确保 Tailwind 正确配置:先配置好 Tailwind 再引入 Preline
- 配合 Headless UI 使用:Preline 负责样式,Headless UI 负责行为
- 深色模式统一处理:使用
dark:前缀或系统级切换 - 使用官方 Figma 文件:确保设计稿与实现一致
- 遵循 Tailwind 约定:通过配置扩展而非覆盖类名
SPA 框架最佳实践
// Next.js / React 中的初始化
'use client'
import { useEffect } from 'react'
import { HSStaticMethods } from 'preline/preline'
export default function Layout({ children }) {
useEffect(() => {
const initPreline = async () => {
const { HSStaticMethods } = await import('preline/preline')
HSStaticMethods.autoInit()
}
initPreline()
}, [])
return <>{children}</>
}常见陷阱
- 忘记在
tailwind.config.js中添加 Preline 的 content 路径 - 忘记引入 Preline JavaScript 导致交互组件失效
- SPA 框架中忘记处理组件生命周期导致的 DOM 残留
- 与 Livewire 等动态渲染框架配合时存在 JS 初始化冲突
技术局限与边界
| 限制 | 说明 |
|---|---|
| 社区较小 | 相比 Flowbite/DaisyUI,第三方资源和教程较少 |
| Pro 组件付费 | 部分高级组件需购买 Pro 版本 |
| 深度主题化受限 | 不适合完全脱离 Tailwind 默认值的设计 |
| Livewire 不兼容 | 下拉/选择器与 Laravel Livewire 存在冲突 |
| SPA 卸载问题 | 直接 DOM 操作在 SPA 框架中清理不彻底 |
| 输入框自动填充 Bug | 自动填充可能误触验证错误(Issue #370) |
不太适合的场景
- 需要完全代码所有权的项目(考虑 shadcn/ui)
- 与 Livewire 等动态渲染框架配合的项目
- 追求最大社区支持的项目(考虑 Flowbite 或 DaisyUI)
- 需要极简 bundle 大小的项目
学习资源
官方资源
社区资源
视频教程
- Laravel 集成教程(YouTube)
2026 年现状
最新版本
| 版本 | 发布日期 | 亮点 |
|---|---|---|
| v4.2.0 | 2026.5.10 | 新组件、10+ 框架指南 |
| v4.1.3 | 2026.3 | 文档更新、修复改进 |
| v3.0.0 | 2025 初 | 支持 Tailwind CSS v4 |
发展趋势
- Tailwind CSS v4 全面支持:v3.0.0 起完全兼容
- 框架指南扩展:10+ 框架安装指南持续更新
- AI 工具集成:推出 Claude Code Skill 主题生成器
- Pro 版本扩展:更多企业级组件和模板
社区活跃度
- 6.3K+ GitHub Stars
- 活跃的更新日志(月更)
- GitHub Discussions 社区支持
未来路线图
- 更多组件和模板
- 改进 SPA 框架兼容性
- 扩展 AI 工具集成
- 优化可访问性支持