關於div,說法很多。把div看成是布局元素這種觀點我想是最多的,類似有“用div代替table進行布局”、“實戰CSS+DIV布局”等等等等,太多了,還有不少人延用Dreamweaver的定義,稱div為層,按Photoshop的層的概念來使用……有朋友乾脆就直接稱div和span為輔助布局元素。
怎麼說呢?雖然我很想說對div類似的這種認識是錯誤的,div不是一個布局元素,沒有一個tag是用來布局的,但是我是對的嗎?我也不知道。幾乎所有人對div的宣傳都是布局,不管是'民間’的還是'官方’的,但是如果我們找根源,中文中,div是一個結構化標籤,是一個區塊層級元素。好吧,我們首先看看div擁有的語義,division(分隔),按語義它的作用是將兩個部分分隔開來。然後我們再回到w3去看看怎麼定義div和span的:The DIV and SPAN elements, in conjunction with the id and class attributes, offer a generic mechanism for adding structure to documents. These elements define content to be inline (SPAN) or block-level (DIV) but impose no other presentational idioms on the content.
注意到我上面加粗的一句話了嗎?W3可沒說是 for layout,而是for structure,是結構!因為分隔從而產生(定義)一個代碼結構。我想,結構和布局應該是兩個概念吧。或許,因為table確實被用於布局了,所以這種根深蒂固的布局思路又自然而然的轉嫁到div上,我曾在很長一段時間裡也是這麼理解的。但是,現在我要說,這絕對是一個錯誤並且,這是極度嚴重的錯誤!!!這純粹個人觀點個人理解,自己取捨好了。
為什麼嚴重?理解的錯誤直接導致的就是使用的錯誤。因為如果按照這個思路,把div作為布局元素使用,那麼我認為:
你永遠無法固定xhtml!永遠陷在css的怪圈中!永遠不會去思考和理解結構!永遠擦不乾淨table烙下的痕迹!永遠無法接近神(貌合神離的神哈,呵呵)……
或許把div稱為布局元素還是為了更好的推行標準,但是卻將人們從一個錯誤帶向了另一個錯誤。兩年前我剛接觸標準時就在《重構之美》首篇中迷惑過關於改版的事情,雖然隨著理解的深入好像有了突破,在我寫下xhtml後不變動,然後通過css的技巧來完成新版面。比如像著名的csszengarden。但是很快我又有新的迷惑,一個人這樣做好像沒什麼問題,團隊呢?比如如果同樣的內容,設計成兩個版式,然後交給不同的兩個人來寫xhtml,會一樣嗎?就像如果把csszengarden的形式顛倒一下,基於同一份資料先做好100個設計稿,讓100個人按照這個設計稿寫100份xhtml,會一樣嗎?我想按照div配置模式,對於同樣的版式,不同人不同的頁面分析都會產生不同的xhtml,更何況不同的版式呢?但是既然表現與結構無關,那麼同樣的內容不應該有2份以上的xhtml。不要小看這個問題,對於團隊中前背景有效分離與快速協同,這是關鍵!我在培訓中提出一個觀點:最理想的境界是前台閉著眼睛都能知道後台輸出的是什麼樣的xhtml結構代碼。那麼問題出在哪裡?div布局!尤其是在理解了h系欄標籤不合理之後,體會更深刻。