CSS语义化标准化命名规则

一般而言,CSS类名的语义化声明方式应当考虑你的页面中某个相对元素的”用意”,独立于它的”定位”或确切的特性(结构化方式)。像left-bar, red-text, small-title…这些都属于结构化定义的例子。

让我们看看下面这个例子:

…而现在我们想把页面中的元素调换一下位置,如果你使用的是结构化方式(1),那么你就要把所有CSS类名重新进行定义,因为它们的位置变了。在布局(3)中,我们看到元素都倒转了: right-bar 现在成了 “left-bar”,而 left-content 成了 “right-content”。如果你使用语义化方式则避免了此类问题。

换句话说,使用语义化方式的话,你在修改网站布局的时候可以仅仅修改相关CSS类的属性即可,而不用修改它们的类名了,如果网站的代码很庞大,这将节省大量的时间。

HERO会经常更新前端开发/网页设计等相关技术及教程文章,欢迎订阅本博客来及时浏览本博客的最新教程及资源。

关于语义化的一些建议:

在开始之前,我想推荐两种简单的编写较好的CSS代码的指导方针:

1、为CSS类名定义的时候,尽量使用小写字母,如果有两个以上的单词,在每个单词之间使用”-”符或单词首字母大写(第一个单词除外)。如:”main-content”或”mainContent”。

2、优化CSS代码,仅创建关键主要的CSS类并重新为子元素使用符合HTML标准的标签(h1, h2, p, ul, li, blockquote,…),例如,不要使用这种哦你那个方式:

<;div class=”main”>; <;div class=”main-title”>;…<;/div>; <; div class=”main-paragraph”>;…<;/div>; <; /div>;

而要这样写:

<;div class=“main”>; <;h1>;…<;/h1>; <; p>;…<;/p>; <; /div>;

三栏布局中使用语义化方式的例子

让我们来通过这个简单的例子讲解一下如何为经典的三栏布局使用语义化方式命名:

使用语义化方式为CSS命名可以像这样:

#container{…} /*—- Top section —-*/ #header{…} #navbar{…} /*—- Main —-*/ #menu{…} #main{…} #sidebar{…} /*—- Footer —-*/ #footer{…}

3 Container “#container“ 就是将你页面中的所有元素包在一起的部分,这部分你还可以命名为: ”wrapper“, “wrap“, “page“。

4 Header“#header” 是网站页面的头部区域,一般来讲,它包含网站的logo和一些其他元素。这部分你还可以命名为:”top“, “logo“, “page-header” (或 pageHeader)。

5 Navbar“#navbar“等同于横向的导航栏,是最典型的网页元素。这部分你还可以命名为:“nav”, “navigation”, “nav-wrapper”。

6 Menu“#Menu”区域包含一般的链接和菜单,这部分你还可以命名为: ”sub-nav ”, “links“。

7 Main“#Main”是网站的主要区域,如果是博客的话它将包含你的日志。这部分你还可以命名为: ”content“, “main-content” (or “mainContent”)。

8 Sidebar “#Sidebar” 部分可以包含网站的次要内容,比如最近更新内容列表、关于网站的介绍或广告元素等…这部分你还可以命名为: ”sub-nav“, “side-panel“, “secondary-content“。

9 Footer“#Footer”包含网站的一些附加信息,这部分你还可以命名为: ”copyright“。

一、文件命名规范

基本样式:base.css 全局样式:global.css 框架布局:layout.css 字体样式:font.css 链接样式:link.css 打印样式:print.css

;

二、常用类/ID命名规范 页 眉:header 内 容:content 容 器:container 页 脚:footer 版 权:copyright 导 航:menu 主导航:mainMenu 子导航:subMenu 标 志:logo 标 语:banner 标 题:title 侧边栏:sidebar 图 标:icon 注 释:note 搜 索:search 按 钮:btn 登 录:login 链 接:link 信息框:manage …… 常用类的命名应尽量以常见英文单词为准,做到通俗易懂,并在适当的地方加以注释。对于二级类/ID命名,则采用组合书写的模式,后一个单词的首字母应大写:诸如“搜索框”则应命名为“searchInput”、“搜索图标”命名这“searchIcon”、“搜索按钮”命名为“searchBtn

;

XHTML-CSS写作建议 1、所有的xhtml代码小写; 2、属性的值一定要用双引号(“”)括起来,且一定要有值; 3、每个标签都要有开始和结束,且要有正确的层次; 4、空元素要有结束的tag或于开始的tag后加上”/”; 5、表现与结构完全分离,代码中不涉及任何的表现元素,如style、font、bgColor、border等; 6、<;h1>;到<;h5>;的定义,应遵循从大到小的原则,体现文档的结构,并有利于搜索引擎的查询; 7、给每一个表格和表单加上一个唯一的、结构标记id; 8、给重要的区块加上注释; 9、给图片加上alt属性; 10、所有的标签必须进行合理的嵌套; 11、根元素前必须有元素,宣告使用那一种DTD; 12、根元素必须有xmlns属性来指定使用http://www.w3.org/1999/xhtml的namespace。

三、常规书写规范及方法 1、选择DOCTYPE XHTML 1.0 提供了三种DTD声明可供选择: 过渡的(Transitional):要求非常宽松的DTD,它允许你继续使用HTML4.01的标识(但是要符合xhtml的写法)。完整代码如下: <; !DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>; 严格的(Strict):要求严格的DTD,你不能使用任何表现层的标识和属性,例如<;br>;。完整代码如下: <; !DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>; 框架的(Frameset):专门针对框架页面设计使用的DTD,如果你的页面中包含有框架,需要采用这种DTD。完整代码如下: <; !DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”>; 理想情况当然是严格的DTD,但对于我们大多数刚接触web标准的设计师来说,过渡的DTD(XHTML 1.0 Transitional)是目前理想选择(包括本站,使用的也是过渡型DTD)。因为这种DTD还允许我们使用表现层的标识、元素和属性,也比较容易通 过W3C的代码校验。

2、指定语言及字符集 为文档指定语言:<;html xmlns=”http://www.w3.org/1999/xhtml” lang=”en”>;

为了被浏览器正确解释和通过W3C代码校验,所有的XHTML文档都必须声明它们所使用的编码语言,如: 常用的语言定义:<;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />; 标准的XML文档语言定义:<;?xml version=”1.0″ encoding=”utf-8″?>; 针对老版本的浏览器的语言定义:<;meta http-equiv=”Content-Language” content=”utf-8″ />; 为提高字符集,建议采用“utf-8”。

3、样式表调用

1、页面内嵌法:就是将样式表直接写在页面代码的head区。如: <;style type=”text/css”>;<;!– body{background : white; color : black;} –>;<;/style>;

2、外部调用法:将样式表写在一个独立的。css文件中,然后在页面head区用类似以下代码调用。 <;link rel=”stylesheet” rev=”stylesheet” href=”css/style.css” type=”text/css” media=”all” />; 在符合web标准的设计中,推荐使用外部调用法,可以不修改页面只修改。css文件而改变页面的样式。如果所有页面都调用同一个样式表文件,那么改一个样式表文件,可以改变所有文件的样式。

4、选用恰当的元素 根据文档的结构来选择HTML元素,而不是根据HTML元素的样式来选择。例如,使用P元素来包含文字段落,而不是为了换行。如果在创建文档时找不到适当的元素,则可以考虑使用通用的div 或者是span;避免过渡使用div和span。少量、适当的使用div和span元素可以使文档的结构更加清晰合理并且易于使用样式;尽可能少地使用标签和结构嵌套,这样不但可以使文档结构清晰,同时也可以保持文件的小巧,在提高用户下载速度的同时,也易于浏览器对文档的解释及呈视。

5、派生选择器 可以使用派生选择器给一个元素里的子元素定义样式,在简化命名的同时也使结构更加的清晰化,如: .mainMenu ul li {background:url(images/bg.gif;)} 6、辅助图片用背影图处理 这里的”辅助图片”是指那些不是作为页面要表达的内容的一部分,而仅仅用于修饰、间隔、提醒的图片。将其做背影图处理,可以在不改动页面的情况下通过CSS样式来进行改动,如:#logo {background:url(images/logo.jpg) #FEFEFE no-repeat right bottom;}

7、结构与样式分离 在页面里只写入文档的结构,而将样式写于css文件中,通过外部调用CSS样式表来实现结构与样式的分离。

8、文档的结构化书写 页面CSS文档都应采用结构化的书写方式,逻辑清晰易于阅读。如: <;div id=”mainMenu”>; <;ul>; <; li>;<;a href=”#” >;首页<;/a>;<;/li>; <; li>;<;a href=”#” >;介绍<;/a>;<;/li>; <; li>;<;a href=”#” >;服务<;/a>;<;/li>; <; /ul>;

<;/div>; /*=====主导航=====*/

#mainMenu { width:100%; height:30px; background:url(images/mainMenu_bg.jpg) repeat-x; } #mainMenu ul li { float:left; line-height:30px; margin-right:1px; cursor:pointer; } /*=====主导航结束=====*/

9、鼠标手势 在XHTML标准中,hand只被IE识别,当需要将鼠标手势转换为“手形”时,则将“hand”换为“pointer”,即“cursor:pointer;”。

10、注释书写规范 1、行间注释 直接写于属性值后面,如: .search{ border:1px solid #fff;/*定义搜索输入框边框*/ background:url(/images/icon.gif) no-report #333;/*定义搜索框的背景*/ } 2、整段注释 分别在开始及结束地方加入注释,如: /*=====搜索条=====*/

.search { border:1px solid #fff; background:url(/images/icon.gif) no-repeat #333; } /*=====搜索条结束=====*/ 3.协助注释 非作者维护时所加入的表示修改时间、修改人等标识信息。 在区域注释或单行注释的基础上加上修改人和修改时间等信息。 例(区域注释): <; !–==S 注释内容[修改人和修改时间]–>; <;div>; … <; /div>; <; !–==E 注释内容[修改人和修改时间]–>; /*=S 注释内容[修改人和修改时间]*/ .class{ … } .class{ … } /*=E 注释内容[修改人和修改时间]*/ 例(单行注释): <;div>; <; !– 注释内容[修改人和修改时间]–>; … <; /div>; .class{ /*注释内容[修改人和修改时间]*/ … }

11、样式属性代码缩写 1、不同类有相同属性及属性值的缩写: 对于两个不同的类,但是其中有部分相同甚至是全部相同的属性及属性值时,应对其加以合并缩写,特别是当有多个不同的类而有相同的属性及属性值时,合并缩写可以减少代码量并易于控制。如: #mainMenu { background:url(/images/bg.gif); border:1px solid #333; width:100%; height:30px; overflow:hidden; } #subMenu { background:url(/images/bg.gif); border:1px solid #333; width:100%; height:20px; overflow:hidden; } 两个不同类的属性值有重复之处,刚可以缩写为: #mainMenu,#subMenu { background:url(/images/bg.gif); border:1px solid #333; width:100%; overflow:hidden;

} #mainMenu {height:30px;} #subMenu {height:20px;} 2、同一属性的缩写: 同一属性根据它的属性值也可以进行简写,如: .search { background-color:#333; background-image:url(/images/icon.gif); background-repeat: no-repeat; background-position:50% 50%; }

.search { background:#333 url(/images/icon.gif) no-repeat 50% 50%; } 3、内外侧边框的缩写: 在CSS中关于内外侧边框的距离是按照上、右、下、左的顺序来排列的,当这四个属性值不同时也可直接缩写,如: .btn { margin-top:10px; margin-right:8px; margin-bottom:12px; margin-left:5px; padding-top:10px; padding-right:8px; padding-bottom:12px; padding-left:8px; } 则可缩写为:

.btn { Margin:10px 8px 12px 5px; Padding:10px 8px 12px 5px; } 而如果当上边与下边、左边与右边的边框属性值相同时,则属性值可以直接缩写为两个,如:

.btn { margin-top:10px; margin-right:5px; margin-bottom:10px; margin-left:5px; } 缩写为:。btn {margin:10px 5px;} 而当上下左右四个边框的属性值都相同时,则可以直接缩写成一个,如:

.btn { margin-top:10px; margin-right:10px; margin-bottom:10px; margin-left:10px; } 缩写为: .btn{margin:10px;} 4、颜色值的缩写: 当RGB三个颜色值数值相同时,可缩写颜色值代码。如: .menu { color:#ff3333;} 可缩写为: .menu {color:#f33;}

12、hack书写规范 因为不同浏览器对W3C标准的支持不一样,各个浏览器对于页面的解释呈视也不尽相同,比如IE在很多情况下就与FF存在3px的差距,对于这些差异性,就需要利用css 的hack来进行调整,当然在没有必要的情况下,最好不要写hack来进行调整,避免因为hack而导致页面出现问题。 1、IE6、IE7、Firefox之间的兼容写法: 写法一: IE都能识别*;标准浏览器(如FF)不能识别*; IE6能识别*,但不能识别 !important, IE7能识别*,也能识别!important; FF不能识别*,但能识别!important;

根据上述表达,同一类/ID下的CSS  hack可写为:

.searchInput { background-color:#333;/*三者皆可*/ *background-color:#666 !important; /*仅IE7*/ *background-color:#999; /*仅IE6及IE6以下*/ }

一般三者的书写顺序为:FF、IE7、IE6. 写法二: IE6可识别“_”,而IE7及FF皆不能识别,所以当只针对IE6与IE7及FF之间的区别时,可这样书写:

.searchInput { background-color:#333;/*通用*/ _background-color:#666;/*仅IE6可识别*/ } 写法三: *+html 与 *html 是IE特有的标签, Firefox 暂不支持。 .searchInput {background-color:#333;}

*html .searchInput {background-color:#666;}/*仅IE6*/ *+html .searchInput {background-color:#555;}/*仅IE7*/ 屏蔽IE浏览器: select是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。 *:lang(zh) select {font:12px !important;} /*FF的专用*/

select:empty {font:12px !important;} /*safari可见*/ IE6可识别: 这里主要是通过CSS注释分开一个属性与值,注释在冒号前。 select { display /*IE6不识别*/:none;} IE的if条件hack写法: 所有的IE可识别: <; !–[if IE]>; Only IE <;![end if]–>; 只有IE5.0可以识别: <; !–[if IE 5.0]>; Only IE 5.0 <;![end if]–>; IE5.0包换IE5.5都可以识别: <; !–[if gt IE 5.0]>; Only IE 5.0+ <;![end if]–>; 仅IE6可识别: <; !–[if lt IE 6]>; Only IE 6- <;![end if]–>; IE6以及IE6以下的IE5.x都可识别: <; !–[if gte IE 6]>; Only IE 6/+ <;![end if]–>;

仅IE7可识别: <; !–[if lte IE 7]>; Only IE 7/- <;![end if]–>;

13、清除浮动 在Firefox中,当子级都为浮动时,那么父级的高度就无法完全的包住整个子级,那么这时用这个清除浮动的HACK来对父级做一次定义,那么就可以解决这个问题。 select:after { content:”。”; display:block; height:0; clear:both; visibility:hidden; } 注意事项 1. id和class命名采用该版块的英文单词或组合命名,并第一个单词小写,第二个单词首个字母大写,如:newRelease(最新产品/new+Release) 常用类的命名应尽量以常见英文单词为准,做到通俗易懂,并在适当的地方加以注释。对于二级类/ID命名,则采用组合书写的模式,后一个单词的首字母应大写:诸如“搜索框”则应命名为“searchInput”、“搜索图标”命名这“searchIcon”、“搜索按钮”命名为 “searchBtn”…… 2. CSS样式表各区块用注释说明 3. 尽量使用英文命名原则 4.不用加中杠和下划线 5. 尽量不缩写,除非一看就明白的单词 6.检查HTML元素是否有拼写错误、是否忘记结束标记 即使是老手也经常会弄错div的嵌套关系。可以用dreamweaver的验证功能检查一下有无错误。 7. 检查CSS是否正确 检查一下有无拼写错误、是否忘记结尾的 } 等。可以利用CleanCSS来检查 CSS的拼写错误。CleanCSS本是为CSS减肥的工具,但也能检查出拼写错误。 8. 确定错误发生的位置 如果错误影响了整体布局,则可以逐个删除div块,直到删除某个div块后显示恢复正常,即可确定错误发生的位置。 9. 利用border属性确定出错元素的布局特性 使用float属性布局一不小心就会出错。这时为元素添加border属性确定元素边界,错误原因即水落石出。 10. float元素的父元素不能指定clear属性 MacIE下如果对float的元素的父元素使用clear属性,周围的float元素布局就会混乱。这是MacIE的著名的bug,倘若不知道就会走弯路。 11. float元素务必指定width属性 很多浏览器在显示未指定width的float元素时会有bug。所以不管float元素的内容如何,一定要为其指定width属性。 另外指定元素时尽量使用em而不是px做单位。 12. float元素不能指定margin和padding等属性 IE在显示指定了margin和padding的float元素时有bug。因此不要对float元素指定margin和padding属性(可以在float元素内部嵌套一个div来设置margin和padding)。也可以使用hack方法为IE指定特别的值。 13. float元素的宽度之和要小于100% 如果float元素的宽度之和正好是100%,某些古老的浏览器将不能正常显示。因此请保证宽度之和小于99%。

14、是否重设了默认的样式? 某些属性如margin、padding等,不同浏览器会有不同的解释。因此最好在开发前首先将全体的margin、padding设置为0、列表样式设置为none等。

15、float的div一定要闭合 例如:(其中floatA、floatB的属性已经设置为float:left;) 程序代码 <; #div id=”floatA” >;<;/#div>; <; #div id=”floatB” >;<;/#div>; <; #div id=”NOTfloatC” >;<;/#div>; 这里的NOTfloatC并不希望继续平移,而是希望往下排。 这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。在程序代码 <; #div>;<;/#div>; <; #div>;<;/#div>; 之间加上 程序代码 <; #div>;<;/#div>; 这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。 并且将clear这种样式定义为为如下即可: 程序代码 .clear{ clear:both;

} 此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden; 当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。 例如某一个wrapper如下定义: 程序代码 .colwrapper{ overflow:hidden; zoom:1; margin:5px auto;

}

16、margin加倍的问题 设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。 解决方案是在这个div里面加上display:inline; 例如: <; #div id=”imfloat”>;<;/#div>; 相应的css为 程序代码 #IamFloat{ float:left; margin:5px;/*IE下理解为10px*/ display:inline;/*IE下再理解为5px*/

}

17、关于容器的包涵关系 很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。

18、关于高度的问题 如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事) 常见兼容问题: (1)DOCTYPE 影响 CSS 处理 (2)FF:div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行 (3)FF:body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中 (4)FF:设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width (5)FF:支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式 (6)div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行 (7)cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以 (8)FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。 (9)、在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法: div{margin:30px!important;margin:28px;} 注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div{maring:30px;margin:28px} 重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important; (10)IE5 和IE6的BOX解释不一

IE5下 程序代码 div{width:300px;margin:0 10px 0 10px;} div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px} 关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:) (11)ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义 程序代码ul{margin:0;padding:0;} 注意书写格式的问题: 一定要注意缩进,对齐。要有良好的编程习惯。

未经允许不得转载:面包頭 » CSS语义化标准化命名规则

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址