`
92java
  • 浏览: 7544 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

【转】 div + css误区

阅读更多
重构”的春风吹遍大江南北,互联网一时间风声鹤唳,“div+CSS”俨然已成为一种“时尚”,难以尽数的网站都不约而同地开始了自己的“重构”。然而打开这形形色色网站的源代码,却时常令人哑然失笑——

  我们看到有嵌套6、7层的div布局,有不用table的表格,有纯div+a构成的页面,有成百上千的表现层class……现在关于标准的书籍越来越多,除了少数几本标榜“高级技巧”的书籍以外,很少有人不会在自己著作的前几章强调这样一句话——“结构与表现分离”。然而这些书籍的读者们,又有多少人认认真真地读过前几章呢?还是更多地直接跳过那些乏味的结构讲解,一头扎到貌似高深的布局技巧与Hack中去?

  其实div+CSS这个说法从一开始就误导了太多的人,急功近利的心态则更是造成这种现象的罪魁祸首。一个习惯了table布局的网页制作接触标准的第一步,不应该是去盲目寻求实现各种布局的CSS技巧,而是努力改变自己的思维方式。

  下面将结合我的切身体会谈一谈顺应标准的思维方式,其中有不少是我曾经走过的弯路,希望对刚刚接触标准的XDJM们有些帮助:

  1、“节省代码”是营销手段,不是宗旨

  “使用div布局可以比table布局节省更多的代码”,我在很多书籍和网站上见到过这句话。这句话本身是没错的,可以“节省代码”的确是网页标准化所带来的好处之一。然而切记,它只是“好处之一”,而不是“唯一好处”,更不是宗旨。“节省代码”更多的时候是我们用来说服那些顽固不化的老板的营销手段。网页标准化的唯一宗旨是“结构与表现分离”,而绝不是为了节省代码而节省代码。我曾经因为网站边栏甚至主体内容的表现形式相同而采用了统一的 class (至今还有一些书是这样教的),这样的确比分别命名id更节省代码,然而这样做的代价是代码失去了良好的结构。失去良好结构的后果是:一、源代码没有了可读性;二、网站增加了未知的维护成本。试想,当某一块内容因为需要而作出表现形式的变动,例如链接的颜色等等,我们就不得不去修改页面源文件,增加额外的 class,工作量比起只需要调整id分组就大了许多。而且长此以往,结构将会越来越差,形成难以逆转的恶性循环。

  还有一种情况,出现在id的命名方面,也是本人曾经犯过的错误。那时为了“节省代码”,而把主菜单命名为“mm”,二级菜单命名为“m2”,三级菜单为“m3”,结果严重降低了网页的可读性,使其他同事很难接手,图省事却累了自己。同理,文件及文件夹命名方面也不宜过简,象《网站重构》里建议把图片都用“i”目录存放,个人以为并不可取,除非你能为这种高度缩写的目录结构撰写详细说明并保证每个相关人员包括其他制作人员、开发、甚至懂行的老板……都能理解和执行,否则只会给你自己增添不必要的麻烦。

  2、ID是狙击枪,class是双刃剑

  想要做好网页结构,id与class都是必须熟练掌握的,所谓“两手抓,两手都要硬”。ID就象狙击枪一样,可以帮助我们精准地定位要想要加载样式的元素;而class则是侠客的佩剑,信手拈来更加轻盈灵便,两者的结合能够实现结构良好且表现丰富的页面。然而现在有一种错误的观点,就是id完全可以用class来取代,事实上许多网页源代码也的确如此,打开来通篇class,找不到一个id。造成这种现象的理由有很多种,然而自table时代传下来的根深蒂固的“class=CSS”的观念才是本因。的确,class比id用途更广更灵活,但也必须意识到,class对于构建良好的网页结构远不如id有效。id的强制唯一性使得我们可以很容易通过id检索到我们需要的任意模块,而class则没有这个优势。虽然我们可以为模块定义唯一的 class名,但前提是——只有制作者本人可以动网页样式。否则换一个稍微懒一些伙计,看到样式相同便直接把前面的class拿来套用,其结果就是我们发现网页里有十几个模块都叫做“gonggao”或者“xinwen”,以至于为了区分还不得不加上大量的html注释,这样的结果显然并不是我们想要的。再者就是前面提到的,通过通用class所节省下来的代码,又不得不在每个单独定义的class中挥霍掉。

  ID是狙击枪,class是双刃剑,合则两利,分则两败。

  3、并不是所有的内容都需要div做“容器”

  主菜单究竟是用<div id="mainnav"><ul>还是<ul id="mainnav">?这是一个博弈的问题。至今这个问题也没有人能够给出明确的答案,就连我也是如此。诚然,<div id="mainnav">在只包含了一个<ul>元素的时候,这个div就显得有些冗余,但有时候为了配合美工绚丽的设计,多一层标签就意味着多一层变化(有些人在a标签里套span也是如此)。而div不带任何原始属性的先天优势也是其它标签所无法比拟的。这个命题我只是想说明一件事,就是我们应该意识到,<div id="mainnav"><ul>之外,还有<ul id="mainnav">这种写法,同样具有良好的结构和语义,并且省去了一层嵌套。在我们不需要为华丽的美工劳心劳神的时候,是不是也可以让结构更加简约呢?

  这个命题其实还可以引申为——“并不是所有内容都需要块元素做容器”、“并不是所有链接都需要其它元素做容器”,例如很多页面都有的“更多”。有些人写做“<div class="more"><a>”,也有人写做<p><a>或者<strong>< a>。在这些“容器”只包含了一个<a>标签的时候,它们是否还有存在的必要?直接写成<a class="more">会破坏结构吗?会缺乏语义吗?会影响布局吗?换一种思路,你也许就会有不一样的收获。

  4、工作上也做到“结构与表现分离”

  关于这一点,网络上很多高手都是这样建议的,也就是先打开编辑器,把结构完整地写出来,再去CSS里写表现,而尽量不去动已经写好的结构。

  然而以看书为主要学习方式的人却很难体会,因为关于标准的书籍多半是手把手来教的,也就是必然是结构表现结合,循序渐进。虽然有些书籍有这方面的建议,但短短的几句话远不如读书过程中的潜移默化。在制作人员能够对结构良好把握的时候,同时写结构与表现也不会对结果有太大的影响。但以我的经验,结构表现分离的工作方式,要比同时写结构与表现效率高很多,同时也不容易遗漏页面上的元素。

  当然,所谓的“结构与表现分离”并不是完全不考虑表现,想要兼顾到表现,就要保证——在不破坏结构的前提下,CSS选择器能够选择到尽量多的内容。在哪些地方加class,或者用哪些标签来区分,是一个见仁见智的地方,相信每个人都有自己的体会。而结合不同的设计稿,有时候也需要做出相应的变化,然而这些变化都应该有一个同样的前提——不破坏代码的结构和可读性。

  再就是,一定要意识到,任何可视化的工具都是魔鬼。它们可视化界面下所呈现的效果,往往与真实浏览器相差千里,而我们真正要兼容的是浏览器,不是编辑器的可视化界面。

  5、CSS不是万能的,没有CSS也不是万万不能的

  相比于CSS1.0时代,今天CSS可以完成更多的事情,然而需求永远是领先于技术的,CSS无法完成网页所有的表现层工作,有时候我们必须结合JS或者其他语言来实现一些效果。而另一些时候,用JS的方法比只靠CSS简单得多,并且代码结构更加良好——最典型的例子就是下拉菜单。这些时候,我们要说服自己,或者说服老板与客户,去采用更简单更合理的方式。因为DOM同样是网页标准的重要组成,并不是使用了JS我们的网页就降低了效率或是不再标准,恰恰相反,这是对JS最大的误解。说到这里不得不提一点,就是今天的时代,比以往更要求每个职业了解更多的相关知识,做设计的人要懂一点交互和制作,做制作的也必须了解设计和程序,尤其是JS这样的前端技术,只有这样,你和同事才能够更好地合作,个人的发展前景也会更加光明。

  没有CSS,指的是当我们的网站因为各种未知的原因导致CSS文件载入失败,不要因此而慌乱,这是考验我们代码质量的最佳时机。在没有CSS的时候,如果网页仍旧保持良好的可读性,这成果要远比通过W3C验证更值得我们自豪。

学ajax后发现css很重要。于是买了本css的书在读。今天偶尔看到这篇文章。觉得完全是作者的经验之谈。。。于是贴出来。希望大家一起共享。

本文转载自http://www.wang48.com/jishubaodianview/?jsd_id=9957;
分享到:
评论
1 楼 bobomtv17 2007-12-13  
哇  楼主太辛苦了!
现在流行的JS+CSS,已经渐渐成为WEB程序员必备的技术之一了;随着AJAX的风行,相信未来的WEB界面会越来越精彩.

相关推荐

    两天驾驭DIV+CSS.pdf

    基础篇 1.1 必须知道的基础知识 知识一 DIV+CSS的叫法是不准确的 标准叫法是xHTML+CSS 知识二两大误区 误区一用了Table就不标准。误区二DIV标签越多越好 Table是为了存储数据DIV是为了架设...

    2天驾驭DIV+CSS 2.02版

    ##### 1.1.2 [知识二] DIV+CSS将你引入误区 使用“DIV+CSS”进行布局时,很多人可能会陷入以下误区: - **过度依赖`&lt;div&gt;`标签**:在早期,由于缺乏更好的布局工具,开发者习惯于使用嵌套的`&lt;div&gt;`标签来实现复杂...

    DIV+CSS入门教程

    #### 知识点一:DIV+CSS命名误区与标准术语 在IT行业中,尤其是前端开发领域,DIV+CSS是一种广为人知的网页布局技术,但它的命名却存在一定的误区。国内开发者习惯性地称之为“DIV+CSS”,但实际上,这一术语并不...

    2天驾驭DIV+CSS(全新发布2.0.3版本)

    ### DIV+CSS概念误区 文档开篇即提出了“DIV+CSS”这一概念的误区,指出这并非是一个准确的称呼。实际上,标准的称呼应该是xHTML+CSS。这一误区源于国内对这项技术理解不够深入,最初的传播者仅从代码层面上将过去...

    2天学会DIV+CSS最新版

    **1.1.2 DIV+CSS 将你引入误区** - **误区解释**:仅仅依赖`&lt;div&gt;`标签进行布局容易导致HTML结构过于复杂且不易维护。此外,过度使用`&lt;div&gt;`可能导致页面结构缺乏语义化,这不利于搜索引擎理解和用户访问。 - **...

    2天驾驭div+css(全新发布2.0版本)

    在基础篇中,作者首先纠正了一个普遍存在的误区,即“DIV+CSS”的叫法。实际上,这种称呼并不准确,标准的称呼应该是xHTML+CSS。作者解释了这种错误叫法的来源,并强调了W3C的重要性,即万维网联盟(World Wide Web ...

    初学者使用div和css误区

    在探讨“初学者使用div和css误区”这一主题时,我们深入分析了div与CSS布局在网页设计中的常见陷阱,这对于提升网页制作的效率和效果至关重要。以下是对标题、描述及部分内文提及的关键知识点的详细解读: ### 1. ...

    div+css页面布局(pdf版)

    #### 一、DIV+CSS布局的概念与误区 - **概念**:在网页设计领域,“DIV+CSS”通常指利用HTML中的`&lt;div&gt;`元素结合CSS样式表进行网页布局的技术。然而,正如教程中所指出的,“DIV+CSS”这一术语并不准确,更准确的...

    用DIV+CSS 做网站设计布局参考.docx

    【标题】:用DIV+CSS做网站设计布局参考 【描述】:本文档详细介绍了如何使用DIV+CSS技术改进网站设计布局,强调了遵循Web标准的重要性,并提供了实践建议。 【标签】:CS(可能指的是CSS) 【正文】: 在网站...

    用DIV+CSS 做网站设计布局参考.pdf

    网页设计布局是构建网站视觉效果的关键步骤,而“用DIV+CSS做网站设计布局”已经成为现代网页设计的标准实践。DIV(Division)作为一个HTML元素,主要用于组织网页内容,而CSS(Cascading Style Sheets)则负责控制...

    html + css 入门教程

    - 原因:传统的网页布局多采用表格(Table)的方式,随着技术的发展,逐渐转向使用`&lt;div&gt;`标签进行布局,因此人们习惯性地称之为“DIV+CSS”。 - 正确表述:“xHTML+CSS”,即使用xHTML(扩展的超文本标记语言)与...

    DIV+CSS的叫法是不准确的

    但是,这种说法存在一个误区,因为XHTML中不仅仅有DIV标签,还有其他多种标签,如span、p、a、ul、li、dl、dt、dd等,这些标签在网页中各司其职,各有所用。因此,仅用DIV标签来实现布局并不能算是标准的页面布局,...

    css入门教程

    首先,我们需要纠正一个常见的误区:“DIV+CSS”并不是一个准确的专业术语。实际上,正确的称呼应该是“xHTML+CSS”。这里的xHTML代表的是可扩展超文本标记语言,它是HTML的一个更加严格和结构化的版本,遵循W3C制定...

    CSS实现纯图片替换效果和div模拟下拉条的实现 -- 剔除知识误区

    本文将深入探讨如何使用CSS实现纯图片替换效果以及如何利用div模拟下拉条,帮助开发者们避免常见的误区。 首先,我们来讨论CSS纯图片替换效果。这种技术常用于实现诸如“无文本”的按钮、自定义字体图标等场景。其...

    初学Web标准的几个误区,css,web

    - **详细解析**:很多初学者会错误地认为CSS布局仅仅是将原本使用表格的地方替换为div。事实上,这种方法并没有真正实现内容与表现的分离。正确的方法是先考虑页面的基本结构和内容,然后再通过CSS来定义样式和布局...

    WebRebuild北京第一届交流会之5:《网站重构who am i》——Tommy[范俊豪]

    在重构实践中,Tommy特别指出了关于“div+CSS”的误区。他指出,不应简单地将“div+CSS”视为优于“table+CSS”的解决方案,而是应该根据实际需求选择合适的HTML元素。例如,正确使用h1-h6进行标题标记,使用div和p...

    另一个角度谈谈DIV CSS

    - **误区二:DIV CSS能显著减少代码量**:虽然理论上DIV可以简化结构,但对应的CSS代码可能会增加,整体代码量的变化取决于具体设计。 综上所述,DIV CSS是一把双刃剑,既有优势也有潜在问题。作为网页设计师,我们...

Global site tag (gtag.js) - Google Analytics