HTML5标签使用的常见误区
2021年1月10日 | by tgcode
最近组内进行HTML5标签的学习,方法呢就是大家每人挑选几个标签,自己先去学习,然后给大家作讲解。这个过程大家还是挺有收获的。但是现在HTML5还处在草案阶段,有些新的标签元素的解释也是经常有变化,甚至标签加入/移出也很频繁(比如 hgroup),同时现有的大的门户网站在使用HTML5方面也没有很好的范例可以参考,让大家的学习过程更摸索。下面是我在 html5doctor 上面看到的一篇文章,在目前大家懵懂的阶段,可能看看大师的讲解会更容易理解。由于才疏学浅,很多不明白的地方可能只是做了字面上的翻译,不对的地方还请大家多多指教。
下面附上原文地址:Avoiding common HTML5 mistakes,作者 :Richard Clark,有疑问的地方大家可以核对英文。
在这篇文章中,我将给大家分享HTML5构建页面的小错误和不好的实践方法,让我们在以后的工作中避免这些错误。
不要把
当成简单的容器来定义样式
我们经常看到的一个错误,就是武断的将
div id=”wrapper”>
div id=”header”>
h1>My super duper pageh1>
<!– Header content –>
div>
div id=”main”>
<!– Page content –>
div>
div id=”secondary”>
<!– Secondary content –>
div>
div id=”footer”>
<!– Footer content –>
div>
div>
现在我看到了下面的代码样子:
section id=”wrapper”>
header>
h1>My super duper pageh1>
<!– Header content –>
header>
section id=”main”>
<!– Page content –>
section>
section id=”secondary”>
<!– Secondary content –>
section>
footer>
<!– Footer content –>
footer>
section>
直观的看,上面的例子是错误的:
记住这点,这里我们重新修正了上面的例子,通过使用两个新角色。(你是否需要额外的
header>
h1>My super duper pageh1>
<!– Header content –>
header>
div role=”main”>
<!– Page content –>
div>
aside role=”complementary”>
<!– Secondary content –>
aside>
footer>
<!– Footer content –>
footer>
body>
如果你还是无法确定哪一个元素更适合使用,我建议你去查看HTML5 sectioning content element flowchart来让你继续前行。
只在需要的时候使用
和
标签
使用标记的时候写入了一些并不需要的现象这是不合理的。不幸的是,经常发现大家在并不需要的地方使用
-
元素通常是通常作为一组解释或者导航辅助工具,通常包含section的标题. -
元素会将当有副标题子标题,各类标识文字时,对
到
标题进行群组,将其作为section的标题.
过度使用的
你肯定知道,在一个文档中,可以使用多次
article>
header>
h1>My best blog posth1>
header>
<!– Article content –>
article>
如果你的
h1>My best blog posth1>
<!– Article content –>
article>
不合理使用
在标题的这个主题上,经常看到使用
的错误案例。在下面这种情况下你不能将- 这里只有一个标题,
- 或者
本身就够了(比如:不需要 )
第一种情形看上去是下面的样子:
header>
hgroup>
h1>My best blog posth1>
hgroup>
p>by Rich Clarkp>
header>
这种情况下,将
移除,只保留标题就好.h1>My best blog posth1>
p>by Rich Clarkp>
header>
第二种情况也是包含了他们并不需要的标签.
header>
hgroup>
h1>My companyh1>
h2>Established 1893h2>
hgroup>
header>
当
h1>My companyh1>
h2>Established 1893h2>
hgroup>
不要将所有的链接列表都放到
在HTML5新增的30个元素中(在我们写这篇文章的时候),我们在构建更具语义结构化的标签的时候,我们的选择变得太丰富。也就是说我们对现在给我们提供的这些超级有语义的标签,我们可能会滥用。
The nav element represents a section of a page that links to other pages or to parts within the page: a section with navigation links.
Note: Not all groups of links on a page need to be in a nav element — the element is primarily intended for sections that consist of major navigation blocks. In particular, it is common for footers to have a short list of links to various pages of a site, such as the terms of service, the home page, and a copyright page. The footer element alone is sufficient for such cases; while a nav element can be used in such cases, it is usually unnecessary.
WHATWG HTML spec
这里面的关键词是”重要”导航。我们可能会对”重要”有不同的定义,但是我的理解是:
- 主要导航
- 网站搜索
- 二级导航(这个能是有争议的)
- 页面内链接(比如一篇很长的文章)
虽然并没有对错之分,但根据我的理解和一个民意投票让我觉得在下面这些情形下,我不会使用
如果你不能确定是否使用
- 如果用
和标题标签能够解决你的问题,那就不要去使用 - 你是不是为了增加可访问性而增加的一个快捷跳转链接呢?
如果上面的回答都是“不”,那可能就不适合使用
并不是所有的图片都是figure(注:比较难理解阿,image=图片,figure=图形)
之前,我曾经说过不要写那些不需要的标签。这个错误也是相同的。我经常看到一个网站上的每张图片都有
在规范中关于
如果仅仅是一张表现类的图片而且和文档中其他的内容没有关系的话,那就不需要使用
你的标志不是一个
将上面的延伸开来,对你的logo也是这样。下面是两组我找到的有规律的代码片断:
header>
h1>
figure>
img src=”/img/mylogo.png” alt=”My company” class=”hide”/>
figure>
My company name
h1>
header>
<!– Don’t copy this code! It’s wrong! –>
header>
figure>
img src=”/img/mylogo.png” alt=”My ctgcodeompany”/>
figure>
header>
这里就不需要说啥了,这是很明显的错误,可能你认为我们说的是不是将logo放在H1标签里面,但是我们在这里并不讨论这个问题。让我们迷惑的是
h1>My company nameh1>
<!– More stuff in here –>
header>
figure只能用在标签上的误解
另一个对
这里有一篇更深入讲解
,很值得阅读的。不要去使用那些不必要的type属性
这可能是我们最常见的一些问题,它们并不是真正的错误,但我觉得我们的最好实践还是尽量避免这种模式。
在HTML5中,我们并不需要给和增加 type 属性,如果这些从CMS默认添加的内容中移出是很痛苦的事情,那当你手工编码的时候还写入它们或者你能完全的控制你的模板时候你完全可以删掉它们。因为所有的浏览器都会将解析成Javascript和标签是CSS,你不再需要那个type属性了:
link type=”text/css” rel=”stylesheet” href=”css/styles.css”/>
script type=”text/javascript” src=”js/scripts.js”>script>
现在我们可以写成下面的样子:
script src=”js/scripts.js”>script>
你也能够对编码的设置作出省略。Mark Pilgrim在Dive into HTML5的语义化一章中作出了解释。
不要包含错误的表单属性
你可能发现引入了很多新的表单属性。现在我就给大家讲讲一些不合适的使用。
布尔值属性
新引入的标签属性有几个是布尔类型的,它们的标签行为基本接近。这些属性tgcode包括:
- autofocus
- autocomplete
- required
坦白的说,下面的这种情况对我来说并不常见,但我们从 required 作为例子,如下:
input type=”email” name=”email” required=”true”/>
<!– Another bad example –>
input type=”email” name=”email” required=”1″/>
基本上看,这段代码并不会带来危害。客户端对 HTML的解析遇到 required 标签属性时,他的功能就会生效。但是当我们将代码修改,录入 required=”false” 的情况呢?
input type=”email” name=”email” required=”false”/>
解析的时候依然会遇到 required 属性,虽然你希望加入的行为是“假”,它依然会被解析成“真”。
这里有三种合理的方法让布尔值生效。(第二种和第三种方案只有你在写 XHTML 解析的时候需要)
我们上面的例子可以写成下面的样子:
总结
对我来说,我无法将所有蹩脚的代码模式都展示在这里,但是上面说的这些都是我们经常遇到的。
googletag.cmd.push(function () { googletag.display(‘div-gpt-ad-1523859565477-1’); });
googletag.cmd.push(function () { googletag.display(‘div-gpt-ad-1523859565477-2’); });