chakra是否有必要结合tailwindcss
前言
有个静态页面项目, 使用的是 next.js@10.2.3
, 当初 UI 选择的是 chakra@1
. 最近有个页面, 想要自定义程度高一点。 于是想到了 tailwindcss
。 但是 chakra
本身就是带有样式的组件了, 两者结合起来,是否有必要, 我们来看一看。
如何选择 chakra 和 tailwindcss
我们首先看看官网是怎么对比的:Comparison - Chakra UI
- Tailwind CSS:CSS 框架,提供原子化的 CSS 类来帮助您样式化组件,让您处理诸如可访问性、组件组合、键盘导航、样式覆盖等众多其他事项。
- Chakra UI:一个精心创建的 React 组件库,具有 Tailwind 的所有样式优势,并负责处理所有细节。
- 如果是对 css 比较熟悉,有设计美感的人,可以使用 tailwindcss 更好。
- 如果是前端开发,使用组件较多的人,还是使用 chakra 比较好。
另外一个 issue: Tailwind integration · Issue #634 · chakra-ui/chakra-ui, chakra 的创始人也其中参与了讨论:
- 他看法就是可以一起用, tailwindcss 就是增加了一些 class.
chakra 的 props 是怎么设计的?
通过把 css-in-js
那种写法转换成 props 设计,Style Props - Chakra UI
一定需要结合 tailwindcss, 我们需要注意什么?
从上面的选择看得出来,使用好 Style Props - Chakra UI 就能灵活的定义 UI 了。所以我不折腾了, 就打算用 chakra
了。但我们还是可以看看, 两者结合起来的时候, 需要注意什么。
prelight 的样式冲突
不使用 tailwindcss 的 base 样式,而是交给 UI 组件去统一, 这样 tailwindcss 的作用就是提供封装好的 class, 用于快速开发。
- Preflight - Tailwind CSS
- nextjs13-with-antd-tailwindcss/tailwind.config.js at main · hongfaqiu/nextjs13-with-antd-tailwindcss
潜在的 class 冲突
theme 的冲突
使得 chakra 能够获取到 tailwindcss 配置的 theme, 从而能够使用 tailwindcss 的颜色配置。issue
在 emotion 中使用 twin.macro 实现 tailwindcss 的样式
把配置的复杂度又提升了一个 level.
- twin.examples/t3-emotion-typescript at master · ben-rogerson/twin.examples
- twin.examples/next-emotion-typescript at master · ben-rogerson/twin.examples
结束语
既然用了 ChakraUI , 就符合他的那套模式,通过 style props 控制,主题样式,可有类似 tailwindCSS 的配置方案。和第三方组件结合的话, 也可使用 emotion 作为样式书写的工具。
另外 tailwindCSS 还是特别灵活的,上手难度不大,但用好的曲线还是比较陡峭的。最后我再推荐一个 UI 项目, 是 headless + tailwindcss 的结合,shadcn/ui, 值得试试。