关闭顶部展开顶部

深入CSS2.0结构,再谈div、span的困惑!_Div+CSS教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!
缂傚倸鍊搁崐鎼佸磹閹间礁纾瑰瀣捣閻棗霉閿濆牜鍤夋繛宸簼閺呮繈鏌涚仦鐐殤闁告梻鏁哥槐鎾存媴閹绘帊澹曢梻浣侯攰娴滎剟顢楅·鐛礛S闂傚倸鍊峰ù鍥х暦閻㈢ǹ绐楅柟鎵閸嬶繝鏌曟径鍫濆壔婵炴垶菤閺€浠嬫倵閿濆啫濡烽柛瀣崌瀹曟帡鎮欓弻銉ユ暪闂備礁鎼ú銊╁磻閻愮儤鍊垫い鎺嗗亾闁宠鍨块幃娆撳矗婢舵ɑ锛侀梻浣规偠閸斿酣宕伴弽褜鍤曞┑鐘崇閺呮悂鏌ㄩ悤鍌涘婵犵數濮烽弫鎼佸磻閻愬搫鍨傞悹杞拌濞兼牠鎮峰▎蹇擃伀闁绘繂鐖奸弻娑㈠焺閸愵亖妲堥梺缁樻尰閿曘垽寮婚垾鎰佸悑閹肩补鈧磭顔戦梻浣瑰▕閺€杈╂暜閿熺姴钃熼柕濞炬櫆閸嬪棝鏌涚仦鍓р槈妞ゅ骏鎷� 缂傚倸鍊搁崐鎼佸磹妞嬪海鐭嗗〒姘e亾閽樻繈姊洪鈧粔瀵哥玻濡ゅ懏鐓欓梺顓ㄧ畱婢ч箖鏌ら弶鎸庡仴闁哄本鐩俊鐑筋敊閻撳寒娼荤紓鍌欒閸嬫挸顭块懜闈涘闁绘挸鍟撮弻鏇熷緞閸繂顬夐梺缁樼箥娴滎亪寮婚敐鍛斀闁圭偓娼欓锟� 闂傚倸鍊搁崐鎼佸磹妞嬪孩顐介柨鐔哄Т绾惧鏌涢弴銊ョ€柛銉e妽缂嶅洭鏌嶉崫鍕殶妞わ富鍨辩换婵嬪閿濆棛銆愰梺鍝勭墱閸撶喎鐣峰Δ鈧オ浼村醇閻斿搫骞愰梻浣规偠閸庮垶宕濆澶嬪剭闁硅揪闄勯埛鎺戭熆鐠虹尨鍔熼弫鍫ユ⒑閸濆嫯顫﹂柛濠冪墪宀h儻绠涘☉妯溾晠鏌ㄩ弮鍌滃笡妞ゃ儲绋撶槐鎾诲磼濞嗘垵濡介梺鍝ュ仜椤兘鐛箛娑欐櫢闁跨噦鎷� 闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢敃鈧悿顕€鏌eΔ鈧悧濠囧矗韫囨稒鐓欑紓浣靛灩閺嬫稒淇婇悙鎵煓闁哄备鈧剚鍚嬮幖绮光偓鑼晼闂備礁鎲¢〃鍡欏枈瀹ュ洦宕叉繛鎴欏灩楠炪垺淇婇婵愬殭闂傚绉撮埞鎴︻敋閸℃瑧蓱闂佸憡姊归〃濠囧春閳ь剚銇勯幒鎴濇灓婵炲吋鍔欓弻鐔碱敊閼测晛鐓熼悗瑙勬礃濞茬喖寮婚崱妤婂悑闁告侗鍨抽崢顒勬⒒娴h姤纭堕柛锝忕畵楠炲繘鏁撻敓锟�,闂傚倸鍊搁崐宄懊归崶顒佸剭妞ゆ劧绠戠粈瀣亜閹扳晛鐏╃悮姗€姊绘担绛嬪殭婵﹫绠撻敐鐐村緞鐎n剛顔曟繝鐢靛Т閸嬪棝宕甸弴銏$厱妞ゆ劧绲剧粈鈧紓浣插亾闁告劏鏂傛禍婊堟煛閸屾氨浠㈤柟顔藉灦閵囧嫯绠涢弴鐐寸€剧紓浣虹帛閻╊垶鐛€n喗鍊烽柡澶嬪灩濞堛倝姊绘担鍛靛綊顢栭崱娑樼闁搞儜灞剧稁闂佸憡绻傜€氀囧几鎼淬劍鐓欐い鏍ф鐎氼喗绂嶉鍫熲拻濞达絽鎲¢崯鐐烘煟閻旀潙鍔ら柟骞垮灩铻e〒姘煎灠濞堛劍绻濋悽闈浶g痪鏉跨Ч瀵煡骞栨担鍦弳闂佺粯娲栭崐鍦偓姘炬嫹!
  使用div进行布局,提出div应当用于组织代码结构,现在我们再深入一点,div拥有语义吗?
  这个问题前段时间在研究群里曾激烈争论过,当时米随随发问:“什么是语义化WEB,div是什么?”小毅答曰:“DIV表示无意义容器。”我说:“否定。”然后旁边有人嘀咕:“...又要打起来了。”我大笑着进入战斗状态,结果迅速被围攻了。呵呵,总是和主流格格不入的我又一次站在主流的对立面。我还是不赞成将div视为无意义容器。容器这个概念是模糊的,是与设计挂钩的,理解成容器以后又远离结构了。再说每一个不是自我关闭的标签都可以视为容器,有什么区别?难道div可以包含一切(别断章取义哈),于是就可以随意使用了吗?那又如何固定xhtml?所以还是要回到div的语义上来,div是有语义的,只不过它的语义是面向代码结构的,是面向程序的。

  division(分割),对了,前段时间浏览w3schools时,看到它是这样定义div的:The div tag defines a division/section in a document. 我想我对div的理解是没错的。在文档中定义一个分割或者节点。我说div用于模块化页面内容,实际上从代码结构角度是展现xml化的节点结构。除了定义一个节点以外,div目前还用于定义一个分割,产生具有结构的行。还是以登陆为例:

示例代码 [www.mb5u.com]
<div>
<h3>用户登陆</h3>
<div>
<label for="name">用户名</label>
<input id="name" />
</div>
<div>
<label for="pw">密码</label>
<input id="pw" />
</div>
<p><button /></p>
</div>

  最外层的div是作为产生节点使用,而用户名和密码部分实际上是为了产生具有结构的行,这里若使用br同样能够产生行,但是缺乏结构,所以div代替了br。猜到我要说什么了吗?呵呵,又是xhtml 2.0,2.0中的section和line标签,是的,在1.X中,div同时扮演了section和line的角色,因为分割产生节点,因为分割产生行。但是很明显section和line具有比div更为明确的语义,那么我们可不可以认为div的语义和br一样是模糊的,既然是模糊的,br已经被毙了,我们现在大量使用的div会不会落到同样的下场呢?不知道,至少目前的xhtml 2.0中,div仍然存在。看看上面的结构代码在xhtml 2.0中应该如何展示(没考虑XForm):

示例代码 [www.mb5u.com]
<section>
<h>用户登陆</h>
<line>
<label for="name">用户名</label>
<input id="name" />
</line>
<line>
<label for="pw">密码</label>
<input id="pw" />
</line>
<div><button /></div>
</section>

  所以有些人单纯的认为似乎是div在不断嵌套,其实不是的,是没有办法而产生出来的假象。这里再请大家注重一个情况,需要和css结合起来看待,按钮那个部分,在xhtml1.X中我使用了p,严格说从结构上是错误的,很明显按钮不是一个段落,我仅仅是希望它换行呈现,但是假如使用div,那么就必须给予这个div一个class="button"以区分开来,并且在设定css的时候必须先清除公有的样式属性,这样会带来不少麻烦。另外作为节点的div和作为行的div同样会出现这种问题。示例:假如我定义节点div{width: 300px; padding: 10px;},那么我就必须在定义行div时要么覆盖要么清除以避免冲突,div div{width: 200px /*覆盖*/; margin: 10px; padding: 0 /*清除*/; color: #333;},然后在定义div div.button{margin: 0 /*清除*/; color: #F60 /*覆盖*/; background: #999;}的时候再做对行div的样式冲突避免,为了避免这种情况,采用对节点div增加class="loginarea"和p,这样就可以避开两次样式清除和覆盖操作。这样的情况在结构复杂的页面中更为明显,不要告诉我加class就行了,class越多,文档通用性越差,xhtml越难固定。这就是在xhtml1.X 中因为div的语义模糊带来的麻烦,回头在xhtml 2.0的结构中就很好办了,section{},section line{},section div{},无需class也互不干扰,诶诶诶,这里的div貌似很适合它分隔的语义哈,不是行也不是节点,仅仅就是一个分隔,呵呵。

  在我认为标签中最难理解的2个之一的div现在应该算是很清楚了。剩下的一个就是span,至今我仍未能理解到span如何产生结构,只好说说自己的迷惑了。

  先还是说说div和span的区别,从大的方面来说,div被归类到Structural Module(结构模块),而span被归类到Text Module(文本模块)。小的方面,div是block-elements(块级元素),span是inline-elements(行内元素)。在所有Structural Module中,div是唯一一个语义模糊的,在所有Text Module中,span也是唯一一个语义模糊的,呵呵,两个Tag唯一的共性:语义模糊。

  回到span的语义:跨度、范围。这个这个……比division(分割)更为抽象,难以理解。在一阵疯狂google后还是没找到我想要的那种解释,接近的都没有,也许根本就没有,所有的结果都指向表现,无论中英文都是指为字体添加样式,可是可是W3中明文写着The span element, in conjunction with the id, class and role attributes, offers a generic mechanism for adding structure to documents. 这里的for adding structure to documents做何解释?百思不得其解,后来气不过,甚至打开W3的源码查看他是如何使用span的,虽说获得了一些提示,但依旧不足以领悟到structure的真谛,我想应该是我的XML功力还不够。唉,既然语义上,结构上行不通,那么只好换个角度,从实际应用中试着去理解。span是行内元素,主要应用于文本,这点没什么异议,要害在于如何运用?为什么我始终不认为span是个样式容器,对,又是容器,google的时候发现清一色的容器解释,div是大容器,span是小容器,我郁闷。假如span因为文本的样式而存在,它凭什么存在?一段文本为什么要添加样式?假如你想强调应该使用em,假如想非凡强调应该使用strong,Text Module里还有很多语义明确的标签可以使用。所以span应该不是作为样式容器而存在,就像div不是作为布局容器而存在一样。但是我领悟不到span的真谛,哭啊!不过我可以抛砖引玉,在有一个地方,我一定会使用span的。那就是表单中。还是以登陆为例,假如登陆的数据需要展现出来,比如很多edit页面和view页面,结构应该完全相同,不同的是在edit页面中是输入框,而view页面中则用span展现数据。类似如下:

示例代码 [www.mb5u.com]
<div>
<h3>用户登陆</h3>
<div>
<label for="name">用户名</label>
<span>MyName</span>
</div>
<div>
<label for="pw">密码</label>
<span>MyPassword</span>
</div>
<p><button /></p>
</div>

  这样的好处有两点:1、和label区分开来,便于应用样式,如下定义:div div span{}。2、可以通过节点提取所有录入的数据。这是我目前唯一非常明确的使用span的地方,这里除了span似乎没有更合适的了,也有点符合它的语义:范围和结构化。这是我抛出的一块砖头,谁能引出玉来,或者知道玉,求之。其他span的运用仍在摸索中,包括从W3源代码中获得的提示。

  差不多要说完了,这时我对关于容器的说法又耿耿于怀了,于是再次以容器为要害词疯狂google,凭什么上上下下都说是容器,我要找出根源来,终于在最后,皇天不负有心人,在我执迷不悟的,怀着容器是错误理解的信念下,挖出来了根源。W3在这里对div和span进行了这样的解释:generic language/style container。两者都一样。哦,原来如此,怪说不得所有的中文翻译都是容器,我想很少人去看英文追根到底吧。确实style container应当翻译为样式容器。这一点都没错,错的是请注重,这是html中的div和span!!!而不是xhtml中的div和span,随即我再查到W3在对xhtml中的div和span的解释,已经不一样了:对于div是Define the characteristics of a block,而对于span是Define characteristics of text。对!这才是我的理解,也是我想要的正确解释!!因为这个是xhtml 2.0中的解释,由于2.0中section的存在,所以在对div的解释中,节点的含义被取消了,xhtml1.x的解释我懒得去找了。现在回头看我刚才试着写下的xhtml 2.0登陆结构中的div和最后一句话。嗯,div即便不做节点也不做行,可能还是有用的。

  说到这里,问一句,html和xhtml最大的不同在哪里?是语法吗?是名称吗?是严格了,xml化了吗?不不不,本质区别是:html是面向表现的语言,而xhtml是面向结构的语言!所以我们应当从结构的角度去审阅和理解与运用xhtml中的每一个Tag。比如容器的理解,在面向表现的html中,是正确的,但是在面向结构的xhtml中则错了,应该理解为节点。理解直接影响运用,以表现的理解显然无法写出结构化的代码。否则什么合什么离,哈哈哈,忍不住又敲出来了。

  好了,span现在总结不出来,只好先对div做个总结收尾:在当前xhtml1.x环境下,我们需要产生节点(section)和行(line)的时候选用div。最烦人的两个东西总算告一段落!

来源:无忧整理//所属分类:Div+CSS教程/更新时间:2007-01-04
loading.. 评论加载中....
相关Div+CSS教程
闂傚倷鐒﹂惇褰掑春閸曨垰鍨傞梺顒€绉甸崑銈夋煛閸ヨ埖绶涚紓宥嗙墵閺屾盯鍩勯崘顏佸闂佹娊鏀辩敮妤呭Φ閸曨垰鍗虫俊銈傚亾濞存粍鍎抽—鍐Χ韫囨洜肖闂佺懓鍤栭幏锟�
濠电姷鏁搁崑娑㈩敋椤撶喐鍙忔い鎾卞灩绾惧鏌熼悙顒佺伇婵℃彃鐗撻弻锟犲磼濠靛洨銆婃繝鈷€鍕姇濞e洤锕幊鐘活敆婢跺棗浜炬繝闈涱儐閻撶喖鏌曡箛濠冩珔闁诲繑鐓¢弻鐔煎礄閵堝棗顏�
濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ帒瀚峰Λ鎴犵磼鏉堚晛浠滄い鎾冲悑瀵板嫮鈧綆浜濋楣冩煟鎼达絾鍤€閻庢凹鍘界粩鐔煎幢濞嗘劕搴婃繛鎴炴煣缁舵岸寮婚敐澶婎潊闁宠桨鑳舵导鍫ユ⒑閻熸澘娈╅柟鍑ゆ嫹
濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ帒瀚峰Λ鎴犵磼鏉堚晛浠滄い鎾冲悑瀵板嫭绻濋崟闈涙倯闂傚倷娴囬鏍垂鎼淬劌绀嬫い鎾楀嫅姘舵⒒娴g瓔鍤欓梺甯到宀h儻顦查摶鐐寸箾閹存瑥鐏柛瀣樀閺屻劑鎮ら崒娑橆伓
闂傚倸鍊烽懗鑸电仚缂備胶绮崝娆撶嵁婵犲啯鍎熼柕濞垮劤閸旓箑顪冮妶鍡楃瑨闁稿﹤鎽滈弫顕€宕奸弴鐐殿啇闁诲孩绋掑玻鍧楁儗閹烘柡鍋撶憴鍕缂佽鐗撳顐﹀箻缂佹ɑ娅㈤梺璺ㄥ櫐閹凤拷
闂傚倸鍊烽懗鑸电仚缂備胶绮崝娆撶嵁婵犲啯鍎熼柕濞垮劤閸旓箑顪冮妶鍡楀潑闁稿鎹囬弻娑橆潩椤掑鍓崇紓渚囧枛閿曨亪寮崒鐐茬鐟滃繘鎮¢幘缁樼厽閹兼惌鍨冲畝娑㈡煛閸涱喚绠為柟顖氳嫰閳诲酣骞嬮悩纰夌闯濠电偞鎸婚懝楣冩晝閵壯€鍋撳鐐
闂傚倸鍊峰ù鍥Υ閳ь剟鏌涚€n偅灏伴柕鍥у瀵粙濡歌濡插牓姊烘导娆忕槣闁革綇缍佸璇测槈濡攱鏂€闂佸綊鍋婃禍鐐烘嚄閾忓湱纾藉ù锝夋涧婵¤姤淇婇悙鑸殿棄妞ゆ洩缍佹俊鎼佸煛婵犲啯娅栨繝鐢靛仜濡瑩宕归悽鐢电當闁跨喓濮甸埛鎴︽煕濠靛棗顏╅柍褜鍓欓…鐑界嵁婵犲洤绠婚柤鍛婎問濞肩喖姊虹捄銊ユ珢闁瑰嚖鎷�
闂傚倸鍊风粈渚€骞栭锕€鐤柣妤€鐗婇崣蹇擃渻鐎n亝鎹g紒鈧繝鍌ょ唵闁兼悂娼ф慨鍫ユ煟閹垮嫮绉柟顔款潐濞碱亪骞忓畝濠傚Τ婵犵數鍋涢惇浼村磹閺囥垺绠掗梻浣瑰缁诲倸螞濞嗘垹鐭嗛柍褜鍓熷娲川婵炴碍鍨块幃褔鎮╅懠顒佹闂佽澹嗘晶妤呭疾閹间焦鐓ラ柣鏇炲€圭€氾拷
婵犵數濮烽。钘壩i崨鏉戝瀭妞ゅ繐鐗嗙粈鍫熺節闂堟稒锛嶉柣鏂挎娣囧﹪顢涘顒佸€柣搴㈡皑缁垶濡甸崟顖氱閻庨潧鎽滈悾娲煟鎼淬垻鍟查柟鍑ゆ嫹
濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ帒瀚峰Λ鎴犵磼鏉堚晛浠滄い鎾炽偢瀹曞爼濡搁妷顔荤穿濠碉紕鍋戦崐鏍箰閼姐倖宕查柛鎰典簴閸嬫挸顫濋搹顐ゅ涧婵烇絽娲ら敃顏堛€佸☉妯滄棃鍩€椤掍焦娅犻柛娆忣槺缁♀偓濡炪値鍋掗崰妤冣偓姘炬嫹
婵犵數濮烽。钘壩i崨鏉戝瀭妞ゅ繐鐗嗙粈鍫熺節闂堟稒锛嶉柣鏂挎閹便劌顪冪拠韫闁诲氦顫夊ú锕傚礈閻旂鈧礁鈻庨幘宕囶槯闂佺粯鎸哥花鍫曞磻閹剧粯鍋ㄩ柛娑橈功閸樻悂姊洪崜鎻掍簼缂佽瀚悺顓炩攽閻樻剚鍟忛柛锝庡灦楠炲繘鏁撻敓锟�
婵犵數濮烽。钘壩i崨鏉戝瀭妞ゅ繐鐗嗙粈鍫熺節闂堟稒锛嶉柣鏂挎閹便劌顪冪拠韫闂備礁鎼懟顖炲箠濮椻偓瀹曟椽鍩€椤掍降浜滈柟鍝勬娴滈箖姊虹€圭媭鍤欓梺甯秮閻涱噣骞嬮敃鈧粻娑㈡⒒閸喓鈯曟い鏂挎濮婄粯鎷呴崨濠冨創闁诲孩纰嶉幃鍌炵嵁韫囨稒鏅搁柨鐕傛嫹
婵犵數濮烽。钘壩i崨鏉戝瀭妞ゅ繐鐗嗙粈鍫熺節闂堟稒锛嶉柣鏂挎閹便劌顪冪拠韫闁诲氦顫夊ú鈺冪礊娓氣偓閻涱喚鈧綆浜栭弨浠嬫煕椤愵偄浜楃紒鎲嬫嫹
濠电姷鏁告慨鐑姐€傛禒瀣劦妞ゆ巻鍋撻柛鐔锋健閸┾偓妞ゆ帒瀚峰Λ鎴犵磼鏉堚晛浠滄い鎾冲悑瀵板嫭绻濋崟顓炲箑闂傚倷鑳堕幊鎾绘偤閵娧勫床闁告洦鍨奸弫鍌炴倵濞戞鑲╂崲閸℃ǜ浜滈柡宥庣厛濞堟柨顭胯瀵墎鎹㈠┑瀣剁稏妞ゆ棁妫勯锟�
闂傚倷娴囬褎顨ラ幖浣稿偍婵犲﹤鐗嗙粈鍫熺節闂堟侗鍎愰柛瀣儔閺岀喖骞嗛悧鍫闂佹椿鍘介〃鍛村煘閹达附鍋愰柟缁樺笚濞堫參姊烘總鍛婃锭缂傚秴锕濠氬Χ婢跺娈熼梺闈涱槶閸庨亶锝炲澶嬧拺缂備焦岣挎竟鍕磽瀹ュ嫮顦﹂柣锝呭槻閳诲酣骞樼€涙ɑ顏熼梻浣芥硶閸o箓骞忛敓锟�
UB闂傚倸鍊风粈浣革耿鏉堚晛鍨濇い鏍仜缁€澶嬩繆閵堝懏鍣界€规挷绶氶弻娑㈠Ψ閵忊剝鐝曢柣搴㈢瀹€鎼佸箖濡も偓閳藉鈻嶉搹顐㈢伌闁挎繄鍋ら弫鎾绘晸閿燂拷
闂傚倸鍊峰ù鍥ㄧ珶閸喆浠堢紒瀣儥濞兼牕鈹戦悩宕囶暡闁绘帡绠栭幃妤呮偨閻㈢偣鈧﹪鏌涚€n偅宕岄柣娑卞櫍瀹曞綊顢欓崣銉ф/濠电姷鏁告慨顓㈠磻閹剧粯鐓ラ柣鏇炲€圭€氾拷
闂傚倷娴囬褎顨ラ崫銉т笉鐎广儱顦崹鍌炴煕濠靛棗顏甸柤鏉挎健閺屾盯濮€閵忕姵顔�
闂傚倸鍊风粈渚€骞夐垾鎰佹綎缂備焦蓱閸欏繐顪冪€n亝鎹g紒鈧繝鍌ょ唵閻犻缚娅i悘閬嶆煕濡や胶顣茬紒缁樼洴瀹曞崬螖閳ь剟顢楅姀銈嗙厱闁绘劕妯婂Σ鍦磼缂佹ḿ銆掔紒杈ㄧ懇閹晠宕崟顐㈣厫闂傚倷鑳舵灙濡ょ姴绻橀獮蹇涙晸閿燂拷
缂傚倸鍊搁崐鎼佸磹閻戣姤鍊块柨鏇炲€归崑锟犳煥閺囩偛鈧悂宕归崒娑氱瘈濠电姴鍊搁顐c亜閳哄懏鏁遍柕鍥у楠炴帒顓奸崶鑸敌滅紓鍌欑劍瑜板啫锕㈤柆宥呯劦妞ゆ帒鍊告禒顖炴煕婵犲啰绠樼紒杈ㄦ尭椤繃锛愬┑鍥ㄦ珦闂備浇娉曢崳锕傚箯閿燂拷
©2017 www.mb5u.com婵犵數濮烽。钘壩i崨鏉戝瀭妞ゅ繐鐗嗙粈鍫熺節闂堟稒锛嶉柣鏂挎閹便劌顪冪拠韫闁诲孩顔栭崳顕€宕抽敐澶婄畺闁冲搫鎳庣粻鐢告煙閻戞ɑ灏柣锔兼嫹
闂傚倸鍊峰ù鍥Υ閳ь剟鏌涚€n偅宕岄柡宀€鍠栭、娑樷堪閸愮偓姣夋俊鐐€戦崕濠氬箯閿燂拷&闂傚倸鍊风粈渚€骞夐敍鍕殰闁圭儤鍤﹀☉銏犵睄闁割偆鍣ュΛ鍛存⒑鐠恒劌娅愰柟鍑ゆ嫹