tailwind css 样式与其他ui库的冲突问题

10,295 阅读2分钟

最近遇到一个原子化css的工具-tailwind css。之前在项目中,都是自己手动将常用的css样式提取出来放在一个公共文件当中,然后全局引用,初步接触到tailwind css之后发现这个工具很好用。

但是,由于对它不是很熟悉,所以也遇到了一些问题,下面记录一下:

问题:

在项目中,我通常会去引入ui库,例如element plus,ant design。但是引入tailwind css之后特别是按钮的样式,初始直接变成了透明,我第一反应就是样式冲突。通过度娘了解了一些解决办法:

问题原因:

image.png tailwind css最新版本中,对样式进行了预设。影响按钮透明的代码如下:

button,
[type='button'],
[type='reset'],
[type='submit'] {
    -webkit-appearance: button;
    background-color: transparent; //就是它
    background-image: none;
}

解决方式

  • 方法一:
将ui库样式的引入放在tailwind css之后
  • 方法二:

image.png

取消基础映射样式的引入,即不添加@tailwind base;这句话。
问题:
 这样做,样式很多都会存在问题
  • 方法三:(推荐)

1682411441157.png

1.禁用预设样式 (作用类似于方法一)
corePlugins: {
  preflight: false,
         }

2.添加自己的初始文件css
复制<https://unpkg.com/browse/tailwindcss@3.0.23/src/css/preflight.css> 内容,
删除button相关的样式

结果:这种方式相当于重写基础预设样式,此时解决了button透明问题的同时,其余样式影响较小

参考博文:https://www.ithere.net/article/1522822664205697025
  • 方法四:

image.png

官网给出了这种方法,可以在原有基础上,自定义基础样式,那我们可以对button背景色设置透明的css样式进行重写
@layer base { 
button, [type='button'], [type='reset'], [type='submit']
{ background-color: var(--n-color); //你用的UI库的 color }
}

**缺点**:但是这种方式会影响到tailwind原本的背景颜色,
相当于满足了ui库的button样式,却引发了tailwind 的样式(而且影响的样式多少未可知)

总结:

其实,tailwind css的样式都是原子化的,基础预设样式很好覆盖。就像我现在遇到的这种按钮透明的情况,直接可以在button上面定义一个自己的class进行覆盖就好了。

如下操作:

  1. 我用的是react+ant design,在不改变任何tailwind配置的情况下,初始按钮样式如下:

image.png

image.png

  1. 定义样式后

image.png

image.png