当前位置: 首页 > 科技观察

你知道两种CSS方法论吗?

时间:2023-03-16 16:22:30 科技观察

前言说起CSS的命名规范,大家应该都不陌生,或者应该听说过BEM。BEM是Yandex团队提出的一种CSSClass命名方式,旨在帮助开发者创建更好、更一致的CSS模块。BEM将页面的类名分为块(Block)、元素(Element)、修饰符(Modifier)。块:块是一个视觉或语义的整体,它是一个特定的、唯一的元素,例如页面上的弹出窗口,或搜索框;元素:一般认为是块的A组件,元素比较以其父块的块名称为前缀,例如弹出窗口的标题、关闭按钮、确认按钮;修饰符(Modifier):修饰符表示特定元素的特定状态,例如,关闭按钮显示鼠标未放置和放置时两种状态。现在用Bootstrap的弹窗组件来举个更具体的例子:鼠标被放置的状态和没有被放置的状态是有区别的。从上面的例子可以看出,块和元素是用两个下划线(__)连接的,而元素和修饰符是用两个破折号(--)连接的。当然,今天的文章不会关注什么是BEM。如果你之前没有接触过BEM,可以试着去了解它,在项目中多尝试几次,感受一下它的魅力。另外,网上已经有很多介绍BEM的文章。如果你耐心搜索,你一定会找到优秀的教程。今天的文章将分享两种介绍较少的CSS方法论:SUITCSS和SMACSS。SUITCSS》官方文档:SUITCSSNamingConventions(https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md)SUITCSS是一种基于组件的CSS方法论,将有两种类型类名的种类:工具类和组件类,工具类CSS中有很多固定的工具类,比如:左右浮动,文本截断,垂直居中……工具类的作用是帮助程序减少一些重复的代码,andProvideaconsistentimplementation.命名规则:u-[sm-|md-|lg-]<工具类名>.工具类以u-开头,后接类名(类名以驼峰命名),并且可以在中间添加使用sm,md,lg的响应规则。举个栗子:👉看看我的博客爱折腾的前端工程师,欢迎关注我的公众号”更多amazingfront-end”

组件类组件类用于描述具体的组件,组件是具体应用的基石,因此组件的设计尤为重要。命名规则:[-][-descendantname][--modifier],这种命名方式在编写HTML和CSS时有几个好处:有助于区分组件的根元素、后代元素和用于修饰的类;减少类名重复的概率;可以让类名更语义化;我们来看看命名规则各部分的具体作用:namespace(optional)namespace是可选的,如果你想避免冲突在自己定义的组件类名和引入的第三方样式类名之间,可以给自己的类名加上命名空间。但是,如果你的业务中没有第三方样式,你可以不用命名空间。.sfq-Modal{}/*我的弹窗组件*/.sfq-Button{}/*我的按钮组件*/组件名称组件名称使用大驼峰规则(首字母大写驼峰规则,PascalCase)对于命名,使用这种方式也可以尽量避免同名样式的冲突。.Modal{}
Componentname-descendantname组件的后代是指附属于该组件的部分,例如弹窗组件的标题、按钮等。后代姓名使用小驼峰命名法(CamelCase,首字母大写)。欢迎关注X爱折腾的前端工程师,欢迎关注我的公众号《更神奇的前端》
组件名--modifier修饰符是一个表达组件特定状态的方式修饰符名称的类名也是使用小驼峰规则命名的,需要和组件名直接用两个破折号(--)连接,这与BEM一致表现。点击关注“更精彩的前端”点击关注“更精彩的前端”变量名SUITCSS除了定义工具类和组件类两种命名方式外,还定义了CSS变量的命名方式。命名规则:--组件名[-后代名|--修饰符]-(CSS属性|变量名)。:root{/*基本按钮的背景颜色*/--Button--default-backgroundColor:#909399;/*主按钮的背景颜色*/--Button--primary-backgroundColor:#409EFF;}SUITCSS总结SUIT除了定义工具类和组件类的命名方式外,CSS还提供了完整的基础类和测试套件来检查你的CSS类名是否符合规范。具体使用方法请参考官方文档(https://github.com/suitcss/suit)。可以说SUITCSS在BEM的基础上进行了改进,尤其是没有双下划线的设计,在外观上比BEM漂亮很多,而且各种名字都是驼峰命名,省略了一些短横线,这使得SUITCSS的类名在长度上比BEM更紧凑。SMACSS《SMACSS官网:http://smacss.com/SMACSS(ScalableandModularArchitectureforCSS)是一套易于开发、易于维护的CSS编写方法论,将CSS规则分为五类:Base(基本)Layout(布局)Module(模块)State(状态)Theme(主题)你现有项目的样式中应该能找到以上五类,这些类型样式的混合会让你的代码看起来特别复杂,如果有意识地对这些样式进行归类,复杂度会大大降低。每个类别除了对样式进行归类之外,还有一些适用的准则。基本规则基本规则作用于元素选择器,用于定义HTML标签的默认样式。基本样式主要用于设置标题大小、默认链接颜色、默认字体样式和正文背景等。/*基本样式示例*/body,form{margin:0;padding:0;}a{color:#039;}a:hover{color:#03F;}布局规则CSS本质上是在th中布置元素e页面,但页面的每个元素也有主次。比如大块就是主要的组件,我们称之为布局(Layout)。而导航栏(属于头部)、网站描述(属于尾部)是次要组件,我们称之为模块(Module)。下面作为一个具体的案例,我们来看一下掘金的页面布局:在juejin.cn页面上有一个header、一个导航栏、一个内容区和一个侧边栏,这些都是布局的一部分。juejin.cnSMACSS允许在布局样式中,使用ID选择器有助于在HTML中一目了然地区分节点在布局中的位置。其他不是ID选择器的类需要加上l-前缀,表示属于布局样式。模块规则如前所述,模块是比布局组件更松散的次级组件。这种区分确实是模糊的,所以有些方案也取消了布局规则,把所有的Reusable组件都分成模块。官方文档中没有详细的模块规则命名方式。看了很多文章,模块命名基本都是参考BEM,这里就不单独介绍了。状态规则states用于描述模块在不同状态下的外观,使用is-前缀,帮助我们区分HTML中元素的状态。欢迎关注欢迎关注有些状态的优先级更高,可以酌情加上!important,比如控制元素的显示或隐藏。.is-hide{display:none!important;}.is-show{display:block!important;}SMACSS小结这里不专门介绍主题规则,因为此时主题已经基本被CSS变量替代.SMACSS有很多规则这里就不一一列举了,但是关于CSS如何命名的规则其实比较少,而且它的布局规则和模块规则确实有些模糊,不容易区分。本文转载自微信公众号《更神奇的前端》,可通过以下二维码关注。转载本文请联系更牛逼的前端公众号。