HTML 中的语义化始终是热门话题。 有些人始终追求它。 有些人批评对它的教条式坚持。 有些人不知道它到底是什么。
我会将语义化描述为与 HTML 相关的标签、类、ID 和属性,它们 **描述但不指定** 它们所包含的内容。 让我们从一个我们可能都同意的例子开始。
不好的语义化
<div class="article">
<div class="article_title">Smurf Movie Kinda Sucks</div>
<div class="the_content">Not surprisingly, this weeks release of
<div class="darkbold">The Smurfs</div> kinda sucks.</div>
</div>
好的语义化
<article>
<h1>Smurf Movie Kinda Sucks</h1>
<p>Not surprisingly, this weeks release of
<b>The Smurfs</b> kinda sucks.</p>
</article>
无论您是否认为 HTML5 已准备好使用,我认为您会同意,当您需要一个 HTML 元素来表示文章时,<article>
标签比具有类名的通用 <div>
更好。 文章的标题变为标题,内容变为段落,粗体但非强调的标题变为粗体标签。
但并非所有内容都能如此干净地映射到 HTML 标签。 让我们看一些类名,我会提供我对它是否语义化的看法。
<div class="column_1"></div>
**非语义化。** 这是一个经典的例子。 世界上所有 CSS 网格框架都使用某种类名来声明网格。 无论是“yui-b”、“grid-4”还是“spanHalf”,所有这些都更接近于指定而不是描述它们的内容。 所以,虽然我坚持认为这些是非语义化类名,但我认为它们在基于浮动的网格系统布局中基本上是不可避免的。
<div class="footer"></div>
**语义化。** 虽然页脚是一个抽象的概念,但在网页设计中已经有了自己的含义。 它是网站的底部,通常包含重复的导航、版权、作者信息等。 此类名声明了所有这些内容的组,而不会描述它。
如果您已经转向 HTML5,<footer>
元素将是更好的选择。 这也适用于所有 HTML5 元素。(标题应该是 <header>
,侧边栏应该是 <aside>
等等)如果您还没有使用 HTML5(您最好有一个非常令人信服的理由),我认为等效的类名是可以接受的。
<div class="largeText"></div>
**非语义化。** 这是在指定。 为什么文本应该更大? 为了从其他较小的文本中脱颖而出? “standOut” 或 “callout_text” 在这里可能更好,就像在理论上的重新设计未来中,您可能希望选择不同的样式来突出显示该文本,而与文本的大小无关,并且您不会被尴尬的类名困扰。
<div class="priority-2"></div>
**语义化。** 我与来自 MailChimp 的一些人 (Jason Beaird 和 Aarron Walter) 讨论过这个问题,这就是他们在应用程序中声明按钮的相对重要性级别的方式(尽管类名更像是“p1” .. “p5”)。 优先级较高的按钮可能具有更明亮的颜色或更大,而优先级较低的按钮可能与内容更融合。 通过不具体说明这些样式是什么,并抽象到优先级级别,您就可以保持语义化。 这就像将 <h1>
、<h2>
、<h3>
等等的想法应用到按钮上。
<div class="copyright"></div>
**语义化。** 如果每个类名都这么容易就好了! 这适用于任何包含内容的区域,这些内容很容易用一个词来描述,比如 “tweets”、“pagination” 或 “admin-bar”。 尽管对于最后一个,您最好将其称为“admin-nav”,因为在理论上的重新设计未来,这个区域可能不再是“bar”了。
<p class="introp"></p>
**非语义化。** 我有一次看到 Dave Rupert 的一个演示,他开玩笑说这是他最喜欢的类名。 我完全能理解,因为它是一个非常常见的场景,即以不同的方式为页面的第一个段落设置样式,比如一个引人注目的概述,让用户进入文章。
如果您绝对需要超级深度的浏览器支持,您可能需要某种类名,在这种情况下,我认为“intro”比“introp”更好(不要在其中包含元素名称)。 但是,更好的方法是直接针对第一个段落,比如 article p:first-of-type
或 h1 + p
。
<div class="clearfix"></div>
**非语义化。** 这是一个非常常见的类名,它使用一些技巧让元素包含其所有后代浮动而不是折叠。 但它与它包含的内容无关,因此不可避免地是非语义化的。 Dan Cederholm 建议使用更友好的类名“group”来实现这个目的(在他的书 Handcrafted CSS 中),我认为这仅仅将它带入了语义化的领域,因为这个包装器肯定包含多个其他元素,因此是一个组(描述而不指定)。
<div class="left"></div>
**非语义化。** 也许在理论上的重新设计未来,你会想把这些东西放在右边。 太具体了。
<div class="success"></div>
**语义化。** 我认为这个最适合与其他类名一起使用,这样其中一个描述内容,另一个描述该内容的状态。 比如“success message”,它可以包含一条消息,比如“您的文件已上传!”。 如果该消息是“上传文件时出现问题”,那么类名可以改为“fail message”,并具有相应的样式。
<div class="plain-jane"></div>
**非语义化。** 这是试图指定里面的内容应该以特定方式进行样式设置。 “plain-jane” 与“normal”或“regular”类似。 理想情况下,CSS 应该被编写得这样,您不需要“regular”样式的类名,这应该通过级联默认提供,而任何以不寻常的方式打破这一点的东西都会获得一个类。
<div class="entry-unrelated"></div>
**非语义化。** Readability 是一款用于重新格式化和保存网页以方便以后阅读的网络应用程序,它使用这个类名来指定您不想意外包含在文章的对话/保存中的任何网站元素。 我在这里说它是非语义化的原因是,它描述了它不是什么,而不是它是什么。 我希望除了类名之外,还有其他方法可以用于此目的。 就像链接的 rel=nofollow
,但针对内容。
<div class="hyphenate"></div>
**非语义化。** 试图指定里面的内容的行为,而不是描述它实际上是什么。
<a class="link" href="#"></a>
**非语义化。** 虽然链接是描述性的,而不是具体的,但仅仅是锚链接的性质就使其成为一个链接,因此没有必要。 如果类名试图将此链接与其他“普通”链接区分开来,请更详细地说明原因,例如“book-link”或(有争议的)“button”。
但是…
假设您的网站上有两种类型的文章,您想以不同的方式为它们设置样式。 电影评论将具有蓝色背景,突发新闻将具有红色背景和更大的文本。
以下是一种方法
<article class="movie-review">
...
</article>
<article class="breaking-news">
...
</article>
还有另一种方法
<article class="blueBg">
...
</article>
<article class="redBg bigText">
...
</article>
我敢打赌,如果我们进行民意调查,问人们他们认为哪个例子更语义化,第一个会获胜。 它符合本文中提出的要求:描述而不指定。 而第二个例子指定了(“blueBg”是一个应用蓝色背景的类名)。 假设理论上的重新设计未来不再是理论,而是正在进行中。 电影评论的设计现在具有绿色背景。 类名“blueBg”在那里相当笨拙。 而类名“movie-review”完全没问题,您只需更改属性/值来使用绿色背景即可。
这并不是说第一个例子总是更好。 假设浅蓝色在网站的很多地方都使用过。 也许它是页脚的某个特定部分和侧边栏框的特定背景颜色。 您最终可能会得到像这样的选择器
.movie-review,
footer > div:nth-of-type(2),
aside > div:nth-of-type(4) {
background: #c2fbff;
}
这很有效,因为您只声明了该颜色一次。 但它也是一个相当复杂、难以扫描、笨重的选择器。 更不用说这些不同的选择器可能需要唯一的样式,因此它们以后必须重复。 或者您采取另一种方法,只需将它们分开
.movie-review {
background: #c2fbff;
/* Plus other stuff */
}
footer > div:nth-of-type(2) {
background: #c2fbff;
/* Plus other stuff */
}
aside > div:nth-of-type(4) {
background: #c2fbff;
/* Plus other stuff */
}
这实际上可能会使您的 CSS 文件更井井有条(将网站的不同区域放在不同的部分),但代价是重复声明。 在 Nicole Sullivan 最近在 CSS Summit 上的演讲中,她指出了几家大公司在 CSS 文件中重复声明完全相同的颜色,次数高达数千次。 我想我们都同意这太疯狂了。 可能有各种解决方案,但其中之一可能是使用类似“blueBg”的类名来声明它一次,然后将应用该类名的负担放在 HTML 上,当您想要该设计时。 不过,您最好将其称为“mainBrandColor”或“secondaryFont”,以避免指定。 我理解,这就是 OOCSS。 为了更大的利益牺牲了一点语义化(大大减少资源)。
我很想听听您对这一切的看法。 我相信你们中许多人有其他例子,对什么是语义化或不是语义化有不同的看法,以及它是否重要。
哈哈哈! 我喜欢你从糟糕的例子中的“蓝精灵很糟糕”开始,然后继续到好的例子,他们仍然很糟糕。
我从未考虑过类“left”或“right”是否是语义化的,但我认为它不是。 我感觉我的世界正在崩塌…
我不确定电影评论/突发新闻的例子。例如,如果“突发新闻”变成“最新新闻”,原始类名就会变得令人困惑。也许 .movietype-1 和 .movietype-2 会更好。
我认为突发新闻和最新新闻足够相似,语义仍然有效。话虽如此,如果内容发生了很大的变化(不仅仅是样式),你可能需要为此创建一个新的类/样式。
很棒的文章,我有时会坚持(一点)关于基本语义,所以我非常喜欢你在文章中解释的一切。太棒了,谢谢 :)
除非我在 CSS 重置中之前定义了它,否则我不会使用“left”或“right”作为类 - 例如,而不是添加…
…到我的 CSS 元素,我只是在重置中调用它 - 就像这样
然后我可以在以后定义 HTML 中的元素类时使用它,我可以使用它将该元素浮动到左侧或右侧 - 就像这样
语义或非语义!? :P
我偶尔也会这样做。但我通常会尽量避免它,哈哈。这取决于项目和我的心情。我肯定想知道 Chris 有什么要说的!
显然是非语义的!
你正在 HTML 中定义位置,而它应该在 CSS 中…
…如果你是一个语义纳粹!
如果你不是语义纳粹,它是“非语义的”,但它可能“起作用”。你应该问问自己“如果我想改变我网站的皮肤,它会一直停留在左边吗?”或类似的事情。
编写语义类名是一种“最佳实践”,因为它允许你
– 在编写 HTML 树之前不要问自己关于皮肤的问题
– 通过外部工具(如搜索引擎)更好地解析。
如果你的需求不符合“最佳实践”的优势,你可以做其他事情。
我认为我之所以这样做,是因为它易于使用 - 如果有任何需要重新定位的内容,那么只需将该词更改为“left”或“right”即可。
但我明白你的意思。:)
好吧,撇开关于语义或非语义的主题。我认为这会迫使你更加努力地将你的设计方向从 LTR 翻转到 RTL,反之亦然。也许你没有遇到过这种情况,但作为一名与阿拉伯语客户打交道的 UI 开发人员,如果我在处理一些大型项目,这将是一场噩梦。
我倾向于使用多个类名,例如 class=”meta right group”。我仍然没有看到使用类名“left”或“right”有什么问题。即使左侧元素可能有一天会浮动到右侧,我也只会将类名更改为“right”并保留 CSS。对于“grid”类名也是如此。我更喜欢添加已经定义了 CSS 的类名,而不是几乎所有东西都进行定位和样式化。
如果它们被用来对任何其他方式都不显眼的元素进行分类,我仍然不会真正认为“left”和“right”是非语义的。最好运用你的判断 - 这对一个不是你的人来说该如何最好地描述?
我同意 Denis。为什么要费心编写 50 次 float: left?如果你真的要把它切换到 float: right,只需将类切换到 right。
这种对语义的执着可能会有负面影响,导致你的 CSS 文件膨胀。更多的 CSS = 更低的可维护性 + 更难阅读。此外,创建“辅助”类可以让开发人员维护一致的样式,并允许任何人了解正在应用的样式,而不必深入 CSS。如果我有一个 left 类,并且每个人都知道 left 是什么,这意味着我不必打开“some-semantic-class-name”来找出它包含 float: left,甚至创建该类来应用它。
我的经验法则是,如果它比一个简单的“辅助”类所应用的 CSS 要多得多,那么我会始终如一地使用语义,因为我仍然需要打开 CSS 并查看其他应用于它的内容。
以下是一些可以在 ul 上应用的类的示例,我在工作中会使用这些示例:padTop(从使用 margin-top 转换为使用 padding-Top)、sprited(用于每个 li 包含一个精灵)、bulleted(用于我们想要看到子弹的时候)。
这一切似乎都是关于“是否应该使用语义”的争论。
我会按照自己的方式做事,并使用那些能让我的工作更轻松的东西,而不会在乎这些由于“语义”而定义的硬性规则。
我认为 HTML 上的语义应该仅限于标签名称。
id、类和其他属性可以是你想要实现的视觉设计,你可以根据需要使用 CSS。
我想知道为什么我们不能添加任意的标签名称来丰富我们的语义,HTML5 中只有少量标签。
看看这个,了解自定义语义标签 http://sickdesigner.com/index.php/2010/html-css/truly-semantic-tags-and-html5/
因为任意的标签名称对除了使用它们的人以外的任何人都没有意义。
你始终可以使用 HTML5 的 XHTML 来做到这一点。在这些任意的标签被大规模记录之前,它们的语义依赖于它们的名称,而它们的名称很容易被解释。
你可以在当前规范中看到这一点。问题不是使用标签的数量少,而是对现有标签的正确使用,而这正在让 Web 开发变得一团糟。
哦,糟糕!我知道我自己也犯了一些这样的错误,比如编号的列和 left/right。就像 Dan 一样,我从来没有真正想过这些类名不是语义的。感谢你写了这样一篇很棒的文章,我知道在未来的设计中我不会忘记这一点。
我也有许多类似的“辅助”类,我使用它们来补充其他(通常更语义化)的类。.tleft、.tright、.tcenter(用于文本对齐)、.small(用于小文本)等。
如果设计需要更改,我会从 HTML 中删除/切换辅助类。
对于我做的网站,到目前为止,这些辅助类的便利性超过了对 HTML 做出微小更改的缺点。它还有助于防止大量重复的 CSS 声明(在一个需要它的一百个项目上使用 text-align:center,而不是只做一次,然后在很多地方使用该类)。
“辅助类”基本上就是 OOCSS,就像我理解的那样。如果它真的为你省去了麻烦而不是造成麻烦,那么完全可以。
这意味着你能够做到这一点。通常情况下,我也能做到。我做的大多数重新设计都有权力像更改 CSS 一样更改 HTML。但这并非总是可能的。想想这个网站,有大约 1400 个独特的页面或类似的东西。任何不是模板而是内容本身一部分的 HTML 都基本是板上钉钉的,我不会再去修改那么多的文档来更改 HTML。
好的,今天早上我在考虑为我的网站创建一个自定义 UI,并且想到要创建这样的类
几分钟后我看到了这篇文章,经过深思熟虑,我有了以下想法,而不是直接在 CSS 中指定颜色,在包含样式的文件名称中指定它。
类似于
/assets/css/ui/green/main.css
如果 UI 需要是红色的
/assets/css/ui/red/main.css
你怎么看?
除非你允许用户更改你的 UI 颜色,或者你正在构建要出售的模板,或者计划创建很多 UI 颜色,你可以在它们之间切换 - 否则有什么意义?如果你在 CSS 中没有指定颜色,为什么不在再次更改 UI 时更改同一个 CSS 文件中的颜色,而忘记构建一个复杂的目录结构,除非你出于某种原因需要能够在颜色之间切换。
是的,用户可以更改 UI 颜色。所以,这种方式是最好的。
那么你可以直接将它们命名为 UI-color-1、UI-color-2 等。
是的,我实际上使用得非常简单:c1、c2、c3 等。
相反,使用诸如 MainColor 和 SecondaryColor 这样的名称,或者 FirstColor 和 SecondColor(有些人会因为我的建议而杀了我 ;-p)我总是使用诸如 CorporateColor 和 SupportColor 这样的名称。
虽然我立即同意诸如“left”、“red”、“bigfont”等名称不好。但我不会立即同意类名需要具有语义性。它们需要对谁或对什么具有语义性呢?
用户永远看不到它们,浏览器将很乐意渲染任何名称,而不会关心它是什么,而且据我所知,目前还没有任何软件(蜘蛛)在野外收集基于任意语义类名的网站数据?当然,像 copyright 这样的类名可能会被一些蜘蛛用来收集信息,但说实话,它肯定永远无法收集到它想要的所有信息,因为许多版权声明不会有 copyright 类名。此外,我可能会想出一个唯一的语义类名…什么蜘蛛/软件会知道它呢?AT(辅助技术)几乎不使用类名来传达信息(我认为我只听说过关于“footer”和“header”类的实例,而它们现在已经是完整的元素了。)
所以,最终,我认为类名只针对开发人员。因此,规则应该是
类名和 ID 应该在样式和/或内容方面有意义,即使样式或内容发生了变化。这意味着它们不再 *必须* 是语义性的。
除非有人能说服我,语义类名有我不了解的纯粹语义原因?
我同意…类名专门针对开发人员。但是,如果你正在一个有多个团队成员参与的项目上工作呢?你不想创建一个让团队成员感到困惑或难以理解的类。你也不希望他们对你这样做。
@Jordan:就像我说的,使用即使样式或内容发生变化也仍然有意义的名称。我认为这应该是规则。这意味着它可以是语义性的,但它不必是语义性的。此外,在团队中,始终建议使用预先商定的标准。
没错,类名只对查看源代码的人员具有语义性。它们对解析文档或构建大纲的机器毫无意义。
我真的很喜欢这篇文章!虽然它确实让我对使用 `class=left` 感到不好…代码中的清晰度/准确性经常被忽视。我知道我有时也会犯这样的错误。这真是一个激励我做得更好的动力:)
几个月前,我在使用 @font-face 时遇到了一个问题。我发现自己在标记中使用了包含字体声明的类,而不是在整个样式表中多次声明它。最终,我意识到将这种责任放到 HTML 上,然后将所有内容都放回到样式表中,这简直是疯了。它确实让我思考了何时更适合使用 HTML 作为一种方式,让其他人更容易理解他们在查看你的作品时看到的内容。
但无论如何。
虽然我同意大部分内容,但我仍然不太愿意完全切换到 CSS3 和 HTML5 — 至少,在普通网络商店环境中,客户仍然无法升级他们的浏览器,我不会这样做。我知道有 JavaScript 解决方法,但我认为体验应该是有机的,而不是被黑客攻击的。在我的职业生涯中,我希望能够突破障碍,不必再担心 IE7/IE8。
无论如何,我已经尝试过使用“ .className:after {content: ”; display: block; clear: both;}”,但大多数时候,我最终会使用一个 <br style="clear: both;" />,而不是一个带有清除类的 div。
其他所有内容,我完全同意。我只使用我需要的类名,通常尽可能少。HTML 有所有用于格式化的内置标签,没有必要将 Div 用于所有内容。
好吧,这里的问题不在于语义性或非语义性,而在于“如果你想要 DRY,CSS 会有很多问题”(DRY:不要重复自己)。
想象以下 CSS
classorelement1,
classorelement2,
classorelement3,
classorelement4,
classorelement5
{
cssproperty1:value1;
cssproperty2:value2;
cssproperty3:value3;
cssproperty4:value4;
cssproperty5:value5;
}
classorelement6,
classorelement2,
classorelement3,
classorelement4,
classorelement5
{
cssproperty6:value6;
cssproperty7:value7;
cssproperty8:value8;
cssproperty9:value9;
cssproperty10:value10;
}
classorelement2 到 classorelement5 是复杂的选择器,它们总是同时出现。你不想重复该部分,因为它总是相同的。你可以写成
classorelement2,
classorelement3,
classorelement4,
classorelement5
{
cssproperty1:value1;
cssproperty2:value2;
cssproperty3:value3;
cssproperty4:value4;
cssproperty5:value5;
cssproperty6:value6;
cssproperty7:value7;
cssproperty8:value8;
cssproperty9:value9;
cssproperty10:value10;
}
classorelement1
{
cssproperty1:value1;
cssproperty2:value2;
cssproperty3:value3;
cssproperty4:value4;
cssproperty5:value5;
}
classorelement6
{
cssproperty6:value6;
cssproperty7:value7;
cssproperty8:value8;
cssproperty9:value9;
cssproperty10:value10;
}
但你不想重复 cssproperty1 到 cssproperty5 以及 cssproperty6 到 cssproperty10,因为你不想维护“完全相同的部分”。
CSS 在这里帮不了你… 你可以使用这篇文章中的类,也许你有多种皮肤,而“bgBlue”在其他皮肤中没有意义…
我找到的最佳解决方案:LESS 或 SASS。
使用这些元 CSS 工具,你可以在不需要使用类的前提下对 CSS 进行分解。你可以只写一次“背景颜色”。
SASS(或更现代更合适的 SCSS)绝对是所有 CSS 需求的解决方案。它更接近于 C++ 对 C 做的事情(将语言对象化)。你可以创建函数(或称为混合),以及具有指定样式的整个对象。我几乎可以保证那些有 *成千上万* 种相同颜色定义的公司可能使用 SASS。在没有变量的情况下,维护 CSS 达到这种程度是不可能持续下去的。
为了对语义学吹毛求疵,你应该将“蓝精灵”包装在 <i&rt;蓝精灵</i&rt; 中,因为它是一部重要作品,因此应该用斜体显示。我可以理解将此视为非语义的论点,但实际上并非如此,因为任何在学校写过论文的人(至少在美国是这样)都会知道这条规则。即使你想要争辩说它是如此不语义,以至于应该排除它,你的 <b&rt; 标签也不更好。
我可以理解 <cite&rt; 可能有一些争论,但它也相当模糊。
不,不,不——你错过了重点。向标题添加一个类,说明它是一部电影(.movie,或者 .movie-title 也许?),然后让 CSS 帮你完成。如果它在标题之外使用,我同意 cite 标签可能是勉强可以接受的,虽然 span 标签可能是更少争议的选择,因为确实没有专门用于它的 HTML 标签。
我见过的最喜欢的类是 Facebook 上的
个人资料标题 - .ginormousProfileName
人们当然可以争论这是否是语义性的,特别是考虑到 Facebook 热衷于重新设计。
我遇到的一个问题是 WordPress 主题使用 body 类,但将“page”类赋予了包装主文章的 div — 然后当你尝试声明一个宽度(或任何东西)时,它会被应用到整个网站。在这种情况下,我更喜欢“content”来表示该 div。
很棒的文章,但我感觉这篇文章可以接着写一篇关于“未充分利用但具有语义性的 HTML”的文章——比如 <address>、<acronym>、<abbr>、<dfn>、<q> 等。
创建类时的优先级是编写可维护的类。没有浏览器或蜘蛛会关心你的 class 属性的值(除了显式白名单的微格式情况)。
所以,无论是语义性的还是非语义性的,在实际意义上都没有关系。如果你认为“group”对你来说比“clearfix”更易于维护,那就去使用它吧。我个人使用的是混合使用各种方法,看哪种方法更有意义。有时,更易于维护的类意味着它们在我在样式表中查看它们时会指示一些它们的表现性方面,这样我就能记住它们是什么。
当我看到这篇文章的标题时,我想,“Paul 会对此发表些什么……”:)
我认为“大型网站”和“小型网站”之间存在差异。网站越大,内容越多,它从尽可能语义化的类名中获得的长期利益就越大。
有人能争辩说这个家伙处境好吗?
https://twitter.com/mpuckett/status/99207354771439617
我必须同意 Paul Irish 的观点。
类名值不是标准的,不像标签名那样。
其次,类名值不是描述,而是标识,你已经说过了,Chris。
你不能对 ID 值进行语义化。这就像试图说 1 始终等于 1 个苹果。
虽然 Chris 可能意味着某些东西,它的起源等等,但它肯定不是语义性的,它只是一个随机标识人的 ID 名值;Coyier 也是如此,它就是一个类名。
因此,争论“p1”比“bigBlue”更语义化,因为“p1”有一个隐藏的“priority-1”含义,这太幼稚了。
更幼稚的是发明一个英语 HTML 发现课程,在这个课程中,你开始定义“priority-2”和“plain-jane”在语义机制上有所不同。
它们确实没有不同。两者都没有描述位置或颜色。它们都暗示了某种东西的多或少,但没有过于具体地说明那个东西。所以它们都具有相同的资格。
试图在真正应该用引号包围的任意字符串值中添加语义,这是一种愚蠢的行为。城里每个帽匠都会想要写一篇关于其真正隐藏含义的艺术评论。就像诗歌一样,只是更糟糕。
我会一直争论“p1”比“bigBlue”更有语义,直到我脸都变成蓝色。当你不再希望那个元素变大或变蓝的那天,真是令人沮丧。
它可能“无关紧要”,因为你可能不在乎,搜索引擎也不在乎,查看源代码的人都是混蛋,等等。它在更微妙的意义上很重要。就像一个必须处于关闭状态才能打开的电灯开关。每次你不得不处理它时都很烦人。或者如果你必须为每封你阅读的电子邮件登录和注销你的电子邮件客户端呢?这没什么不对,它运行得很好。
两个好例子:bigBlue 和查看源代码的混蛋。哈哈!
好吧,如果 p1 实际上指的是紫色,色号 #1,我想你必须一直争论下去,直到你脸都变成紫色 #1 ;)。
说笑归说笑,你假设了。你假设每个类名值都是英文的,并且每个查看源代码的混蛋都懂英文。
如果类名值是德语或罗马尼亚语,那一切就都毫无意义。
即使理想情况下,每个人都应该对英语感到舒适,你又犯了一个错误。
你假设 big Blue 只能用一种方式解释。bigBlue 实际上可以是一个比喻,比如“priority-1”。一个军事代码,一个技术描述,任何东西。
两件事,只是为了澄清一下。
不要误会我的意思,我非常支持为类名使用有意义的值。我并不是指“green”,“left” 等等,而是像“movie-review”这样的值。
也就是说,我不会为此大费周章并建立一个宗教。我对此很实际,最重要的是。
一个简单的搜索和替换可以解决类名更改的问题,那一天并非可怕,我的内容和标记已经有很多内容可以表达,使我精心选择的语义类名有点多余。
很棒的文章,Chris。我管理着一个团队,维护着大约 13 个相当大型的网站。我们试图保持语义化,但我们肯定有失误。幸运的是,在那些情况下,查找和替换往往很有效,因为我们使用的是相当独特的类名。
但是,什么时候会太过火呢?例如,在你的例子中:“class=priority-2”。
如果在下次重新设计中,这些块需要更改为不同的优先级怎么办?“priority” 使它过于具体,而“p2” 可能更有效,虽然即使是它(以及 h1、h2 等)也可以被认为是不语义化的,不是吗?
Paul 说得对。在这一话题上听到一些常识真是令人耳目一新!
“语义化”的类名或 ID 名对用户没有任何好处。它们只会影响开发人员,开发人员应该选择最有利于维护的方案。
这与语义化的 HTML 标签完全不同。语义化标签可以帮助用户(和搜索引擎)。
你真的可以让自己为强迫你的类名“语义化”而痛苦不堪。这是一种强迫症的表现;代码永远不应该变成宗教!
这尤其荒谬,因为大多数 HTML 类纯粹用于帮助我们使用 CSS 应用样式。这些类并不是真正的结构性语义(描述文档的语义结构)。相反,它们是 Nicole Sullivan 所谓的“视觉语义”:它们描述了表示层的结构。
Nicole 的 OOCSS 方法不仅仅是为了性能;它也是为了改进维护。你还可以使用 SASS 来获得类似的维护优势,但这样一来你就会失去 OOCSS 带来的性能提升。
实用主义是最好的方法。一般来说,没有必要使用诸如“big-blue-italic-text-against-a-mauve-background”之类的类名,这些类名就像人质一样。同样,也没有必要重写网格系统的类名,比如“col1”,甚至“leftCol”。
我找到了一篇文章,它提供了一个极具讽刺意味的论点,反对追求 100% 的“语义化纯净”。这个人试图使 OOCSS 网格类(“size1of3” 等)更加“语义化”,方法是为列分配诸如“rhythm”,“wedge” 和“beat”之类的名称。
http://revoltpuppy.com/txp/articles/5/making-oocss-more-semantic
他用来为这些“语义化”名称辩护的扭曲逻辑只是说明了人们在试图将圆 peg 塞进方形孔时能够多么有创造力。祝他一切顺利。;)。
我们的 p1-p5 按钮类在这次评论线程中出现过几次,所以我认为我应该澄清一下。这些类实际上只是我们基本“button”类的颜色修饰符。我们本可以使用 IT Mitică 建议的“bigBlue”,但如果我们在去年重新设计应用程序时这样做了,所有按钮的颜色都发生了变化,那将是一场噩梦。我们最近还添加了一个联合品牌功能,允许用户自定义界面,一直到这些 p1-p5 按钮的颜色。这些修饰符应用于应用程序中的每个按钮,最常见的优先级(p1)在我们的源代码中引用了超过 200 次。因为这些类没有绑定到特定的形容词,所以我们可以用一行 CSS 来修改它们,而无需一头扎进标记的干草堆中。
正如 Paul 在上面所说,“创建类的首要任务是编写可维护的类”。我将可重用和可扩展也添加到这个列表中。不要试图为只使用一两次的元素发明一种新语言。但是,如果这是一个你可能重复使用的标记模式,那么一个没有绑定到视觉描述的语义命名系统现在只需要花费很少的精力,并且以后会为你节省很多头发。
我在写我的最后一条评论时,前一条评论就出现了。我只想说我们还在 MailChimp 中使用 Nicole Sullivan 的 OOCSS,它对我们来说非常有效。有人可能会争论说像“size3of4”这样的类名绑定到视觉描述,但正如前面的评论者所说,试图“语义化”网格系统就是在试图将 peg 硬塞进孔中。除非你的重新设计是完全彻底的,否则你使用的网格系统可能不会改变。
Jason,虽然不太可能,但总有一天,你可能需要放弃网格系统。
这意味着,虽然我同意“p1”比“bigBlue”更易维护,但“size3of4” 仍然有可能在不久的将来让你头疼。这是我的观点 :)
为了完全说清楚,“bigBlue” 只是一个五年级学生的选项。
在严格地,逐字地,描述一个可能发生样式变化的蓝色事物时,无论语言如何,都应该避免使用它作为类名值:“grosBleue”,“großBlau” 或“mareAlbastru”。
为什么?因为我们更聪明,对吧?;)。
“Jason,虽然不太可能,但总有一天,你可能需要放弃网格系统。”
……在这种情况下,你更改你的 HTML。但是你的网站有数千页?查找和替换。
任何重大重新设计都需要对标记进行一些更改。你永远无法完全完美地将表示与结构分离,甚至将表示与内容分离。
总是引用一个例子来支持 CSS 唯一重新设计的理论:CSS Zengarden。但是看看他们的标记。你能告诉我它是“语义化”的,并且保持面无表情吗?
你给你的类和 ID 起什么名字真的重要吗?
你是否想象访问者一登陆你的网站就立即点击“查看源代码”按钮,以便对你在代码中分配的名称的“语义化”程度进行全面调查?当然不,他们根本不在乎。只要页面正常工作,看起来不错,他们就不在乎你是否使用了十二使徒的名字,曼联一线队的名字,还是纽伦堡审判的被告的名字。
语义化,胡说八道。正是这种胡言乱语让网页设计声名狼藉,让潜在用户尖叫着逃离。
如果你使用的名称对你来说有意义,那么谁在乎呢?
除非你认为唯一使用你网站的人是其他网页设计师,他们想要从你的 ID 和类名的语义化程度中挑出毛病。
来自你的网站:http://cl.ly/916J
是我让网页设计声名狼藉吗?
这与查看源代码无关,而是与做好你编写的代码有关,以便你(以及接替你的人)更容易在该网站上工作。
好吧,我认为这证明了我的观点。
你真的想说,如果你给一段代码分配 class=”summat-profound”,而不是 class=”qwerty”,它就会运行得更好吗?
当然不会,它们都将完全相同地工作。代码不在乎,浏览器不在乎,更重要的是,访问者和搜索引擎也不在乎。
我以前用过 #asd 和 .zxc,效果很好。
对不起,但我认为功能性使构建和维护网站更容易。也许是我的机械工程背景,但如果 class=”left” 或 class=”right” 是描述性的和功能性的,那么这就是最重要的。
“我会一直争论“p1”比“bigBlue”更有语义,直到我脸都变成蓝色。当你不再希望那个元素变大或变蓝的那天,真是令人沮丧。”
当那天到来时,可以把它叫做“smallGreen” 或“mediumsizedRed”。如果你喜欢,可以把它叫做“arnold”。:)。
不,代码不会运行得更好,但是编写代码会更好。
如果你完全 100% 赞成编写像“mediumsizedRed”这样的类名,但实际上在 CSS 中它应用的样式使字体变小,颜色变成浅灰色,那很好。当然,它会运行。但是:1)我永远不会雇佣你 2)我永远不会在与你一起的开源项目中工作 3)我会偷偷地嘲笑你,同时在我的固定齿轮自行车上做 wheelies。
@Chris,我敢肯定你用那张截图彻底打败了他。我希望是 CMS 生成了所有这些内联样式,因为以后清理起来会很麻烦。
@NigelC 作为一名设计师,打开你的思维,去了解这篇文章和其他类似的文章将对你大有裨益。如果你真的做到了,我敢说你会惊讶于你的想法会改变得多快。:)
哦,Nigel,Nigel,Nigel……哇。
那张截图太棒了。
我想很多网站的 CSS 样式都会随着时间的推移和持续开发而不断演变——就像我的,以及随着开发者学习如何正确地进行开发而不断学习的曲线——就像我一样。毫无疑问,我们中的许多人如果从头开始,会采取不同的方式。
或者也许不会。
我也有 greenbody 或 smallheadinggrey 的困扰。
我喜欢这种类型的文章!
也许解释语义 CSS 的更简单方法就是,不要将你的类名或 ID 命名为与 CSS 属性相关的任何内容。属性可以是颜色、字体系列、浮动、边框、背景等。Jens Meiert 在他的网站上维护了一个优秀的 CSS 属性列表——http://meiert.com/en/indices/css-properties/
从另一个角度来看,不要将你的类名或 ID 命名为视觉上代表网页上元素的内容。正如前面有人提到的,这可能是像 left、right、large、small、blue、green 这样的词。
很棒的文章,Chris,我喜欢这种内容:)
关于 HTML5 的几点:你可以使用
<small>
来表示内联版权文本,可能不需要.copyright
。另外<aside>
的语义正好可以替换.entry-unrelated
来实现 Readability。我完全支持 OOCSS,我喜欢简短且不指定类名。例如,在 OOCSS 的 space.css 中,你会有像 “pan” 这样的类名(代表 padding all none),或者 “mlm” (margin-left medium) 等等。我非常喜欢这些类,用于调整元素/对象之间的间距。另外,如果你查看你的 Gmail 的 HTML 代码,你会发现很多简短的、类似代码的类名,没有明显的含义。
是的。
我刚发现这篇文章。有趣的是,那天早上我做了一个模型,并且有了这个想法。
我的目标是区分两种类型的个人资料:,相同的字体和外观,除了颜色:标准(绿色)和个性化(红色)。
创建两个类,standard 和 perso,以及它们各自的颜色,比创建 green 和 red 类更有语义吗?
选择 1
.profile { // 所有通用样式}
.standard {color:green}
等等
选择 2
.profile { // 所有通用样式}
.green {color:green}
等等
当然,standard 和 perso 似乎是正确的答案……
因为重要的不是外观,而是个人资料类别。
添加一些颜色类定义,与使用 “FONT COLOR” 标签完全一样。
这里使用 ID 比使用类更“语义”吗?
<div id=”footer”></div>
你不需要 100% 的语义代码来运行一个网站,有时甚至非语义代码更容易理解。网格系统就是一个例子。在 HTML 中使用非语义类名比使用臃肿且混乱的 CSS 文件要好。
在每个项目中分析利弊,并确定语义性是否会带来比解决的问题更多的问题(某些项目的生命周期很短,或者不会在不更新标记的情况下进行更改)……语义性被高估了,务实一点。
读到你们关于语义的一些观点很有意思。我认为使用(在没有其他合适的元素的情况下)仍然有正当理由,主要是因为 HTML5 支持的不成熟以及跨浏览器样式化语义元素的困难。
.hyphenate 类(我前几天晚上在 Twitter 上告诉了你)实际上是 jQuery 选择器,用于 hyphenate.js 插件,因此,从功能上来说,它是语义的,因为它用于定位页面上的每个元素,以便进行连字符处理。
我认为这是一个“明智地”使用命名约定,明确区分什么是样式,什么是 jQuery 函数的目标,以及什么是辅助类的问题。
很棒的文章。只是希望像这样的人不要剽窃你的内容。
leonardowesleidiniz.wordpress.com/2011/08/04/what-makes-for-a-semantic-class-name/
……我无法相信评论区里那么多人使用过 “left” 类。哇。
那么,你建议用什么替代方案呢?我一直听到人们批评“left”和“right”类,但没有人提出解决方案。
例如,WordPress 如何在不添加“alignleft”类的情况下,将图像浮动到文本左侧?
最有趣的是,许多 CSS 开发人员使用完全错误的“clearfix”类,它可以被替换,相反,在主要内容 div 中使用 overflow=”hidden” 来控制对齐的清除。这是一个简单的技巧,可以消除难看的非语义的 clearfix 类。
为了准备 HTML5,建议将 div 分类为 article、aside 或 footer 以及所有其他类别……以便在 HTML5 准备好全面使用时,能够轻松更改验证。
我已经在这里发表了我的想法,但从那以后,我做了一些代码审查,看到了这个绝对的经典案例。
.centered450left
我不知道是该笑还是该哭!
我已经拒绝了更改集,并建议有问题的开发者将选择器重命名为 .wtf。
很棒的文章。谢谢,Chris。
作为一个初学者,我不得不承认,我还没有仔细想过这个问题。
我使用这些
并在需要时像这样应用它们
这些是语义的还是非语义的?
Oops. *
几年前,我正在处理将惠普全球合作伙伴门户(现在的“HP Smart Portal”)从传统的 BroadVision Javascript 迁移到重写的 Java 解决方案。与此同时,我们还获得了所谓的“HP Web 标准”样式指南,该指南对全球所有惠普网站都具有强制性。我可以找到一个链接到其中一个——仍然在积极使用的——样式表。
http://welcome.hp-ww.com/country/us/en/styles/hpweb_styles_strd.css
虽然他们确实定义了许多语义类名,但他们也引入了以下内容:
a.colorFFFFFFbld {font-weight: bold; color: #FFFFFF;}
.large {font-size: medium;}
.color333333bg {background-color:#333333;}
.colorDCDCDCbg {background-color:#DCDCDC;}
.color666666bg {background-color:#666666;}
我想我们很幸运能看到 CSS 定义,因为如果这些类被分配到标记中的元素,我们将很难猜测它们会产生什么效果 :)
干杯,
乌韦
在阅读了更多评论后,我仍然没有说服。正如我上面所说,还有许多人也都这么说。为什么要使用语义?我同意 p1 也很糟糕,就像所有没有意义的名称一样。但是为什么要坚持“语义”呢?
为什么语义性如此重要?再说一次(我一直在重复自己),如果一个名称可以理解并且有意义,即使你改变了它所指的样式或内容,那么为什么要在乎它是否是语义性的呢?我怀疑这可能是表格与 CSS 时代遗留下来的东西,有人只是将语义的论据也应用到了 CSS 上,因为可维护性。但语义性和可维护性之间毫无关联,它们互不依赖,也不需要对方才能存在。
我真的想知道,为什么你认为语义性如此重要,而“有意义”则更有意义。(我同意语义名称通常更有意义,但它们也毫无道理地限制了你,而且存在大量名称,它们完全可以使用,并且可以维护,而无需成为语义的)。
嗯,这里的一切对我来说都不语义:我说西班牙语,<h1&rt; 应该是 <c1&rt; (c=cabezal=heading,用英语解释就是标题)
由于 view-source html 本身就是一个混乱的地方,尤其是在压缩的情况下。我认为最好让你的 template.php 和 css 可理解。无论是通过语义还是 OO……只是一种手段。
我想另一个问题是语义搜索技术会发展到什么程度——它正在进步,而且在我看来,随着人们越来越懒惰,它最终会比标记更重要???
语义存在于 HTML 的标签名中。
语义不存在于 CSS 的类或 id 中。
当然有。我认为它与“语义”这个词同样相关。
用户代理从类名中提取语义数据的实际例子是 Google 的爬虫,当它搜索像 hCard 这样的微格式时。因此,有时类名的语义价值对开发者以外的人也有用。
好的,现在,
如果你真的那么语义化,我认为我们应该提出新的 HTML 属性名称“语义”,与“类”和“id”一起使用。
不要破坏样式表(CSS)的语义方面,因为它是为了——使用“类”和“id”来为元素设置样式。
相反,将此新属性仅用于语义目的。
这意味着我们将拥有另一张名为级联语义表 (CSeS) 的表,用于其自身的目的。
嗨,
我认为你提到了一个很好的观点… 但你并没有完全想透… 并非所有视图/显示都有语义…
当然,文章预告应该归类为预告,而不是 textInItalics,你提到了原因:将此内容重新设计为粗体将是一件很痛苦的事… 但请考虑以下情况
你有一篇文章,其中包含大量切线内容… 你使用 aside 元素并对其进行样式设置… 文章中的所有 aside 元素都是相同的,只有一个例外:float; 第一个浮动到左侧,第二个浮动到右侧,第三个浮动到左侧… 这里有什么语义?尝试在这里分配一些语义实际上会适得其反… 像 floatLeft、floatRight 这样的类更好,因为(如果你在适当的地方使用语义类)它表明没有特别之处,没有语义… 这些类只是用于框对齐…
所以是的…. 语义类是语义内容的最佳选择… 但没有理由在没有语义的情况下强制语义。
我大量使用语义类,但在我的 CSS 中经常出现像 .clear、.alignLeft(right, center)、.floatLeft(right) 等类,仅仅是为了视图/显示目的。
我同意!我认为,在某些情况下,实用性确实会胜出。我对类的理解是,如果它们没有选择器,它们就会被忽略,没有人会受到伤害。因此,从移动样式表中省略 .floatLeft 声明(或根据你的 CSS 编写方式进行重载),文档的“含义”也不会改变。
毕竟——这在人群中说出来可能不好——用户代理并不关心我们高质量的类名(微格式解析器除外),而且它肯定不像语义元素和 ARIA 角色那样有助于可访问性。那么它们是用来做什么的?我们开发者!
最终,我打算采用语义 CSS 来简化维护,而且我打算出于同样的原因采用非语义 CSS。
感谢这篇文章,很有用。最好的祝福。
这是一篇有趣的文章,虽然评论中有很多技术细节。在网页编码方面,考虑语义的要点不是将样式与含义分离吗?
我们编写一个网页,它以不同的格式显示在不同的平台上,这意味着它的代码应该尽可能多地传递含义,而显示/设备则定义样式。
从我的角度来看,为标题标签赋予 .article-title 类比 .big-blue 更具有意义。正如克里斯所说,它更容易理解和维护——从抽象意义上来说,它有助于文档的整体含义。
.big-blue 我想,是走向一个滑坡的第一个步骤,然后就只能使用表格了…
哦,天哪,我想我这么长时间一直做错了… 我总是有一系列具有通用属性的类,例如
.fleft { float: left; }
.red{ color: red; }
.blue{ color: blue; }
.big{ font-size:120%; }
.clear{ clear:both; }
…….
用这种方式改变颜色/布局非常容易。但我想我现在应该重新思考我的方法了….
我是一个语义狂热者,我喜欢这篇文章。哈哈
我通常尝试根据元素的结构来命名所有元素,而不是行为或“样式”。
就像在 OOP 中,你可以做一些类似的事情
对象 = 动物
类 = 爬行动物
类 = 哺乳动物
类 = 两栖动物
在 CSS 方面,我肯定会考虑
我也会考虑语义。我认为,从结构和优先级的角度进行思考是关键。我只是将这一原则应用于我的所有 CSS。样式一直在变化,所以我避免变得过于具体。
我学到的是,在编码/编程中,真正的力量在于泛型。这使你能够轻松地将你的工作应用于多个项目,并获得更高产。:)
哇,不知为何,我的评论被搞砸了。哈哈,算了
<i><small>我尝试过早些时候发布,但没有看到,所以如果重复了,请见谅。</small></i>
克里斯,你的帖子很棒!
我必须承认,我曾经犯过一些非语义类名的错误。像“left”和“right”这样的类名。我主要在列布局中使用它们,但后来改用了像 :first-child、last-child 和 :nth-child 这样的伪类。
自从我阅读了这篇文章 http://24ways.org/2008/making-modular-layout-systems 以来,我一直坚持使用它。我内心一直在争论如何以及何时使用它们。我想要维护一个灵活的 CSS,以及将来我的继任者能够轻松理解的东西。
对于那些只有颜色、字体大小或字体粗细样式的项目,出于某种原因(不是标题或特定项目),我使用 .fontsize_1.2{} 或 color_#333{} 类。但你提出了一些很好的观点,我必须承认,我应该改变部分工作方式。我想我应该在这方面做得更好。:)
SCSS 和 Compass 通过 @extend 功能帮助保持语义。它使我能够在选择器中拥有可复用的 CSS 属性,例如
然后,无论何时需要,我都可以语义地调用它
SCSS 实际上做的是将扩展选择器添加到扩展选择器中。CSS 将使用这两个选择器输出。
当然,没有任何标记使用“the-clearfix-we-see-all-the-time”作为类。这就是我选择一个确定不会意外出现的名字的原因(我通常用“.-class-name”开头这些伪选择器,因为它有效但未使用)。
这种方法非常适用于 Blueprint 和其他网格(参见 Compass Blueprint 支持)、清除浮动(Compass 也提供清除浮动 mixin)和 OO CSS。语义和 DRY 获胜。
作为一名为零编码知识的人开发 WordPress 模板的人,实际上,拥有像 left、right 和 clear 这样的类是有好处的,其唯一目的是在类选择工具中拥有这些类,这样帖子作者就可以选择图像或其他元素,并将它们浮动,而无需了解任何代码。
我甚至会争辩说,在这里不可能有一个语义类。它应该叫什么?它唯一的目的是让元素浮动,同一篇文章中相同类型的元素可能根据文章布局浮动到左侧或右侧。我不能根据 :first 或类似的东西进行选择,因为这对文章设计者创建的文章布局来说是任意的。当然,如果是我,我会转到 html 视图,并将浮动添加到样式属性中,但让一个不会编码的人做同样的事情就不同了。
作者,
很棒的“词语分组”+“示例”+“用户评论”。做得很好。
- 用户。
抱歉——不想说得太具体 =)
非常棒的文章,我特别喜欢 p1-p6 的技巧,我简直不敢相信我以前从未想过这一点。另外,我赞扬你在帖子中提出了一个有效的反驳意见。
PS. 就像往常一样,重新设计做得很好,很漂亮。
啊,今天我有一个现实生活中的例子。
我有一个表单,其中包含大约 30 个标签。其中 26 个的宽度为 350 像素。但剩下的 4 个是全宽的。
无法用简单的 CSS 选择器区分这 4 个标签与其他标签,所有标签都是兄弟标签。所以唯一能够钩住它们的方法是为这 4 个标签添加一个类。现在应该给它起什么名字呢?
‘fullwidth’ 首先映入脑海,但显然它太过于风格化了。
其中 3 个标签是复选框(而所有其他标签都不是),所以我可以将它们命名为‘checkbox-width’,但这仍然剩下第四个标签,此外,谁又能说将来不会有 350 像素宽的复选框呢?
实际内容从选择性别到接受条款和条件都有所不同。
我想我会选择 "form-alternate-width" 。我正在考虑是否应该在其中包含一个数字,以防将来需要添加另一个宽度?
但即使名称与样式相关,非语义化并且在某些方面限制了我,它也很容易理解(从 HTML 文件和 CSS 文件中都可以理解),因此便于维护。
我也可以选择 "label-alternate-width",但最终放弃了,因为这将我限制在仅用于标签,而且这个宽度实际上也用在 [select] 上,所以我可以重复使用它。
@Evert: 关于您实际的表单问题,我完全理解您的意思。我也遇到过同样的问题,而且它们不容易消失,因为为了设计一个可用的表单,您需要有足够的钩子才能使它看起来漂亮。而且您希望可以重复使用的 CSS,您可以在网站上五个不同的无关表单中使用它。
我想不出任何纯粹的语义化方法,除了为每种不同类型的字段创建类名(例如,.label-firstname,.label-province 等)。然后,您可以将每个大小的标签分组到自己的声明中,但这可能会创建非常庞大且可怕的选择器。使用 :nth-child()、+、> 和其他一些部分也会导致管理头痛,因为如果表单字段的数量发生变化怎么办(在我的表单中,它们会根据客户的设置动态变化)。
我的建议是:只需为标签的替代大小创建一个易于维护的、非语义化的类,并在生命结束时惊喜地发现您并没有因为您的罪过而下地狱。这就是我所做的 :-)
还有其他人想参与吗?
什么是好的语义化?<strong> 不是更好的选择吗?
好吧,无论发生什么(除非切换到 HTML5),我都会坚持使用与功能相对应的类命名法。我知道有人会难以理解我写的代码,但如果我在一个团队中工作,我毫无疑问会使用我们都同意的类名,以防止肯定会发生的混淆。
哦,语义化。这是那些喜欢吹毛求疵的超级极客用来看不起我们这些普通人的东西。
幸运的是,Coyier 先生不是“他们”中的一员。另一篇有用的文章,谢谢。
我以写代码为生,一直在寻找改进代码可读性的方法,感谢这篇文章帮助我了解了开发中的另一个黑暗艺术。
希望有更多像 Chris 这样的人,他们利用自己的知识进行教育,而不是滥用。
采用更多语义化的代码实践和习惯不会明智吗?在 HTML 6 及更高版本中,这些实践将更加广泛地应用于标记。
好文章。我知道有点吹毛求疵,但指的是您的第一个 "好例子",使用 <strong> 而不是 <b> 会不会更好,因为 <b> 被认为是一个表现性标签,而 <strong> 是一个语义化标签。
我这样做是为了故意引发这场讨论。
并没有被弃用,只是当您需要使一个词变粗体时使用它,因为样式要求变粗体,而不是仅仅为了“突出显示”或“额外强调”。在那句话中,我没有试图强调电影的标题,它只是被样式要求以这种方式显示。(虽然可能应该用斜体。)
我很好奇为什么没有人提到在 CSS 中使用类或 ID 比使用标签作为选择器渲染速度更快的事实。
例如,
.header {}
比header {}
更有效率的选择器。当您构建小型网站时,这并不重要,但这绝对是一个值得培养的好习惯,因为总有一天您可能需要优化您的 CSS。