老实说,这是个人喜好和经验的问题。
例如,看似实用的方法是在 div 上使用 .white-box 类; 超级简单,不需要导入!
稍后,您决定某个其他控件内的每个白框都需要更多阴影,因此您去为.some-component .white-box 添加一个 CSS 规则,然后 bam,现在你得到了一个阴影更白的盒子,而不会弄乱原来的 CSS 类。 简单又好用!
问题是,当你这样做一两次时,就没事了。但是您很快就会养成为特定目的“修补”类名称规则的习惯,并且在您知道之前,您会在自己不知道的情况下混合规则,这正是它在锡上所说的:Cascading 样式表。
我自己也去过那里,维护起来并不有趣。现在我为所有东西创建组件,即使是像白盒子这样简单的东西。诀窍是正确命名它们;你不会称它为WhiteBox,因为如果你改变框的颜色,剩下的代码就是谎言。 ;) 相反,称之为ContentBox;描述它的目的,而不是它的样子。然后使用 props 来判断盒子应该具备哪些特征:
<ContentBox shadow padded rounded>Awesome</ContentBox>
我个人是CSS Modules 的忠实粉丝,因为他们确保班级规则永远不会发生冲突,从而完全避免了上述问题。相反,如果您希望一个类从另一个类继承某些样式,CSS 模块可以让您将它们组合在一起。
示例 CSS 模块文件:
.root {
background-color: #fff;
}
还有一个 React 组件:
import React from 'react'
import styles from './ContentBox.css'
export default function ContentBox({ children }) {
return (
<div className={styles.root}>{children}</div>
)
}
实际使用的类名实际上类似于 ContentBox__root_abcd123random,因此即使您有另一个具有相同 .root 类的 CSS 文件,规则也不会发生冲突。
这样做的另一个好处是您的组件现在可以移植到其他项目,因为它只依赖于组件随附的 CSS 文件中的样式。在我们公司的许多内部网络应用程序中,我都非常喜欢使用这种策略进行重用。