接触Ant Design是几个月之前,那时候公司需要做一个后台管理系统给公司内部人员使用,因为是内部人员使用的所以主要能实现功能就行,对具体界面UI上面没有啥要求,设计师也没有专门出设计稿。在这种情况下,发现了Ant Design这个框架。
刚发现Ant Design的时候,说实话被惊艳到了,因为组件太全面了。之前用google的material UI框架的时候,很多组件都没有,需要自己写或者找第三方插件,但是Ant Design,真的是能想到的组件基本上都有,而且样式都还不错。所以在进行没有特别多UI设计要求的后台开发的时候,Ant Design大大提高了开发效率,想用啥组件拿来就用,在那个时候也成功被圈粉了。
进行完后台开发,重新回到公司主项目开发之后。跟公司其他开发人员交流之后,决定把ant design导入项目依赖包,然后在开发的过程中,慢慢替换跟舍弃material UI。然而之后的开发,我也发现了Ant Design的弊端,那就是组件基本上是完全没有办法自定义样式,基本上所有组件都不接收style参数。想要换个颜色?不行。想要改个大小?也不行。当时心中真的一万只草泥马跑过。。。
那如果一定要自定义样式改怎么做呢?两个方法,第一种:直接改Ant Design的源码,第二种:通过css强制覆盖。第一种方法,没太多好讲的,如果你准备改源码,要不就把ant的代码拷贝到本地,要不就自己新建一个依赖,用自己更改之后的依赖。这种方法比较麻烦,你需要理解ant的源代码,同时因为ant很多代码是用ts写的,所以如果你不太了解ts也没办法这么做,最重要的是,很容易出bug。所以这里我准备具体讲一下第二种方法。
通过css强制更改,主要是用css中的important强制覆盖掉ant design的样式。我们首先在审核ant组件的元素找到组件的类名,然后在css文件中输入类名,将你需要覆盖的样式用important强制覆盖。同时为了防止强制覆盖样式会引起全局的样式冲突,我们需要给组件的父级一个id,然后css中,组件的类名需要写在父级的id里面,这样样式覆盖只会在你定义的这个父级里面生效。
但是这种方法也会有两个缺点。第一:这种方式有时候没办法覆盖通过js控制的动态变化的样式。第二点,父级是在最顶层的组件也不好用这种方法去强行覆盖,比如弹框组件。
总结:ant design确实是一个很好的第三方框架,组件非常全面,样式效果也都比较不错,但是可能是因为ant希望用这个框架的用户都按照他们的设计思路来,所以导致这个框架自定义程度很低。所以,如果需要想用ant design,我的建议是项目里面同时还要有一套material UI框架,或者别的自定义程度高的第三方框架,这样当实在没有办法更改ant的样式满足项目需求的时候的,还有另外的框架可以用。