CSS网页制作教程:CSS语义化的类名
- 格式:wps
- 大小:73.00 KB
- 文档页数:5
语义总是个火热的话题。
有些人时时刻刻在追求语义化,有些人教条地执着于它,而有一些人不知道这究竟是什么。
我认为语义像标签、类、ID 、属性(描述而不是定义内容)一样和HTML 密切相关。
我们用典型的例子来描述。
糟糕的语义: 1 2 3 4 5 <;div class="article">;<;div class="article_title">;Smurf Movie Kinda Sucks<;/div>;<;div class="the_content">;Not surprisingly, this weeks release of<;div class="darkbold">;The Smurfs<;/div>; kinda sucks.<;/div>;<;/div>;好的语义:1 2 3 4 5 <;article>;<;h1>;Smurf Movie Kinda Sucks<;/h1>;<;p>;Not surprisingly, this weeks release of<;b>;The Smurfs<;/b>; kinda sucks.<;/p>;<;/article>;不管你是否准备好迎接HTML5,当你需要一个HTML 元素来定义文章,那么article 标签比div 加上类名article 好。
文章的标题成了header 内容变成锻炼,加粗但不强调的标题变成了加粗的标签。
但是,并不是所有的都这么简单。
我们来看看一些类名的对比,关于语义或不语义我提出了我的观点。
1 <;div class="column_1">;<;/div>;非语义化。
这是典型的例子,几乎每个CSS 栅格框架都用这类的类名来声明栅格。
不管是”yui -b”、”grid -4″或者”spanHalf”,这些都更像是定义,而不是描述该内容。
所以,我觉得这些都不是语义化的类名,但是我同时觉得,在基于浮动的栅格系统布局中,我们没办法广泛地避免这点。
1 <;div class="footer">;<;/div>;语义化。
footer 是个抽象的内容,但是在Web 设计中,已经被赋予了一定的意义。
它是置于网站底部的模块,通常包含导航,版权,作者信息等等。
这个类名包含这么一组信息,而并没有描述它的内容。
如果你准备迎接HTML5,那么footer元素是更好的选择。
对于所有的HTML5元素都是如此。
(头部header,而侧栏应该用aside等。
)如果你还没使用HTML5(你最好有个很好的理由),那么最好使用同等的类名。
<;div class="largeText">;<;/div>;1非语义化。
这是在定义,为什么文本会是大的?来突出显示?那么”standOut”或“callout_text”会好一些,因为在下次改版的时候,你可能会选择另外的方式让这个文本更加的突出,而不是文本更大,那这个类名看起来就不会太尴尬。
<;div class="priority-2">;<;/div>;1语义化。
我和MailChimp的Jason Beaird和Aarron Walter谈过这点,他们就是这样声明不同层级的按钮(类名更多的用”p1″..”p5″之类的)。
更高曾记得按钮可能是更亮更大,而低层级的按钮可能是混于内容之中,比较平淡。
不使用内容本身的样式来声明层级,就是语义化。
这和h1、h2、h3的道理一样。
<;div class="copyright">;<;/div>;1语义化。
如果每个类名都这么简单就好了!这个可以用于包含“tweets”、“pagination”或“admin-bar”的模块。
这最后的一个”admin-bar”或者应该叫”admin-nav”,在Theoretical Redesign Future里面提到,这不应该再是bar。
<;p class="introp">;<;/p>;1非语义化。
Dave Rupert有一次开玩笑说,这是他最喜欢的类名。
定义页面第一段的特别的样式,这是很常见的场景,就好像概览,把观众吸引到内容上。
如果你要很好的浏览器支持,你可能会需要一些类名,我觉得”intro”比”introp”会更好一些(不要使用元素的名字)。
更好的方法是,使用样式来针对第一段如articlep:first-of-type或h1 + p。
<;div class="clearfix">;<;/div>;1非语义化。
这是个非常常见的类名,这是个清浮动的技巧,该元素包含它的子级浮动元素,不让它崩溃。
但是,这个类名跟它的内容毫无关系,不可避免地不语义。
Dan Cederholm推荐一个感觉比较好的类名”group”来替代(详见他的书Handcrafted CSS)。
对我来说,考虑类名的语义化,这个元素包含很多的元素,所以成为”group”(描述而不是定义)。
<;div class="left">;<;/div>;1非语义化。
在后续版本中,你可能会把它放到右边,太过特征化。
<;div class="success">;<;/div>;1语义化。
这在混合词汇中用得很好,混合词汇的类名,其中一个词是描述内容,而另外一个是描述内容的状态,如”success message”,可以代表如”您的文件已上传”之类的信息。
如果信息是”上传文件出错”,那么类名可以变成是”fail message”,然后有对应的样式。
<;div class="plain-jane">;<;/div>;1非语义化。
这个类在定义某部分的内容应该有着不同的样式。
“plain-jane”想用来描述”normal”或”regular”。
理想的情况是,CSS应该写得更好,你不需要定义一个”regular”的样式,而是通过继承来实现,而对于那些更加突出的内容则用特别的样式。
<;div class="entry-unrelated">;<;/div>;1非语义化。
Readability,是个Web 应用程序,可以调整格式并网页保存,便于阅读。
它使用这个类名来定义那些不需要包含在保存的网页中的元素。
我这里说它不语义的原因是,这个类名在描述”不是什么”而非”是什么”。
我希望有个其它的类名来表达这个目的。
就如link当中的rel=nofollow,而不是内容。
<;div class="hyphenate">;<;/div>;1非语义化。
定义内容的行为,而不是描述它是什么。
<;a class="link" href="#">;<;/a>;1非语义化。
链接不需要定义为链接,它本身就是一个链接,所以,这是不必要的。
如果这个类名要定义的内容是要区别于其它的链接,那么用描述型的方式会好一些,如”book-link”或者(尚有争议的)”button”。
然而,在某些实际情况下。
让我们看看你有两种文章样式,你要分别定义它们。
Movie Reviews 有蓝色背景,而Breaking News 有红色背景以及更大的字号。
一种方式是这样: 1 2 3 4 5 6 7<;article class="movie-review">;...<;/article>;<;article class="breaking-news">;...<;/article>;另一种方式是这样: 1 2 3 4 5 6 7<;article class="blueBg">;...<;/article>;<;article class="redBg bigText">;...<;/article>;如果我们有个投票,让大家选哪个更加语义化,我打赌,一定是第一个赢了。
它实践了这个理念:描述而非定义。
第二个的类名定义了蓝色背景等样式。
让我们假设Theoretical Redesign Future™不是理论上的而是实际的。
设计Movie Reviews 的样式变成了绿色背景。
那么类名blueBg 显得不适宜了。
然而movie-review 是完全没有问题,你只需要对它的样式进行属性或属性值的修改就行。
但是这也并不代表第一个总是对的,要看实际情况。
假设这个蓝色应用在网站的很多地方,可能是页脚或者侧栏的样式,那么你会这样写选择器:1 2 3 4 5 .movie-review,footer >; div:nth-of-type(2),aside >; div:nth-of-type(4) {background:#c2fbff;}这样很方便,因为你只要定义颜色一次。
但是也可能比较复杂,就是每个选择器又有它单独的一些样式,所以它们要分开,或许你会用另外的方法如下把选择器分开写: 12345 6 7 8 9 10 11 121314.movie-review {background:#c2fbff;/* Plus other stuff */}footer >; div:nth-of-type(2) {background:#c2fbff;/* Plus other stuff */}aside >; div:nth-of-type(4) {background:#c2fbff;/* Plus other stuff */} 这样CSS 文件会比较有组织(不同的内容部分对应不同的样式区块),但是前提是重复声明的代价。
在CSS Summit 上,Nicole Sullivan 的一个演讲中,她提出大公司声明同样的颜色有上千次,但是没人用blueBg 之类的类名。