Normalize.css在React项目中如何正确引入并生效?
在React项目里引入Normalize.css后样式没变化,应该怎么办?我之前在public/index.html里通过CDN引入过,但页面元素的默认样式还是没调整。后来又试着在App.js里用import引入了node_modules里的normalize.css文件,但输入框的边距和列表符号还是没变化…
// 第一次尝试:public/index.html里添加了
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css" rel="external nofollow" >
// 第二次尝试:App.js里写了
import 'normalize.css/normalize.css';
function App() {
return <ul>
<li>测试列表项</li>
</ul>;
}
两种方法都试过,但列表项前的默认圆点和输入框的边距padding完全没变化,是不是还有其他地方需要配置?
第一种方式,你在public/index.html里通过CDN引入,理论上是没问题的,但你要确认下浏览器是不是真的加载到了这个文件。打开开发者工具,看看Network面板里有没有这个请求,状态码是不是200。如果没加载到,可能是网络问题或者路径写错了。另外,有些浏览器对CDN资源可能会有缓存问题,可以尝试强制刷新页面,或者换个CDN地址试试。
第二种方式,你在JS里面用import引入normalize.css,这个方法也是可行的,但要注意一点:React项目默认使用Webpack打包,而Webpack对CSS文件的处理需要配置loader。如果你的项目是用Create React App脚手架初始化的,那这部分配置其实已经帮你搞定了,所以直接import就行。但如果你是自己配置的Webpack环境,得确认css-loader和style-loader是否正确安装和配置,不然CSS文件可能没被打包进去。
现在说说为啥样式还是没生效。Normalize.css的作用是统一不同浏览器的默认样式,但它并不会完全重置所有样式。比如列表项前面的小圆点、输入框的padding这些,Normalize.css其实是保留了它们的基本样式。如果你想要更彻底的样式重置,可以考虑搭配Reset CSS或者直接自己写额外的样式覆盖掉。
举个例子,你可以这样写:
把这些样式加到你的全局CSS文件里,或者在App.js里引入一个新的CSS文件也行。
最后再提醒一下,检查下你的项目里是不是有其他CSS文件覆盖了Normalize.css的样式。可以用开发者工具的Elements面板查看具体的样式来源,看看是不是被其他规则覆盖了。如果确实被覆盖了,记得调整优先级或者用!important临时解决。
总之,先确认Normalize.css确实被加载了,然后根据需求决定要不要额外写样式覆盖默认行为。别忘了,Normalize.css不是万能的,它只是帮你抹平浏览器差异,不是彻底清空所有样式。