深入CSS結構 div再議以及對span的迷惑

2021-10-03 02:30:27 字數 3679 閱讀 9247

篇文章中主要否定了使用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目前還用於定義乙個分割,產生具有結構的行。還是以登陸為例:

使用者名稱密碼

最外層的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):

使用者登陸

使用者名稱密碼

所以有些人單純的認為好像是div在不斷巢狀,其實不是的,是沒有辦法而產生出來的假象。這裡再請大家注意乙個情況,需要和css結合起來看待,按鈕那個部分,在xhtml1.x中我使用了p,嚴格說從結構上是錯誤的,很明顯按鈕不是乙個段落,我僅僅是希望它換行呈現,但是如果使用div,那麼就必須給予這個div乙個class="button"以區分開來,並且在設定css的時候必須先清除公有的樣式屬性,這樣會帶來不少麻煩。另外作為節點的div和作為行的div同樣會出現這種問題。示例:如果我定義節點div,那麼我就必須在定義行div時要麼覆蓋要麼清除以避免衝突,div div,然後在定義div div.button的時候再做對行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唯一的共性:語義模糊。

新建乙個前端學習qun438905713,在群裡大多數都是零基礎學習者,大家相互幫助,相互解答,並且還準備很多學習資料,歡迎零基礎的小夥伴來一起交流。

回到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展現資料。類似如下:

使用者名稱myname

密碼mypassword

這樣的好處有兩點:1、和label區分開來,便於應用樣式,如下定義:div div span{}。2、可以通過節點提取所有錄入的資料。這是我目前唯一非常明確的使用span的地方,這裡除了span好像沒有更合適的了,也有點符合它的語義:範圍和結構化。這是我丟擲的一塊磚頭,誰能引出玉來,或者知道玉,求之。其他span的運用仍在摸索中,包括從w3源**中獲得的提示。

說到這裡,問一句,html和xhtml最大的不同在**?是語法嗎?是名稱嗎?是嚴格了,xml化了嗎?不不不,本質區別是:html是面向表現的語言,而xhtml是面向結構的語言!所以我們應當從結構的角度去審視和理解與運用xhtml中的每乙個tag。比如容器的理解,在面向表現的html中,是正確的,但是在面向結構的xhtml中則錯了,應該理解為節點。理解直接影響運用,以表現的理解顯然無法寫出結構化的**。否則什麼合什麼離,哈哈哈,忍不住又敲出來了。

好了,span現在總結不出來,只好先對div做個總結收尾:在當前xhtml1.x環境下,我們需要產生節點(section)和行(line)的時候選用div。

阿彌陀佛,最煩人的兩個東西總算告一段落,雖然未完,但是遺憾也是美嘛,以後再說了。結構也算告一段落,下篇可以換個口味了,正式進入語義!

css的再深入7(更新中 )

1.transparent 透明的 2.placeholder 提示語 寫頁面搞清結構層次,保證模組化,讓他們之間不能受到影響 1 元素性質 2 標準流 浮動帶來的脫離文件流撐不起父級的高度的問題可以採用清除浮動的方式消除影響,absolute和 fixed 帶來的脫離文件流撐不起父級的高度,使用子...

CSS 巢狀DIV布局

巢狀div布局,會牽扯到css的position屬性 如果內層div將position屬性設定為absolute,並設定left,和top等屬性,還需要考慮外層div的position屬性設定。absolute absolute絕對定位,直接指定top left right bottom。有意思的是...

synchronized,理解再深入那麼一點

class object 描述 執行緒1,對synchronized element 訪問,執行緒2,對synchronized a 方法進行訪問。結論 獲取成員變數的鎖,與獲取物件的鎖,是獨立的。並不存在說,要獲取物件的鎖,就要求成員變數或神馬的都沒有鎖存在了。即,鎖成員變數與鎖整個物件是獨立的。...