HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

日期:2013-2-4??來源:GBin1.com

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

不管你以前在web頁面布局中如何稱呼它們 - “區域”還是“塊”,我們一直都在布局中將頁面分成可視的不同區域。但真正的問題在于我們并沒有使用任何正確的工具來實現。一般情況下我們使用典型的網格來劃分頁頭,頁面主題,頁尾等等區域來實現所謂的頁面布局。

在過去的很多年以來,我們都使用DIV來幫助我們劃分頁面區域,而為此我們定義了很多class來幫助我們有效定義頁面上的每一個層次,最新的HTML5最終幫助我們解決了這個問題 - 使用section 元素, 很多人都非常喜歡這個新的HTML成員,因為i終于在HTML標準中給予了我們準確的開發建議,Section增強了整個DOM的可讀性,在這篇文章中我 們將介紹這些新的元素,幫助我們了解能夠解決什么問題,提供了什么重要的功能并且對于“語義化Web”做出了什么樣的貢獻!

相關閱讀:HTML5/CSS3系列教程:HTML5基本標簽使用header,nav和footer

開發網站

可能大家還記得使用dreamweaver來開發網站的日子,我們通過拖拽來生成一個典型的頁面,如下:

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

使用dreamweaver只是為了快速的生成圖形界面而非真正意義上的信息語義清晰,當然很多人都使用dreamweaver,包括我自己。典型的傻瓜式開發的產物。

web標準

當 我們開始熟悉了web標準以及正確開發的相關最佳實踐之后,我們需要做的事情仍舊是視覺設計,典型的“CSS布局”,盡量不使用語義錯誤的table來設 計頁面布局。使用基于div的布局作為web設計其實已經很多年了,不過使用div布局導致document結構的混亂和層次的難于維護是顯而易見的。而 且最惡心的hack問題也一直困擾我們!

Div標簽的問題

每天都會有成千上萬的開發人員使用div來分隔,格式化頁面內容。我們使用div來分隔不同的內容區域,以保證內容的互相獨立。但是事實上div并非用來實現這樣的功能的。看看如下這個例子:

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

在 這個簡單的局部中,包含了一個文字主題和一個邊欄內容。為了讓它對于讀者絕對清晰,我們將sidebar分離于主體。這里我們使用一個粗邊框來封裝這個邊 欄內容。也許你會說,邊欄的標題應該是<h3>,這個我們稍后做解釋。所有的定義使用了一個典型的CSS,如果你把CSS去除,你將看到如下 展示:

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

如果我去除了CSS,你看到頁面布局變成了響應式風格,這其實就是HTML4 document如何在瀏覽器中實際被生成的樣式。這里我們看到邊欄區域其實是document中的另外一段信息。

為什么會這樣呢?

主 要的原因在于<div>是一個流動內容的元素。不管邊框或者背景是什么樣式,它和主題document并不分離,相反,作為其中的一個部分生 成。當我們移除CSS可以看到,邊欄的“Resource”標題并非是一個獨立的組件,而是document的一個部分。作為頁面的閱讀者來說,這一點大 家應該看到。

為了更好的說明,我們看看如下代碼片段:

<div class="parent">
<h2>Heading</h2>
<p>Some content...</p><div class="child"><h2>Another heading</h2><p>Some other content...</p></div>
</div> 

這里我們我們稍微的修改了一下內容,添加了兩個div到來展示父子關系。 div.child標簽屬于div.parent。我們可以使用CSS來使得兩個元素的關系看起來是這個樣子。但是,要知道div在標準中的描述是“沒什 么特殊含義”。非但不意味著任何語義上的含義,對于web頁面的計算架構來說也沒有任何意義。而且div對于我們來說也不可見。因此我們應該把他們都刪 除,而使用如下4個元素來展示頁面父子關系,如下:

<h2>Heading</h2>
<p>Some content...</p>
<h2>Another heading</h2>
<p>Some other content...</p> 

作為正確的結構來說,這里是實際構成內容的元素。

標題層次實際并非非常有用

可能很多人認為將<h2>替換成<h3>可能能夠幫助我們解決問題。如果這樣的話,我們可能得到如下:

  • A header(h2)
    • Another header(h3)?

這個方式貌似更加的合理。但是實際上呢?h3的內容是否真的屬于h2?這里很難說清楚。下面我們再看一個例子:

在這個HTML4頁面中,我們使用h1來生成一個頁面內容介紹標題,使用h2作為主內容的標題,使用h3來標示邊欄,并且使用div#footer來生成頁尾內容。但是問題是footer究竟屬于那個一個內容呢?

Footer屬于哪一個標題

下面這個圖非常清晰的展示了document結構問題,我們看到這里footer究竟屬于<h2>的頁尾,還是<h3>的頁尾。

可能有些專家認為,可以將代碼改成如下樣式:

  • h1(page)
    • h2(main)
      • h3(sidebar)
    • h2(footer)

這個屬于一個hack,但是并非很正確。

劃分區域

了解如何正確的劃分區域,HTML5提供了<section>,<article>,<aside>和<nav>等元素。看看下圖有幾個區域:

HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

多選題:

A. 1 ?B. 2 ?C. 3 ?D. 4

你的答案是什么? 正確的應該是 (B)。

也許你會不太理解,因為在HTML5的標準中擁有有如下具體的定義:

4.4 Sections

  • 4.4.1 body
  • 4.4.2 nav
  • 4.4.3 article
  • 4.4.4 aside
  • 4.4.5 h1, h2, h3, h4, h5 and h6
  • 4.4.6 hgroup
  • 4.4.7 header
  • 4.4.8 footer
  • 4.4.9 address

但是如果你看看 4.4.8 footer的時候,你會看到如下內容:

“the footer element is not sectioning content; it doesn’t introduce a new section.”

這里HTML5的定義上有一些前后矛盾之處,不過大家也不用過于糾纏。

Section是一個新類型的div嗎?

這可能是一個典型的錯誤理解。

Div其實在功能上并沒有任何含義,如果你使用div來創建頁面框架結構將會是一個非常糟糕的選擇。

而Section用來定義一個結構化的區域,看看下面這個例子:

<section class="outer"><section class="inner"><h1>Section title</h1></section>
</section>

這里我們使用section來生成一個盒模式。如果我們運行?our outliner,我們得到如下警告:

[Untitled Section]

  • Section title

這里如果使用div的話,可以有效幫助我們劃分區域:

<section><div><h1&gtSection title</h1></div>
</section> 

生成結果如下:

  • Section title

可以看到沒有任何警告或者提示!

總結

HTML 并不是一個SDK或者圖形設計師的畫板。它是一個Meta語言,一個幫助你了解特殊信息的語言。有時候我們使用解析器,獲取主體,時間,來源或者流行等內 容。這就是microdata和RDF主要的功能。另外,上下文,層次,相關的重要性和代碼關系都需要被考慮。這就是正確的區域元素使用和語法需要考慮 的。

有些人可能會告訴你不要過于考慮區域,可能由于沒有什么意義。但是使用區域定義很好的提高了HTML的結構,上面我們已經很好的介紹了。

個 人認為,Section不但對于優化document結構來說有好處,而且最終會讓整個DOM趨于合理。而同時對于我們來說需要去適應這種變化,需要我們 自己去優化和改變自己的開發流程和習慣,但是我相信對于web開發的趨勢和方向來說,最終會使得整個流程更加專業和標準化。對于變化應該值得。

via gbtags

來源:HTML5/CSS3系列教程:HTML5 區域(Sectioning)的重要性

轉載于:https://www.cnblogs.com/gbin1/archive/2013/02/04/2891728.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260042.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CoreAnimation —— CAReplicatorLayer(拷貝圖層)

2019獨角獸企業重金招聘Python工程師標準>>> CAReplicatorLayer是一個layer容器&#xff0c;會對其中的subLayer進行一些差異處理&#xff08;它的子layer都可以拷貝&#xff09; 屬性&#xff1a; //拷貝的次數 property NSInteger instanceCount; //是否開啟景深效…

c語言用數組寫密碼程序,想程序高手求助--用C語言來編輯一個輸入密碼的程序...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓/*--------實現密碼的隱式輸入-----------------*/inputpw(char *password,int len) /*len為密碼長度*/{int i0; /*密碼數組索引值,同時也表示記錄已顯示*的數目*/char ch;fflush(stdin); /*清洗流&#xff0c;以防妨礙密碼正確輸入…

ps流 轉發_RTP協議全解析(H264碼流和PS流)(轉)

&lbrack;LeetCode&rsqb; Arranging Coins 排列硬幣You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...使用Jenkins可持續集成maven項目首先下載最新的Jenkins的war包,放在tomcat的webapps的目錄下,然后運行,例…

android 接收短信代碼,短信接收功能實現的代碼

其中包含了widget必備的要素以及對應文件分別為&#xff1a;appwidgetprovider--------------------------SmsWidget.javawidget的config--------------------------SmsWidgetConfig.javawidget引發的app-------------------------SmsAider.javaappwidgetproviderinfo---------…

使用MeanJS Yeoman Generator

1、首先全局安裝該生成器 sudo npm install -g generator-meanjs 2、為項目創建一個路徑 mkdir xmen && cd xmen 3、創建app yo meanjs 根據提示&#xff0c;輸入應用名&#xff0c;描述&#xff0c;關鍵詞&#xff0c;是否創建crud例子。。 4、運行app sudo NODE_ENVd…

Entity Framework With Oracle

雖然EF6都快要出來了&#xff0c;但是對于Oracle數據庫&#xff0c;仍然只能用DB first和Model First來編程&#xff0c;不能用Code First真是一個很大的遺憾啊。 好了&#xff0c;廢話少說&#xff0c;我們來看看EF中是如何用DB first和Model First來對Oracle編程的。 首先我們…

(三)Maven倉庫介紹與本地倉庫配置

1.Maven本地倉庫/遠程倉庫的基本介紹 示意圖&#xff1a; 本地倉庫是指存在于我們本機的倉庫&#xff0c;在我們加入依賴時候&#xff0c;首先會跑到我們的本地倉庫去找&#xff0c;如果找不到則會跑到遠程倉庫中去找。對于依賴的包大家可以從這個地址進行搜索&#xff1a;http…

大數據時代下的遷移學習_繼深度學習后,下一個熱點技術是遷移學習

最早提出大數據時代到來的是知名咨詢公司麥肯錫&#xff0c;麥肯錫稱&#xff1a;“數據&#xff0c;已經滲透到當今每一個行業和業務職能領域&#xff0c;成為重要的生產因素。人們對于海量數據的挖掘和運用&#xff0c;預示著新一波生產率增長和消費者盈余浪潮的到來。”其實…

手機廣告投放(phone advertising)唯一標識

手機標示&#xff0c;為了識別用戶&#xff0c;方面advertising。 使用設備id&#xff0c;相當于暴露用戶隱私。慢慢已不允許使用。、 &#xff08;長時間跟蹤用戶無異于暴露用戶隱私&#xff0c;雖然大量數據適合興趣建模&#xff0c;廣告個性化推薦。但復雜多樣會降低總體的準…

android分辨率比例成像,像素不是唯一 決定成像效果你必知的真相

像素并不是唯一如今不少人在選購一部手機時&#xff0c;非常重視手機攝像頭的像素大小&#xff0c;因為一部高像素的手機可以為不少喜愛拍照的人省去買單反的費用&#xff0c;而且攜帶起來也非常方便。不過&#xff0c;手機并不能與專業的單反相機相比&#xff0c;成像效果并不…

vim——打開多個文件、同時顯示多個文件、在文件之間切換

打開多個文件&#xff1a; 1.vim還沒有啟動的時候&#xff1a; 在終端里輸入 vim file1 file2 ... filen便可以打開所有想要打開的文件 2.vim已經啟動 輸入 :open file 可以再打開一個文件&#xff0c;并且此時vim里會顯示出file文件的內容。 同時顯示多個文件&#xff1a; :s…

Android底部導航欄實現(一)之BottomNavigationBar

BottomNavigationBar這個控件的使用之前已經寫過&#xff0c;這里不再贅述&#xff0c;詳情請參考BottomNavigationBar的使用。 下面直接上代碼&#xff1a; 初始化及相關設置&#xff1a; mBottomNavigationBar (BottomNavigationBar) view.findViewById(R.id.bottom_navigat…

jq 組裝數組_Jquery 數組操作

1、數組的創建var arrayObj new Array(); //創建一個數組var arrayObj new Array([size]); //創建一個數組并指定長度&#xff0c;注意不是上限&#xff0c;是長度var arrayObj new Array([element0[, element1[, ...[, elementN]]]]); 創建一個數組并賦值要說明的是&…

android 官方說明文檔,Android官方文檔翻譯-Accessibility

標簽元素向用戶提供解釋每個可互動元素的意義和目的有用且形象的標簽是非常重要的。這些標簽允許屏幕閱讀者(比如 TalkBack )正確向用戶解釋每個控制器的功能。你可以使用一下兩個方法提供元素的標簽&#xff1a;當展示在 Activity 的整個生命周期中都不會改變樣式的靜態元素時…

USACO 2.4.1 The Tamworth Two

牛和農夫按照固定的走法在10x10的地圖中走&#xff0c;每分鐘走一步&#xff0c;求經過幾分鐘相遇。永遠不能相遇輸出0. 純模擬的題。 判斷永遠不能相遇的方法是如果遇到了一個先前的狀態&#xff0c;那么肯定存在循環&#xff0c;必定不能相遇。 程序中把狀態表示為牛和農夫的…

013,spring boot下JedisCluster客戶端的配置,連接Redis集群

2019獨角獸企業重金招聘Python工程師標準>>> 1&#xff0c;pom依賴添加&#xff1a; <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <type>jar</typ…

android控件使用大全,Android常見控件使用詳解

本文實例為大家分享了六種Android常見控件的使用方法&#xff0c;供大家參考&#xff0c;具體內容如下1、TextView 主要用于界面上顯示一段文本信息2、Button 用于和用戶交互的一個按鈕控件//為Button點擊事件注冊一個監聽器public class Click extends Activity{private Butto…

Ubuntu 12.10使用apt安裝Oracle/Sun JDK

Ubuntu 12.10使用apt安裝Oracle/Sun JDK apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java6-installerposted on 2014-09-05 13:30 fastdream 閱讀(...) 評論(...) 編輯 收藏 …

Afterthought 原來是這樣的啊。。。。

$(ProjectDir)Libs\Afterthought\Afterthought.Amender.exe "$(TargetPath)" "$(TargetDir)EntityFramework.Patterns.dll" 我實際上分析代碼好久&#xff0c;也沒整明白它是怎么運行的&#xff0c;看一下官方文檔明白了&#xff0c;原來。。。 Next, add …

查詢

增加文本1. create database test刪除文本2. drop database test3. create table info( code int primary key, name varchar(20) not null)auto_increment 自增長列foreign key(列名) references 主表名(列名) 外鍵關系4. drop table infoCRUD:增加語法1.insert into 表…