又不理解怎么命名class了

怎么样鬼,又不晓得怎么命名class了

2015/10/25 · CSS · class

原稿出处: 结一(@结一w3cplus)   

信赖写css的人都会境遇上面包车型大巴主题材料:

  •  倒霉,怎么命名这几个class,好像不太合适,假如冲突了如何是好,要不要设计成通用一点…
  •  而改别人css代码的时候则会直接有个问号:那些class到底是只在这里个地方用了,依然其余地点都用了?

于是就有了上边包车型大巴做法:

  •  最终终于被逼出了个class,简洁也好,中国和英国混合搭配也罢,望着贰只雾水也没涉及,反正最终页面显示出来的。
  •  那些class应该是独有那个地点使用,小编得以放心写。上线之后。要是没难题,则偷偷自己欣赏,看呢难点就好像此简单,分分钟解决啊;假如冲突了,则极端感慨,哎,改的时候我就隐约不安啊,妈蛋,深坑,那是何人写的,什么人写的!!!
  •  倒霉,这一个class说不定别的地方也使用了,作者得加个限制范围,加个父成分?要不重复再命名个class吧,相比保证。最后只要没难题则代表幸好比较灵敏,怎么说哥也是混过的,依旧有几斤几两的;倘使有题目则象征防不慎防啊,这也太太太坑了吧。

有鉴于此,class的命名真不是一件轻易的事,极度还要兼任可辨别性与可读性。

纲要

  • 布署布局,划分全部布局
  • 剧情区域,从完整到有的,局地中的通用部分,依照上下文应用样式
    • 国有底部(public-header)、后面部分(public-footer)
    • 公物容器(public-container/inner-center)
  • css文件,html结构,多考虑
    • 不要让内联成分与块级成分处于同样品级下,如a标签与div标签
    • reset.css、common.css、index.css
    • 内需转换的要素,父成分统统进行清理,给予统一的类clearfix
    • 宽高度:使用偶数单位。
  • 美丽的代码标准和命名
    • 不超过三级命名
  • 玄妙属性和要素同盟,还应该有未有越来越好的方案

    • 机动overflow,针对一些图形、文字超过遮蔽的情景。
    • text-overflow,超过的文字部分,省略号展现。
    • a标签能够嵌套任何p,h,div等标签(依照新的规范)日常见于同一组题目、图片文字组合等链接同二个地点的,那么大学一年级块地点都亟需链接样式去跳转,那样做相比低价。

      <a href="#" class="title">
          <h4>Voluptate cillum fugiat.</h4>
          <p class="comment">Cheese, tomato, mushrooms, onions.</p>
      </a>
      
  • 合作和细节的管理(放大百分之百以上,技术观察端倪)

    • 反思HTML结构是还是不是站得住
      • 调养错误的时候,让错误的视觉效果十分大化,更易于见到难点。
    • css Hack处理

class命名到底有多难

第一,class跟id不同,class本来便是统一盘算用来可以再一次利用的,而id才是安排性独一的(假若遵从BEM,class差不离也都以当世无双的了)。

第二,样式是足以覆盖的,何况先根据权重,再依照定义的前后相继顺序。大概你花了十分钟设计概念的三个class样式,人家分分钟就给您干掉了,那得多恼火;可能那么些页面好好的,跑到另叁个页面就跟原先的体制有了冲突。

据此class命名的难就难在既要重复利用,又要制止样式的冲突。假使要重新使用,那么自然是越轻巧越好,越抽象可用的地方越大,太现实了就完蛋了。而一旦要制止样式冲突。BEM的主意最简易,class都唯一了,那还冲突个毛线;其次正是通过父成分限定作用域,能够搞几个层级,并非独自一个class定义样式;还会有正是追加class,来贯彻差别化;最终不一样的页面不一致的公文,你用你的自身用自己的。

CSS

// BEM .imgslide__item__img{} // 父成分限定 .imgslide .item .img{} // 追加class .img{} .img--special{} // 分化页面分化文件 // a.html & a.css .img{} // b.html & b.css .img{}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// BEM
.imgslide__item__img{}
 
// 父元素限定
.imgslide .item .img{}
 
// 追加class
.img{}
.img--special{}
 
// 不同页面不同文件
// a.html & a.css
.img{}
// b.html & b.css
.img{}

由此可见,不管有多难,大家依然得尝试去消除难点,去搜索一些法则。

总体结构

图片 1

  • page-content
    • header
    • section-feature(可增/删)
    • section-main
    • section-postscript(可增/删)
    • footer
  • 集体部分
    • inner-center

class命名的迈入历程

有关class的命名,其实跟人名也可能,假如要想别人看得懂,这根本照旧在于可识别性。到当下停止class的命名大概经历了上边多少个根本等第:

  •  混沌阶段,未有法规正是最佳的条条框框
  •  原子类阶段,集中神龙出现手
  •  模块阶段,以作用分开,增加前缀
  •  BEM阶段,法规不改变

or

  • page-content
    • header
    • section-feature(可增/删)
    • section-name-1
    • section-name-2
    • ...
    • footer
  • 公共部分
    • inner-center/public-container

混沌阶段

那么些没什么好说的,刚发轫学html的都以如此,名字先简单的来,非常不足再增添1,2,3什么后缀,大概中国和英国混合搭配等等,如下:

CSS

h1.title h2.title2 h2.title2-1 h2.title2-2 div.hd div.hd-s div.hd2 div.hd-xiangxi

1
2
3
4
5
6
7
8
h1.title
h2.title2
h2.title2-1
h2.title2-2
div.hd
div.hd-s
div.hd2
div.hd-xiangxi

叁个字,太乱。完全无议程,规律可循,想怎么写就怎么写,写到何地是哪儿。看class去猜意思很也许就是不当的,如.red{color:red;font-size:14px;},明明说好的乙丑革命,却顺手定义了个字体大小。

section-main

原子类阶段

以此关键在于拼凑组合,丰裕多的原子类拼成四个整机的样式:

CSS

.fl{float:left;} .fr{float:right;} .pr{position:relative;} .pa{position:absolute;} .tal{text-align:left;} .tac{text-align:center;} .tar{text-align:right;} .fs12{font-size:12px;}

1
2
3
4
5
6
7
8
.fl{float:left;}
.fr{float:right;}
.pr{position:relative;}
.pa{position:absolute;}
.tal{text-align:left;}
.tac{text-align:center;}
.tar{text-align:right;}
.fs12{font-size:12px;}

CSS

div.fs12.fl.pr.tac div.pa.tal

1
2
div.fs12.fl.pr.tac
div.pa.tal

这种有两个破绽,第一是多少复杂点的体制都要采纳过多class组合,第二是借使要修改样式的时候得修改html文件,并非css样式,而纯静态的页面是少之又少的,所以倘使是上下端分离的,由php或后端语言渲染页面的话,改个样式还要文告后端同事去修改文件,那估量人家得疯掉。

无边栏设计

section.section-main>.inner-center  

模块阶段

到了这年,css经过这么多年的向上,页面包车型客车复杂性已经翻了少几倍了,那多个无规划的无知根本相当不足用,满眼的class看起来长得都大概,后边全部是1,2,3都不知情标到多少了,却不知底到底是啥不一样;而原子类已经不切合频仍的更动调解立异,每更新下都以上下一心一德。于是按效率分开的class命名法则就涌出了

CSS

// l表示layout, g表示global, m表示mod, .l-960 .l-left .l-right .g-red .g-title .g-price .m-login .m-breadcrumb .m-slide

1
2
3
4
5
6
7
8
9
10
// l表示layout,  g表示global,  m表示mod,
.l-960
.l-left
.l-right
.g-red
.g-title
.g-price
.m-login
.m-breadcrumb
.m-slide

这种命名方式在必然水平化解了混乱不堪的标题,全部的依据职能划分看起来极漂亮好,可是动不动加个前缀确实某些文雅,再者随着mod的增添,这一个以m伊始的前缀根本就相当不足用,于是又乱了,有加二级前缀的,也许有另起前缀的。

左侧栏设计

section.section-main>.inner-center
    aside.aside-left
    main.main>.content

BEM

那一个揣度地球上做前端的都精晓吧,实在是太火了,所以不用来解释了。优点便是您只管写你和谐的,99.99%的概率不会去干掉外人的样式,class实在太长了,能长久以来那得多高的可能率啊。劣势依然class太长,太长,太长,主要的业务说叁次。日常都记不住本人定义的class,写css的时候只得对着去拷贝。然后最惨烈的正是去修改更新,明明很简短的事物,然后你还要搞个细长的class,那叫贰个一点也不快,想想都懒得动手。

双方栏设计

section.section-main>.inner-center
    aside.aside-left
    main.main>.content
    aside.aside-right

他山之石

骨子里种种命名的前进经验都有其特定的历史意义,也理所必然有其价值。所以吸收之长,弃之贫乏就很好了。比喻写简单demo的时候,我们就足以用到混沌阶段的命名,丰裕轻巧,无需郁结思索;而原子类特别是部分简约的样式,如一行代码就能够消除,起个class名甚是郁结,还比不上间接上原子类;至于模块类,讲真的应用的风貌就更加多了,如布局,js操作类等;而BEM大家一致可借鉴其思想,如.class.class--name使用--代表特殊化,以界别-

此间大家站在前人的肩膀上,试着去开垦一条道路,可以兼任简洁可读性及可精通辨别性。当然class的简洁显著离不开关键词的运用,这里大家先来过三遍常见的class关键词。

特定需要

常见class关键词:

  •  布局类:header, footer, container, main, content, aside, page, section
  •  包裹类:wrap, inner
  •  区块类:region, block, box
  •  结构类:hd, bd, ft, top, bottom, left, right, middle, col, row, grid, span
  •  列表类:list, item, field
  •  主次类:primary, secondary, sub, minor
  •  大小类:s, m, l, xl, large, small
  •  状态类:active, current, checked, hover, fail, success, warn, error, on, off
  •  导航类:nav, prev, next, breadcrumb, forward, back, indicator, paging, first, last
  •  交互类:tips, alert, modal, pop, panel, tabs, accordion, slide, scroll, overlay,
  •  星级类:rate, star
  •  分割类:group, seperate, divider
  •  等分类:full, half, third, quarter
  •  表格类:table, tr, td, cell, row
  •  图片类:img, thumbnail, original, album, gallery
  •  语言类:cn, en
  •  论坛类:forum, bbs, topic, post
  •  方向类:up, down, left, right
  •  别的语义类:btn, close, ok, cancel, switch; link, title, info, intro, more, icon; form, label, search, contact, phone, date, email, user; view, loading…

有了非常重要词之后,我们先来制定一些简短的条条框框

原则性宽度设计

.inner-center{
    width: 980px;
    margin-left: auto;
    margin-right: auto;
}

装有宽度都是像素为单位,这种布局最省事,适用于部分自身内容相当少的页面。
甭管浏览器窗口多大,它们的尺码总是不变,不大概充足利用可用空间。此时得以应用

min-width: 980px 

配合min-width的运用,页面部分内容如三栏布局能够运用百分比来安装宽度(流式布局),完成当浏览器窗口宽度小于设计稿宽度时,允许出现横向滚动条,页面内容宽度保持不改变,不过当浏览器窗口宽度大于设计稿宽度时,页面内容的升幅保持和浏览器窗口宽度一致

制定轻巧准则:

  •  以中写道连接,如.item-img
  •  使用两个中划线表示特殊化,如.item-img.item-img--small表示在.item-img的根底上特殊化
  •  状态类直接动用单词,参谋上面包车型客车首要词,如.active, .checked
  •  图标以icon-为前缀(字体Logo采取.icon-font.i-name办法命名)。
  •  模块选拔关键词命名,如.slide, .modal, .tips, .tabs,特殊化选择地方两在那之中划线表示,如.imgslide--full, .modal--pay, .tips--up, .tabs--simple
  •  js操作的类统BlackBerry上js-前缀
  •  不要赶过多少个class组合使用,如.a.b.c.d

驷不及舌词及法规都有了,未来得以进来本文的为主的为主,实战操作。

响应式设计

实战操作

以布局动手,大致结构如下:

CSS

header.header>.inner-center section.section-feature>.inner-center // if section.section-main>.inner-center section.section-postscript>.inner-center // if footer.footer>.inner-center

1
2
3
4
5
header.header>.inner-center
section.section-feature>.inner-center // if
section.section-main>.inner-center
section.section-postscript>.inner-center // if
footer.footer>.inner-center

现实可参照他事他说加以考察HTML整站结构划设想计,这里大家得以观望都是些轻松的着重词,比较好明白,一看就精晓是哪些。

到现在难题来了,假使别的地方也要用到这几个关键词怎么办?

修饰关键词

以header为例,我们能够增加前缀表示不一致的header,如区块底部.block-hd(hd为header简写),modal头部.modal-hd,文章底部.article-hd

一模二样标题也足以分为,页面标题.page-tt(title的简写),区块标题.block-tt等。

长久以来,那给大家指出了第三个难点,如若要特殊化有些class该如何是好?

特殊化class

以地方的tt为例,大致有三种办法:

率先种办法:直接修改class,将.page-tt修改成.page-user-tt(能够行使scss的%先定义共用的代码)。

其次种艺术: 追加class特殊化,依照大家地点定义的条条框框,在.page-tt上扩充三个class成为.page-tt.page-tt--user,注意.page-tt--user不是八个单身的class,它使基于.page-tt本条基础上的。

其二种方法: 使用父类,给一个范围,于是产生.page-user .page-tt

平日大家选拔的是第三种和第二种方法,因为那二种都有协同的.page-tt,能够相比有利调控一些基础共有的体制。

由第八个经过父类调整的措施,大家进去第多个要斟酌的主题材料,层级结构

层级

最切合层级的例证莫过于ul>li布局了,如上面包车型客车结构:

XHTML

<ul> <li> <a href="#"><img src="" alt=""></a> <h3><a href="#"></a></h3> <p></p> </li> </ul>

1
2
3
4
5
6
7
<ul>
    <li>
        <a href="#"><img src="" alt=""></a>
        <h3><a href="#"></a></h3>
        <p></p>
    </li>
</ul>

貌似的话大家也许有三种艺术定义层级,第一种为承接式,第三种为入眼词式。

CSS

// 继承式 ul.card-list li.list-item a.item-img-link>img.item-img h3.item-tt>a.item-tt-link p.item-text // 关键词式 ul.card-list li.item a.田野-img-link>img.田野同志-img h3.田野先生-tt>a.田野-tt-link p.田野同志-text

1
2
3
4
5
6
7
8
9
10
11
12
13
// 继承式
ul.card-list
    li.list-item
        a.item-img-link>img.item-img
        h3.item-tt>a.item-tt-link
        p.item-text
 
// 关键词式
ul.card-list
    li.item
        a.field-img-link>img.field-img
        h3.field-tt>a.field-tt-link
        p.field-text

由上得以看见承袭式日常子元素接着父成分的终极一个单词如li接着ul的list,而li的子元素接着li的item;至于关键词式则一心由重点词来代表层级,list>item>filed凑巧构成三层等第。

末尾由我们的层级走入大家最终四个标题,怎么样决定样式的限定

体制范围

这里以Tencent课堂的课程详细页左侧栏为例,如下图:

图片 2

八个区块的底子框架为:

CSS

.aside-block.block--xxx> h3.block-tt .block-bd

1
2
3
.aside-block.block--xxx>
    h3.block-tt
    .block-bd

其中.aside-block.block--xxx用到了大家的独辟蹊径化class,而.block-tt,block-bd则动用了小编们的梳洗关键词,至于.aside-block与它的子元素之间则动用了作者们地点说的承继式层级。现在依靠这几个层级结构我们定义基础样式如下:

CSS

.aside-block{ .block-tt{} .block-bd{} }

1
2
3
4
.aside-block{
    .block-tt{}
    .block-bd{}
}

只要这里的联络单位区块的标题不等同,大家则能够:

CSS

.block--contact{ .block-tt{} }

1
2
3
.block--contact{
    .block-tt{}
}

自然就算本人有5个区块,2个标题一样,别的多个标题又一样,恐怕大家就有亟待给.block-tt追加一个诡异化class,或许给aside-block特殊化三个class,如:

CSS

.aside-block{ .block-tt{ &.block-tt--special{} } .block-bd{} } // 或 .aside-block{ &..aside-block--special{ .block-tt{} } }

1
2
3
4
5
6
7
8
9
10
11
12
.aside-block{
    .block-tt{
        &.block-tt--special{}
    }
    .block-bd{}
}
// 或
.aside-block{
    &..aside-block--special{
      .block-tt{}
  }
}

基本功框架研讨实现之后,就轮到大家的剧情了,以关系机构为例:

使用ul>li结构,所以样式是别的二个单身的界定,不嵌套在后面包车型客车.aside-block其间,html及css代码如下:

CSS

ul.contact-list li i.item-icon.icon-font.i-xxx a.item-tt p.gray

1
2
3
4
5
ul.contact-list
    li
        i.item-icon.icon-font.i-xxx
        a.item-tt
        p.gray

此间大家li未有安装class,而p使用了四个大局的class.gray

CSS

.gray{} .contact-list{ li{} .item-icon{} .item-tt }

1
2
3
4
5
6
.gray{}
.contact-list{
    li{}
    .item-icon{}
    .item-tt
}

同理假设我们有其余地点使用这一个能够拷贝过去,而如若急需一些调动,大家得以应用父成分来调整,如这里大家得以接纳.block--contact来特别调动contact的体裁,如:

CSS

.block--contact{ .contact-list{ li{} } }

1
2
3
4
5
.block--contact{
    .contact-list{
        li{}
    }
}

时至明天,我们的class命名方法研商结束,谈起底便是先记住一些不可或缺的基础关键词,然后合理施用上刚刚建议的修饰关键词,特殊化class,层级及最后的样式范围就能够了。

1 赞 2 收藏 评论

图片 3

比例规划

代码规范

  • HTML(fex-team)
  • CSS(fex-team)

命名约定与利用

常见class关键词

  • 布局类:header, footer, container, main, content, aside, page, section
  • 包裹类:wrap, inner
  • 区块类:region, block, box
  • 结构类:hd, bd, ft, top, bottom, left, right, middle, col, row, grid, span
  • 列表类:list, item, field
  • 主次类:primary, secondary, sub, minor
  • 大小类:s, m, l, xl, large, small
  • 状态类:active, current, checked, hover, fail, success, warn, error, on, off
  • 导航类:nav, prev, next, breadcrumb, forward, back, indicator, paging, first, last
  • 交互类:tips, alert, modal, pop(弹出层), panel, tabs, accordion, slide,error --scroll, overlay,
  • 星级类:rate, star
  • 分割类:group, seperate, divider
  • 等分类:full, half, third, quarter
  • 表格类:table, tr, td, cell, row
  • 图片类:img, thumbnail, original, album, gallery
  • 语言类:cn, en
  • 论坛类:forum, bbs, topic, post
  • 方向类:up, down, left, right
  • 别的语义类:btn, close, ok, cancel, switch; link, title, info, intro, more, icon; form, label, search, contact, phone, date, email, user, login, register, join, del, add, confirm;message, tab, current, note,guide, service, hot, news, download, vote, partner, copyright, demo, summary, pages, themes, set, blog, photo, guestbook, global; view, status, loading...
  • 对此命名的有血有肉选取,可以查看W3school

  • 图片命名与Logo命名,index-header-logo,index-footer-logo.

    • iconfont平台

预定法则

  • 要害词间以中写道-连日来 以中写道连接,如.item-img
  • 采纳两个中划线表示特殊化,如.item-img.item-img--small表示在.item-img的根基上特殊化
  • 情景类直接使用单词,仿效下面的主要词,如.active, .checked
  • Logo以icon-为前缀(字体Logo选用.icon-font.i-name方式命名),详细情形应用见CSS Icons,能够下载仿效Bootstrap的Logo语义命名。
  • 模块选用关键词命名,如.slide, .modal, .tips, .tabs,特殊化采纳地点两个中划线表示,如.imgslide--full, .modal--pay, .tips--up, .tabs--simple
  • js操作的类统中兴上js-前缀
  • 不用赶上多少个class组合使用,如.a.b.c.d
  • 八个类名,不要超过多个单词的接连。
  • 大旨布局命名前拉长该页的命名,如index-banner,index-main。

试行应用

  • 因此抬高前缀修饰关键词

    public-header,article-header,index-banner,index-panel
    
  • 通过层级关系特别化类,经常子成分接着父成分的终极七个单词(承继式)

    ul.card-list 
        li.list-item 
            a.item-img-link>img.item-img 
            h3.item-tt>a.item-tt-link 
            p.item-text
    <ul>
         <li> 
            <a href="#"><img src="" alt="图片 4"></a> 
            <h3><a href="#"></a></h3> 
            <p></p> 
        </li> 
    </ul>
    

参照他事他说加以考察资料

  • 哪些鬼,又不知道怎么命名class了
  • HTML整站结构划虚构计
  • 慕课网《从psd到html》
  • Web重构之道

本文由星彩网app下载发布于前端技术,转载请注明出处:又不理解怎么命名class了

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。