通常我们开发一个组件,最外层的 className 常用的命名有 box、wrap、container
但这些通用的名字有个缺点,那就是, 在一个大项目里会有很多组件, 如果每个组件外层都用这个 className , 就会带来很大的麻烦:
比如这里,我想从css,跳转到 对应的ts文件,就出现了很多的干扰项
名字都是 box,我根本不知道哪个div对应那个组件
所以,就需要一个好的命名习惯,来避免这些问题
在经过研究后,我发现bem命名规范非常不错,于是我就在它的基础上,演化出了我自己的命名规则:
组件 UserProfile
:
对组件进行分析后,我的命名习惯如下:
最外层是模块名字, 子模块的命名规则是 是 外层模块__子模块
, 如:
UserProfile 里的 face 模块,css命名就是 UserProfile__face
UserProfile 里的 name 模块,css命名就是 UserProfile__name
依次类推。不同模块之间用2个下划线分割,用下划线是为了方便ide来回跳转,
因为我是写react,如果用了减号分割,<div className={styles.a-box}>
是没法直接来回跳转的
最外层,我们不用 box、wrap、container, 而是使用了组件的名字:UserProfile
这种驼峰命名虽然会浪费几秒的时间来切换大小写字母,但好在这种浪费是一次性的
所以,最终,我这个组件的ts、css文件如下:
对于一些内部有多个相同结构子组件的组件,如 tab,swiper,nav,命名习惯如下:
组件名_item
以上,就是我目前根据 bem+ 自己浅薄的经验总结出来的方案, 希望未来有更好的方案
如何看待 CSS 中 BEM 的命名方式? - 知乎 (zhihu.com)
⒛ [规范] CSS BEM 书写规范 · Tencent/tmt-workflow Wiki (github.com)