互联网已经存在很长时间了,随着时间的推移,我们改变了对网页设计的思考方式。许多旧技术和做事方法随着更新、更好的替代方案的出现而逐渐淘汰,我们说它们已经被弃用了。
弃用。这是一个我们经常使用和看到的词。但是您是否停下来思考它在实践中的含义?一些弃用的网页元素的例子是什么,为什么我们不再使用它们了?
什么是弃用?
在日常英语中,“弃用”某事就是表示对其不赞成。例如,您可能会倾向于弃用您不喜欢的一条新闻。
然而,当我们在技术意义上讲话时,弃用是指不鼓励使用旧功能。通常,为了向后兼容性(以便旧项目不会中断),旧功能仍然可以正常使用。从本质上讲,这意味着您仍然可以在技术上以旧方式做事。它可能仍然有效,但也许使用新方法更好。
另一种常见情况是,技术元素被弃用作为未来移除的先兆(我们有时将其称为“日落”功能)。这给了每个人时间从旧的工作方式过渡到新系统,然后再进行过渡。如果您关注 WordPress,他们最近对他们全新的Gutenberg 编辑器做了这样的事情。他们发布了它,但保留了恢复到“经典”编辑器的选项,以便用户有时间过渡。有一天,“经典”编辑器可能会被删除,只剩下 Gutenberg 作为编辑帖子的唯一选项。换句话说,WordPress 正在淘汰“经典”编辑器。
这只是一个例子。我们还可以看看曾经是基本要素但后来在某个时间点被弃用的 HTML 功能。
为什么 HTML 元素会被弃用?
多年来,我们对 HTML 的思考方式已经发生了变化。最初,它是一种用于在线显示和设置内容的通用标记语言。
随着时间的推移,随着外部样式表越来越流行,开始更有意义地以不同的方式思考 Web 开发——将关注点分离,其中 HTML 定义页面的内容,而 CSS 处理页面的表示。
这种样式和内容的分离带来了许多好处
- 避免重复:当您可以在一个 CSS 类中一次处理所有这些时,在页面上重复红色文本的每个实例的代码既笨拙又效率低下。
- 易于管理:使用集中式样式表控制所有表示形式,您可以轻松地进行全站更改。
- 可读性:在查看网站的源代码时,理解已被整齐地抽象到内容和样式的单独文件中的代码要容易得多。
- 缓存:绝大多数网站在所有页面上都具有一致的样式,那么为什么还要让浏览器一遍又一遍地下载这些样式定义呢?将表示代码放在专用的样式表中,可以进行缓存和重复使用以节省带宽。
- 开发人员专业化:大型网站项目可能有多个设计师和开发人员在上面工作,每个人都有自己的专业领域。让 CSS 专家在他们自己的单独文件中处理项目的一部分,这对所有参与者来说都可能更容易。
- 用户选项:将样式与内容分离,开发人员可以轻松地为最终用户提供显示选项(越来越流行的“夜间模式”就是一个很好的例子),或者提供不同的显示模式以实现可访问性。
- 响应性和设备独立性:将内容和视觉表示的代码分离,可以更容易地构建在不同屏幕分辨率下以非常不同的方式显示的网站。
但是,在 HTML 的早期,有相当一部分标记旨在控制页面的外观,与内容并排。您可能会看到这样的代码:
<center><font face="verdana" color="#2400D3">Hello world!</font></center>
…所有这些现在都已弃用,因为上述关注点分离。
哪些 HTML 元素现在已弃用?
从 HTML5 发布开始,不鼓励使用以下元素
<acronym>
(使用<abbr>
代替)<applet>
(使用<object>
)<basefont>
(使用 CSS 字体属性,如font-size
、font-family
等)<big>
(使用 CSSfont-size
)<center>
(使用 CSStext-align
)<dir>
(使用<ul>
)<font>
(使用 CSS 字体属性)<frame>
(使用<iframe>
)<frameset>
(不再需要)<isindex>
(不再需要)<noframes>
(不再需要)<s>
(在 CSS 中使用text-decoration: line-through
)<strike>
(在 CSS 中使用text-decoration: line-through
)<tt>
(使用<code>
)
还有一个很长的弃用属性列表,包括许多仍然有效的元素(例如align
属性,许多元素都使用它)。W3C 有完整的弃用属性列表。
为什么我们不再使用表格进行布局?
在 CSS 普及之前,网站布局通常使用<table>
元素构建。虽然<table>
元素没有被弃用,但强烈建议不要使用它们进行布局。事实上,几乎所有用于布局的 HTML 表格属性都被弃用了,例如cellpadding
、bgcolor
和width
。
有一段时间,表格似乎是网页布局的不错方法。我们可以根据需要制作任意大小的行和列,这意味着我们可以把所有东西都放在里面。标题、导航、页脚……应有尽有!
这将创建许多看起来像这样的网站代码
<table border="0" cellpadding="0" cellspacing="0" width="720">
<tr>
<td colspan="10"><img name="logobar" src="logobar.jpg" width="720" height="69" border="0" alt="Logo"></td>
</tr>
<tr>
<td rowspan="2" colspan="5"><img name="something" src="something.jpg" width="495" height="19" border="0" alt="A picture of something"></td>
<td>Blah blah blah!</td>
<td colspan="3">
<tr>
<!-- and so on -->
</table>
这种方法有很多问题
- 复杂的布局经常会导致表格嵌套在其他表格中,这会造成令人头疼的代码混乱。看看任何电子邮件通讯的源代码就行了。
- 可访问性存在问题,因为屏幕阅读器往往会被过度使用表格弄糊涂。
- 表格渲染速度很慢,因为浏览器会等待整个表格下载完毕,然后再将其显示在屏幕上。
- 使用基于表格的布局很难创建响应式和移动友好的布局。我们还没有找到响应式表格的万能药(尽管存在许多巧妙的想法)。
继续将内容与表示分离的主题,CSS 是创建视觉布局而不使主要 HTML 文档代码混乱的更有效方法。
那么,我们什么时候应该使用<table>?当然是实际的表格数据!如果您需要显示棒球比分、统计数据或任何其他类似的内容,<table> 就是您的朋友。
为什么我们仍然使用<b>和<i>标签?
“等等,”你可能会说。“为什么粗体和斜体 HTML 标签仍然被认为是 OK?那些不应该是用 CSS 处理的视觉样式吗?”
这是一个好问题,当我们考虑到像<center>
和<s>
这样的其他标签被弃用时,这个问题似乎很难回答。这是怎么回事?
简短的答案是,<b>
和<i>
可能已经被弃用了,如果不是它们如此广泛和有用的话。相比之下,CSS 替代方案似乎有点笨拙
<style>
.emphasis { font-weight:bold }
</style>
This is a <span class="emphasis">bold</span> word!
This is a <span style="font-weight:bold">bold</span> word!
This is a <b>bold</b> word!
长答案是,这些标签现在已被赋予了一些语义含义,使其价值超越纯粹的视觉表现,并允许设计师使用它们来传达有关它们所包含文本的更多信息。
这一点很重要,因为它可以帮助屏幕阅读器和搜索爬虫更好地理解包装在这些标签中的内容的目的。我们可能会出于多种原因将一个词用斜体表示,例如强调、引用创意作品的标题、引用科学名称等等。屏幕阅读器如何知道是否要在单词上放置语音强调?
<b>
和<i>
有伴侣,包括<strong>
、<em>
和<cite>
。这些标签一起使文本的含义上下文更加清晰
<b>
用于吸引用户注意文本,但不会赋予文本任何额外的重要性。当我们希望引起注意但又不想改变文本在屏幕阅读器中的语调或为搜索引擎添加额外权重或意义时,就会使用它。<strong>
与<b>
很像,但它会突出显示内容的重要性。就像我们在强调某个词语时改变语调一样。<i>
会使文本倾斜,但不会赋予任何额外的意义或强调。它非常适合用来写出通常需要倾斜的文本,例如动物的学名。<em>
与<i>
类似,它也会使文本倾斜,但它还会提供额外的强调(因此标签名称),而不会在上下文中增加更多重要性。(“我 *肯定* 没忘记给猫喂食”)。<cite>
用于引用创意作品的标题,例如像《沉默的羔羊》这样的电影。这样,文本的样式会改变,但不会影响句子被朗读的方式。
一般来说,规则是 <b>
和 <i>
只能在找不到更合适的元素时作为最后手段使用。这种语义意义允许 <b>
和 <i>
在我们现代的 HTML 元素中继续存在,并避免其他类似样式标签的废弃命运。
相关的是,<u>
(下划线标签)曾一度被废弃,但后来在 HTML5 中恢复了,因为它有一些语义用途(例如标注拼写错误)。
还有许多其他 HTML 元素可能会对内容进行样式化,但主要目的是为内容提供语义意义。Mandy Michael 有一篇优秀的文章介绍了这些元素以及它们如何使用(甚至可以组合!)来实现最语义化的标记。
不死 HTML 属性
一些被废弃的元素仍然在当今的网络中被广泛使用。毕竟,它们仍然 *起作用*,只是不再被鼓励使用。
有时是因为人们不知道自己一直使用的这些东西实际上已经过时了。而其他时候,则是由于一些人没有看到从当前有效的方法中改变的理由。例如,CSS-Tricks 仍然使用电传打字元素,原因就是如此。
其中一个不死 HTML 遗留物是 align 属性,它存在于其他有效的标签中,尤其是在图像中。你可能会看到带有 border 属性的 <img>
标签,尽管该属性早已被废弃。当然,CSS 是这种样式呈现的首选方法,也是现代方法。
对于任何 Web 开发人员来说,紧跟废弃信息至关重要。确保代码遵循当前的建议,避免使用遗留元素是必不可少的最佳实践。这不仅可以确保网站在长期内能够继续运行,还可以确保它与未来的网络良好兼容。
有疑问?请在评论区留言!你也可以在我在 Angle Studios 工作的地方找到我。
也许
<del>
标签可以作为<s>
和<strike>
的现代替代方案?它还提供更多意义,以及<citation>
和<datetime>
属性。https://mdn.org.cn/en-US/docs/Web/HTML/Element/del
它们具有不同的含义。
<ins>
和<del>
元素表示文档的 *编辑* (https://html.whatwg.com.cn/multipage/edits.html#edits)。但是,在某些情况下,需要输出“旧”信息以及不是编辑的“新”信息(例如,折扣价附近的原价)。对于这些情况,<del>
元素将不合适。使用
<del>
代替<strike>
怎么样?<i>
标签现在用于图标。它确实被用于图标,因为它以前缺乏语义意义,但现在已经改变了。它用于表示需要在视觉上与其他内容区分开来的内容,以提高可读性。
https://mdn.org.cn/en-US/docs/Web/HTML/Element/i
虽然我相信大多数 CSS Tricks 的常客都知道这一点,但可能值得一提的是,
<i>
现在经常(错误地?)用于图标字体。另外,还有其他人认为用
<abbr>
替换<acronym>
有点奇怪吗?我想知道此举背后的语义理由是什么(或者它是不是一个内部笑话?)。确实有点奇怪。我想知道术语“缩略词”是否过于具体,而转向“缩写”是否为更多缩短内容的可能性打开了语义。
为什么有些 CSS 属性不会被废弃?
我认为,更准确的说法是半废弃。例如,电子邮件的 HTML 部分怎么办?
感谢这篇博文。我认为文章中讨论的很多问题在 15 年前就已经被讨论过了,当时老一辈的 Web 开发人员正在采用新的 WC 建议。这就是为什么我在 2003 年开始在我的所有 Web 项目中使用“strong”而不是“b”,并抛弃了您提到的所有其他元素。现在是 2020 年,我们又重新发现了这些旧元素的语义目的?遗憾的是,这就是技术的诅咒……我们没有阅读或学习老一辈科技人员的发现,因此只能一遍又一遍地重新发现它们。这正是 HTML5 倒退的原因,因为 XHTML 1.1 正在将我们带入一个更干净、可重复利用的 Web,在这个 Web 中我们可以编写自己的元素。这已经被废弃了,因此孩子们可以回到 HTML4 的概念和 ECMAScripted API。我认为,我们注定要重复同样的错误,这使得显示一个简单的 HTML 页面变得比 20 年前复杂得多。
XHTML1.x 并没有将我们带往任何地方。它基本上只是将相同的 HTML4 语义重新表述为 XML 语法,而 XML 的潜在优势并没有真正适用于 Web,因为 Web(现在仍然如此)是一个不可预测的环境,其中 XML 的格式良好性可能由于各种原因而被破坏,从网络中断到第三方软件干预(例如,一些个人防火墙用于用不兼容 XML 的 HTML 注释替换广告横幅)。用自定义的 doctype 替换 XHTML1.x doctype(定义自定义元素等),会自动将其转换为自定义 XML 应用程序,而不是 XHTML1. 另一方面,你实际上可以现在在 HTML5 中定义你自己的自定义元素:)。
WHATWG Living Standard 和 W3C HTML5.2 Recommendation(在 W3C 放弃维护其自己的 HTML 标准分支之前的最后一个版本)都将
<s>
元素列为活动文本级元素,并且没有提到它被废弃。它是不是文章中错误出现了?元素没有被废弃。https://html.whatwg.com.cn/multipage/text-level-semantics.html#the-s-element
<b>
用于吸引用户注意文本,但不会赋予文本任何额外的重要性。它用于在不改变文本在屏幕阅读器中的语调或为搜索引擎添加额外权重或意义的情况下引起注意。”那么为什么你要吸引用户的注意?它有什么意义?以及……为什么屏幕阅读器用户不应该知道你正在吸引他们的注意?
如果只有
<strong>
元素对大多数实际的屏幕阅读器有意义就好了…… https://www.brucelawson.co.uk/2018/screenreader-support-for-text-level-semantics/嗨
嗯,正如 Google 所说:
<b>
或<strong/>
可以使用,在 Google 排名方面没有区别 https://www.youtube.com/watch?v=awto_wCeOJ4所以,看起来它们的存在是因为它们在大多数 CMS 中得到了支持 :(
我很惊讶
<hr>
没有出现在这个列表中。