工程化 - 规范化 - CSS规范

目录

Base夺命连环问

是什么?解决什么诞生的?

有什么优点?

有什么缺点?怎么解决?

CSS命名规范

BEM( 模块-元素 [ 状态|修饰符 ])

CSS样式顺序

语义化 - 淘汰

JS Class命名 - 淘汰

1. 使用 js- 类名

2. 使用 Rel 属性


夺命连环问(自发式费曼

是什么?解决什么诞生的?

约定。1.个人命名与团队冲突 2.新需求、功能扩展、重构 3.css污染

有什么优点?

整齐划一( 好看 )、便于维护(防止被骂)

有什么缺点?怎么解决?

死板命名太长一开始不适应。

好了上正餐了

CSS命名规范

BEM( 模块-元素 [ 状态|修饰符 ])

.block { /* styles */ } 
.block__element { /* styles */ } 
.block--modifier { /* styles */ }

个人理解:中划线就是分类,下划线是构成 ,双中划线是状态

比如说页面右侧导航栏吧,

它是主页的左侧 left-meun。

由item构成 left-meun_item。

有选中的状态 left-meun_item--select

下面是示例(引用的其他作者的话,具体记找不到了。斯密马赛

这可是个足以得奖的火柴人呢 :)

哎,可惜并不是 :(

这个火柴人代表了一个组件,比如说一个设计区块。

或许你已经猜到了 BEM 这里的 B 意为『区块』(‘Block’)。

在实际中,这里『区块』可以表示一个网站导航、页眉、页脚或者其他一些设计区块。

根据上述解释,那么这个组件的理想类名称即是 stick-man。

组件的样式应写成这样:

.stick-man {
  
 }

725a2851b3ed9b2b19ac804e01d03e63.png

E 代表元素(Elements) BEM 中的 E 代表着元素。 整体的区块设计往往并不是孤立的。 比方说,这个火柴人有一个头部(head),两只漂亮的手臂(arms)和双脚(feet)。

这些 head、 feet 和 arms 都是组件中的元素。它们可视作子组件(child components),也就是父组件的组成部分。 如果使用 BEM 命名规范的话,这些元素的类名都可以通过在两条下划线后加上元素名称来产生。

比如说:

.stick-man__head { } 
.stick-man__arms { } 
.stick-man__feet { }

那么问题来了。一蓝一红怎么命名?

.stick-man--blue {
}
.stick-man--red {
}

 d8c6baeca396344684ab1034bbb5b8a1.png

头一大一小怎么命名

这一次元素被加上了修饰符。记住,元素指一个整体封装区块中的一个子组件。

.stick-man 表示区块(Block), .stick-man__head 表示元素(the element)。

从上例可以看出,双连字符也可以这样使用:

.stick-man__head--small {
}
.stick-man__head--big {
}

下面两种不温不火就不介绍了,有链接可以看看。

功能划分 - OOCSS

功能划分 - Smacss

CSS样式顺序

1.位置属性(position, top, right, z-index, display, float等)

2.大小(width, height, padding, margin)

3.文字系列(font, line-height, letter-spacing, color- text-align等)

4.背景(background, border等)

5.其他(animation, transition等)

额外加菜(代码的事怎么能叫偷呢

还有一些旧时代的糟粕,有点可惜。

语义化 - 淘汰

示例EG

/* 这是某个模块 */
.m-nav{}/* 模块容器 */
.m-nav li,.m-nav a{}/* 先共性  优化组合 */
.m-nav li{}/* 后个性  语义化标签选择器 */
.m-nav a{}/* 后个性中的共性 按结构顺序 */
.m-nav a.a1{}/* 后个性中的个性 */
.m-nav a.a2{}/* 后个性中的个性 */
.m-nav .z-crt a{}/* 交互状态变化 */
.m-nav .z-crt a.a1{}
.m-nav .z-crt a.a2{}
.m-nav .btn{}/* 典型后代选择器 */
.m-nav .btn-1{}/* 典型后代选择器扩展 */
.m-nav .btn-dis{}/* 典型后代选择器扩展(状态) */
.m-nav .btn.z-dis{}/* 作用同上,请二选一(如果可以不兼容IE6时使用) */
.m-nav .m-sch{}/* 控制内部其他模块位置 */
.m-nav .u-sel{}/* 控制内部其他元件位置 */
.m-nav-1{}/* 模块扩展 */
.m-nav-1 li{}
.m-nav-dis{}/* 模块扩展(状态) */
.m-nav.z-dis{}/* 作用同上,请二选一(如果可以不兼容IE6时使用) */

布局(.g-)

语义命名简写
文档docdoc
头部headhd
主体bodybd
尾部footft
主栏mainmn
主栏子容器maincmnc
侧栏sidesd
侧栏子容器sidecsdc
盒容器wrap/boxwrap/box

模块(.m-)、元件(.u-)

语义命名简写
导航navnav
子导航subnavsnav
面包屑crumbcrm
菜单menumenu
选项卡tabtab
标题区head/titlehd/tt
内容区body/contentbd/ct
列表listlst
表格tabletb
表单formfm
热点hothot
排行toptop
登录loginlog
标志logologo
广告advertisead
搜索searchsch
幻灯slidesld
提示tipstips
帮助helphelp
新闻newsnews
下载downloaddld
注册registreg
投票votevote
版权copyrightcprt
结果resultrst
标题titlett
按钮buttonbtn
输入inputipt

功能(.f-)

语义命名简写
浮动清除clearbothcb
向左浮动floatleftfl
向右浮动floatrightfr
内联块级inlineblockib
文本居中textaligncentertac
文本居右textalignrighttar
文本居左textalignlefttal
垂直居中verticalalignmiddlevam
溢出隐藏overflowhiddenoh
完全消失displaynonedn
字体大小fontsizefs
字体粗细fontweightfw

皮肤(.s-)

语义命名简写
字体颜色fontcolorfc
背景backgroundbg
背景颜色backgroundcolorbgc
背景图片backgroundimagebgi
背景定位backgroundpositionbgp
边框颜色bordercolorbdc

状态(.z-)

语义命名简写
选中selectedsel
当前currentcrt
显示showshow
隐藏hidehide
打开openopen
关闭closeclose
出错errorerr
不可用disableddis

参考网易前端文档手册 http://nec.netease.com/standard/css-sort.html

JS Class命名 - 淘汰

参考的腾讯前端文档手册。

jq时期的规范,现在已经不怎么需要了。

1. 使用 js- 类名

一种减少这类 bug 的方法是使用 js-* 的类名命名方法。用这种方法来表明这个 DOM 元素和 JavaScript 代码的关联。

例如:

<html>
  <div class="site-navigation js-site-navigation"> </div> 
</html>

<script>
 const nav = document.querySelector('.js-site-navigation') 
</script>

依照命名规范,任何人看到 **js-**site-navigation 这个类名称,就会知道 JavaScript 代码中有一段和这个 DOM 元素有关联的代码。

2. 使用 Rel 属性

<html>
  <div class="site-navigation" rel="js-site-navigation"></div>
</html>

<script>
  const nav = document.querySelector("[rel='js-site-navigation']")
</script>

一般来说,rel 属性 定义着链接资源和引用它的文件之间的关系。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值