`

DIV布局如何正确的使用 id 和 class

    博客分类:
  • CSS
 
阅读更多

引自博客:

http://hi.baidu.com/155369725/item/9bf6c8c366ff692d46d5c0dc

 

今天有点闲,想向大家请教一下id和class的使用。

按照字面的意思,id是指一个元素在整个文档中的“唯一标志”,而class则是它所属的“类别”。按照语法,同名的id在一个文档里只应该出现一次,而class名可重复使用。

但是在具体使用的时候,哪些样式该用id,哪些样式改用class呢?有个答案很简单:

那些只会在页面中出现一次的元素应该用id来表示。比如页头(header) 页尾(footer),导航菜单(main-menu)等。但是真的这么简单么?

我先举几个例子来说明我所遇到的尴尬:

大多数的页面都是两栏布局的:一个主栏(main column),一个侧栏(side column)。就像这样:

OK,我们会用两个div来表示它们。问题来了,应该使用id还是class?按照常规的理解,一个页面只会有一个主栏,一个侧栏咯,所以当然应该用id。文档写成这:

<div id="main-col"></div>

<div id="side-col"></div>

#main-col { float: left; width: 700px;}

#side-col { float: right; width: 200px; }

也是很赏心悦目的,不是么?所以我决定用id。

于 是页面做好了,网站做好了,上线了,运营了,访问量大了。这时候公司决定,嗯,我们应该在一些页面中加几个通栏广告。“通栏”哦!这就意味着它必须横跨主 栏和侧栏,把它们俩拦腰截断。于是我们重新“发明”一个样式:banner,让banner来一个clear:both; 然后放到页面中间去阻止掉两个栏的浮动。然后再在banner的后面继续分两栏。下面是示意图:

所以HTML应该是这样:

<div id="main-col"></div>

<div id="side-col"></div>

<div class="banner></div>

<div id="main-col"></div>

<div id="side-col"></div>

问题轻松解决(多亏偶经验丰富啊,表扬一下自己,咔咔。)。唯独只有一个问题:main-col和side-col这两个id重复了。这个问题其实也不麻烦,把它们全部改成class不就好啦(甚至,不去改它,我就不信浏览器会给我报错,哼)。

但 是,我这不是自己给了自己一个嘴巴么?当初还信誓旦旦的说,main-col只会出现一次,所以用id……。所以教训就是,main-col和side- col,或是left-col, right-col ,extra-col, xxx-col,这些用来分栏布局的样式,都给我用class。嗯,记在本本上。 设计页面的时候,在页头和主菜单之间放了一个搜索框(search-box)。既然我们的页头(header),导航栏(main-menu),登录框 (login-box)都用的是id,和它们在一起的search-box也应该用id咯?呃,小心啊,老板很可能会让你在页尾也放一个搜索框的,你用 id你就死定了。所以search-box应该用class。不过这样怪怪的,凭什么login-box用id,而search-box却用class 呢? 慢着,你以为导航栏就可以保证唯一了么?我来讲一个例子:

喏,老板要来一点不同的,让把导航栏放在左侧。这个没问题,用一个ul就搞定拉。我把它的id设置成main-menu但是过了一会儿,他说,嗯,为了可用性(咳咳。。),我们需要把菜单分成两部分。就像:

呃。。好说,分成两个ul就好了。但是,它们的id都叫main-menu么??哎,老问题又来了。

例子举了这么多,你可看得出,仅仅因为“只出现一次的元素”这个理由,就决定给它用id而不是class,这是绝对行不通的。因为你几乎很难判断某个元素是不是一定只出现一次。但是,这样的分析会得出一个可怕的结论:所有的样式都应该用class。

对 此,我其实并不怀疑。事实上,以我的看法,95%以上的样式,都应该通过class而不是id来设置。或者说,除非是一些很细微很特殊的位置,可以使用 id来设置样式,其他的样式都应该用class来设置。这个结论似乎和WaSP的圣经书《网页重构》里讲的矛盾,因为他老人家是专门批评了所谓的 classitis(class麻疹,见该书148页)。但是很抱歉,铁证如山的事实底下,我不得不否定他那句“热爱id”(见该书150页)。

当然,我很希望我是错的,毕竟背叛经典是一件很让人不舒服的事情。所以欢迎大家来讨论,指出我的错误。更重要的是,对于我举出的哪些尴尬的例子给出一个更好的解决方案。

总结:尽量用class而不是id来控制样式的理由:

可 维护性。你不能保证你用id的元素只在页面中出现一次,即使在网页设计初稿中确实是只有一次。 id可能被Ajax程序员使用。如果页面要用ajax的话,某些元素的id值应该由Ajax程序员而不是页面设计师来决定,至少应该是双方共同商定。那 么,你怎么能放心你的id值既用来设置CSS样式,又用来供JS调用呢? 同一个元素可以定义多个class,却只能有一个id。你明白我的意思了吧? id的优先级高于class。所以如果对于某个特定的元素,我们想赋予特定的样式,可以给它加id。但是反过来,如果我们一开始就是用id,你去加 class是没有效果的啦。

最后,关于Zeldman老先生讲的classitis。我的理解是不要为了某个特定的样式置 顶一个特定的class。尽量创造一些能够重复使用的class。而id由于不能重复,反而才容易造成iditis呢。到时候我们的网站会出现 search-box-top, search-box-bottom,甚至search-box-under-the-header-but-above-the-main-menu, 哈哈。更可怕的是,它们的属性定义其实都一模一样。

 

分享到:
评论

相关推荐

    DIV布局十大技巧以及DIV盒子模型

    1. **独立性与可复用性**:`DIV`元素可以独立定义样式,通过类(class)或ID(id)选择器,使得样式可复用,降低代码冗余,提高效率。 2. **层叠顺序**:利用`z-index`属性,可以控制`DIV`元素的前后堆叠顺序,实现...

    DIV 实现表格布局

    在网页设计中,传统的表格布局通常使用`&lt;table&gt;`、`&lt;tr&gt;`、`&lt;td&gt;`等HTML标签来实现,但随着CSS技术的发展,我们可以通过使用`div`元素结合CSS样式来实现类似表格的布局,这被称为“CSS布局”或“DIV布局”。...

    html div布局

    通过设置`div`的`class`或`id`属性,我们可以为不同的`div`赋予不同的样式,实现布局的划分。 标题中提到的一行三列布局是网页设计中常见的布局模式。这种布局通常会利用`div`元素配合CSS的`display`属性来实现。...

    div和css布局代码

    根据提供的标题、描述以及部分代码内容,我们可以总结出与“div和css布局代码”相关的几个重要知识点: ### 1. CSS基本属性理解 在提供的代码片段中,我们首先可以看到一些常用的CSS属性及其用法。 #### `margin`...

    DIV+CSS布局大全

    常见的选择器有标签选择器(如div)、类选择器(如.class)、ID选择器(如#id)以及更复杂的选择器组合,如后代选择器、子选择器等。 四、CSS盒模型 理解CSS盒模型是布局的关键。每个HTML元素都可视为一个矩形盒子...

    div+css网页布局学习

    div+css网页布局学习是指使用div标签和css样式来设计和布局网页的技术。下面是学习div+css网页布局的相关知识点: 一、XHTML基础知识 * XHTML是HTML的后继版本,提供了一些新的功能和改进 * XHTML的主要特点是严格...

    Div+CSS简单布局

    通过设置Div的`class`或`id`属性,我们可以为每个Div赋予独特的标识,以便在CSS中进行选择和样式化。 **Div嵌套**: Div可以嵌套在其他Div内,形成层次化的结构。这种嵌套使得网页结构更清晰,有助于构建复杂的页面...

    CSS详解-DIV布局!!

    在"CSS详解—DIV网页样式与布局"的压缩包中,你将找到更多关于CSS和DIV布局的详细示例和教程,帮助你进一步掌握这些核心概念和技术。通过实践和学习,你将能够熟练地运用CSS和DIV构建出美观、功能完善的网页。

    别具光芒DivCss网页布局与美化

    通过上述示例可以看到,通过合理地使用`&lt;div&gt;`元素和CSS,我们可以轻松地构建出具有良好结构和视觉效果的网页布局。这种布局方法不仅能够满足基本的设计需求,还能确保网页在不同设备上的良好表现。

    div css 网站布局实录

    通过设置Div的`class`或`id`属性,我们可以为不同的Div赋予独特的样式。 2. 块级元素特性:Div是典型的块级元素,它默认占据一行,并可以调整宽度、高度、内边距和外边距,这使得它在构建布局时具有很高的灵活性。 ...

    一个div css 网页 布局 模版

    通过结合使用Div和CSS,我们可以实现灵活多变的网页布局。 在本案例中,"三行一列"的布局模版是一种常见的网页设计结构,适用于展示信息或者构建复杂的页面。这种布局将页面分为三个垂直区域,每个区域又细分为一列...

    CSS+DIV布局赏析案例.zip_CSS+DIV布局赏析案例

    下面我们将深入探讨CSS和DIV布局的相关知识点。 首先,CSS是一种样式表语言,用于描述HTML或XML(包括如SVG、MathML等各种XML方言)文档的外观和格式。它允许将样式信息与内容分离,使得设计人员可以独立于内容对...

    div+css漂亮的布局模板

    在网页设计领域,Div+CSS布局是现代网页开发的基础,它极大地提升了网页的可维护性和适应性。"div+css漂亮的布局模板"这个主题聚焦于如何利用这两种技术创建美观、功能丰富的网页界面。Div(Division)是HTML中的一...

    css+div布局教程

    在CSS+Div布局中,关键词表(Keyword Table)是一个重要的工具,它列举了常用的ID和Class名称,以便快速引用和保持代码的一致性。例如,#B-*用于body,#Head、#Main、#Foot代表布局ID,#Message表示系统消息,#Logo...

    DIV+CSS布局PPT

    【DIV+CSS布局】是一种网页设计的技术方法,它将网页的内容结构(HTML)与样式表现(CSS)分离,使得网页的维护和更新更加方便,同时提高了网页的性能和可访问性。这一概念在21世纪初随着Web标准的推广而流行起来。 ...

    《CSS+DIV网页样式与布局》ppt文件

    常见的选择器有元素选择器(如`p`)、类选择器(如`.class`)、ID选择器(如`#id`)和属性选择器(如`[attr=value]`)等。 - **属性**:CSS属性定义了元素的样式,如`color`改变文本颜色,`font-size`设置字体大小,...

    jQuery 左右2列可收缩的div布局

    在这个"jQuery 左右2列可收缩的div布局"示例中,我们将深入探讨如何使用少量代码实现一个灵活的、响应式的布局,允许用户隐藏或展开左侧栏。 首先,我们来理解基本的布局概念。通常,左右两列布局涉及两个主要部分...

    《CSS+DIV网页样式与布局》源码

    《CSS+DIV网页样式与布局》是一本深入探讨如何使用CSS(层叠样式表)和HTML的DIV元素来实现高效、灵活的网页设计的书籍。源码提供了书中各个实例的实际代码,供读者学习和实践。以下是对这些知识点的详细解释: 1. ...

Global site tag (gtag.js) - Google Analytics