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.mzph.cn/news/260042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CoreAnimation —— CAReplicatorLayer(拷贝图层)

2019独角兽企业重金招聘Python工程师标准>>> CAReplicatorLayer是一个layer容器&#xff0c;会对其中的subLayer进行一些差异处理&#xff08;它的子layer都可以拷贝&#xff09; 属性&#xff1a; //拷贝的次数 property NSInteger instanceCount; //是否开启景深效…

android 接收短信代码,短信接收功能实现的代码

其中包含了widget必备的要素以及对应文件分别为&#xff1a;appwidgetprovider--------------------------SmsWidget.javawidget的config--------------------------SmsWidgetConfig.javawidget引发的app-------------------------SmsAider.javaappwidgetproviderinfo---------…

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…

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

像素并不是唯一如今不少人在选购一部手机时&#xff0c;非常重视手机摄像头的像素大小&#xff0c;因为一部高像素的手机可以为不少喜爱拍照的人省去买单反的费用&#xff0c;而且携带起来也非常方便。不过&#xff0c;手机并不能与专业的单反相机相比&#xff0c;成像效果并不…

Android底部导航栏实现(一)之BottomNavigationBar

BottomNavigationBar这个控件的使用之前已经写过&#xff0c;这里不再赘述&#xff0c;详情请参考BottomNavigationBar的使用。 下面直接上代码&#xff1a; 初始化及相关设置&#xff1a; mBottomNavigationBar (BottomNavigationBar) view.findViewById(R.id.bottom_navigat…

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…

Afterthought 原来是这样的啊。。。。

$(ProjectDir)Libs\Afterthought\Afterthought.Amender.exe "$(TargetPath)" "$(TargetDir)EntityFramework.Patterns.dll" 我实际上分析代码好久&#xff0c;也没整明白它是怎么运行的&#xff0c;看一下官方文档明白了&#xff0c;原来。。。 Next, add …

POJ 1228 —— “稳定”凸包

POJ 1228 Grandpas Estate 这是个好题目&#xff0c;同时也是个不和谐的题目&#xff08;不和谐原因是题目出的存在漏洞&#xff0c;数据弱&#xff0c;而且有些条件没给清楚&#xff0c;为了一个SB错误无限WA之后&#xff0c;终于AC&#xff09; 题意就废了我好长时间&#xf…

在Application_Error事件中获取当前的Action和Control

ASP.NET MVC程序处理异常时&#xff0c;方法有很多&#xff0c;网上也有列举了6种&#xff0c;下面是使用全局处理在Global.asax文件的Application_Error事件中实现。既然是ASP.NET MVC,我需要捕捉到Controller和Action名称。怎样实现可以参考下面代码&#xff1a; 程序运行结果…

1.关于浏览器

一、认识主流浏览器 Chrome谷歌浏览器Safari苹果浏览器Firefox火狐浏览器Opera欧朋浏览器 二、浏览器内核是什么&#xff1f; 三、五大浏览器&#xff0c;四大内核 四、前端做网页开发用什么浏览器&#xff1f; Chrome谷歌浏览器。

实时数据交换平台 - BottledWater-pg with confluent

标签 PostgreSQL , Bottled Water , Kafka , Confluent , IoT 背景 想必大家都在图书馆借过书&#xff0c;小时候有好看的书也会在小伙伴之间传阅。 借书和数据泵有点类似&#xff0c;一份数据通过数据泵实时的分享给订阅者。 例如在IoT的场景中&#xff0c;有流式分析的需求&a…

asp.net缓存(二)

ASP.NET页面局部缓存 有时缓存整个页面是不现实的&#xff0c;因为页的某些部分可能在每次请求时都需要变化。在这些情况下&#xff0c;只能缓存页的一部分。顾名思义&#xff0c;页面部分缓存是将页面部分内容保存在内存中以便响应用户请求&#xff0c;而页面其他部分内容则为…

(七)Maven使用的最佳实践

这里说一下在使用Maven过程中不是必须的&#xff0c;但十分有用的几个实践&#xff0c;关键时刻或许能解决您的问题。 1.设置MAVEN_OPTS环境变量 通常需要设置MAVEN_OPTS的值为-Xms128m -Xmx512m&#xff0c;因为Java默认的最大可用内存往往不能够满足Maven运行的需要&#xff…

android beam传输速率,无线网络的速率为何不能达到最大值

1、无线速率可以达到最大值&#xff0c;只是发送速率和传输流量是两个概念&#xff0c;通俗点讲&#xff0c;无线的发送速率是把信号以指定速率发出去(信号好的时候以高速率发&#xff0c;信号差的时候以低速率发)。传输流量是指单位时间内传输的数据量&#xff0c;大部分用户关…

【SMTP 补录 Apache服务】

【补录&#xff0c;续】1.【配置空壳邮件接受】【mta】【前置&#xff1a;在/etc/named.rfc1912.zones 添加一个可以接受邮件的域hxl.org&#xff08;与你数据库中写的向对应&#xff09;,这个域的所在ip就是你机子的&#xff0c;因为要从你的机子转发】 【配置该机的vim/etc/…

开启chrome默认支持ipv6

在快捷方式后面的属性后面输入 --enable-ipv6 以下为转载&#xff1a; [转载]chrome开启或关闭IPV6方法 (2012-05-27 17:54:06) 转载▼ 标签&#xff1a; 转载 分类&#xff1a; 技术 原文地址&#xff1a;chrome开启或关闭IPV6方法作者&#xff1a;余鲲涛 chrome和firefox都是…

ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗

iqoo neo3在不高的价格上还保证了自己的品质&#xff0c;有很高的性能&#xff0c;很不错的屏幕。那么这款手机可以支持无线充电吗&#xff1f;小编为大家介绍关于iqoo neo3的充电方面。1.iqoo neo3可以支持无线充电吗iQOO Neo3 配备了 44W 超级闪充&#xff0c;属于小刀&#…