<span>的语义值是什么?

14
元素似乎与
相同,但是它是内联级别而不是块级别。然而,我似乎想不到元素可以提供任何有益的逻辑分割。 一个单独的句子或单词(如果不包含在句子中)似乎是最小的逻辑部分。忽略CSS,因为CSS仅用于布局而不是语义含义,什么时候使用元素通过切分句子或一系列单词提供额外的语义价值
看起来,在所有情况下,其他元素更适合添加语义价值,使成为纯粹的布局元素。这是真的吗?


“that[CSS] will give the semantic meaning”...不,CSS根本没有提供任何语义意义。所有的语义意义都在HTML中。嗯...级联语义样式表?我想到这个就不寒而栗。 - Andy Ford
我是在说忽略CSS会给予语义意义,而不是反过来。 - cdeszaq
12个回答

29

Span可以用于添加超出HTML范围的语义含义。这可以通过使用标识某些属性的类来实现。例如,如果您正在编写科幻小说,您可以使用span来识别虚构词汇,因为您可能希望以不同的格式进行排版,或者因为您可能希望拼写检查器忽略它们:

然后巫师召唤了<span class="wizardword">gravenwist</span>并命令它攻击正在接近的军队。<span class="wizardword">gavenwist</span>抵抗了,但是巫师的<span class="wizardword">wistwand</span>太强大了。

这可能呈现为

然后巫师召唤了gravenwist并命令它攻击正在接近的军队。gavenwist抵抗了,但是巫师的wistwand太强大了。

另一个很好的例子是微格式,它允许在HTML中创建任意结构:

<span class="tel">
 <span class="type">home</span>:
 <span class="value">+1.415.555.1212</span>
</span>
相比的优势在于可以出现在几乎任何地方,因为它们是内联内容,而
是块级元素,所以只能出现在某些其他元素内部。

2
你说“span可以用来添加语义意义”,但实际上是类别(classes)添加了意义,span本身并没有任何语义。 - George Katsanos
4
@GeorgeKatsanos 我说过,“跨度可以用来添加语义意义...使用类”。类不能随便放置。您可以将它们挂在插入到未标记的内联元素中的span元素上。由于没有其他语义负担,span+class允许您添加所需的任何语义额外内容。 - Mr. Shiny and New 安宇

12

非常有用的一个功能是标记语言的变化。例如,

<p>Welcome to Audi UK, <span lang="de">Vorsprung durch Technik</span>.</p>

支持多语言的屏幕阅读器可以利用这个功能。

因此,它们不是为了表现形式而存在的,只是通用的。 实际上,如果使用具有语义含义的类名称(例如“拼写错误”而不是“粗红色文本”) ,则很少使用标签来进行表示性的呈现。


5
<div class="name">
  <span class="firstname">John</span>
  <span class="lastname">Doe</span>
</div>

完全取决于您想要表达的内容。如果标记名字对您具有语义价值(无论是仅仅为了让 CSS 有钩子来格式化名字,还是使用某些脚本语言提取它们),那么您可以使用 span。


4

当我想让JavaScript解析元素并在标签内插入某些值时,我经常使用SPAN,例如:

<span datafield="firstname"></span>

稍后将插入一个值,因此在这种情况下它确实具有意义,尽管只有我决定给它的意义。 在这种情况下,span没有其他影响布局的事实是理想的。


2
标签实际上可以通过 class 属性携带语义信息。这被微格式所使用。

2
标签需要添加 class 或 id 属性来表明其含义。 例如:<span class="personal_phone_number">0123 456789</span>

但是类属性是否被视为标签内容的一部分呢?也就是说,它们是否计入语义值? - cdeszaq
鉴于类用于为标签添加样式,它们具有语义含义。 - Powerlord

2
忽略CSS,因为那会给语义带来意义,那么什么时候使用将句子或一串单词分开提供额外的语义价值呢?
除了HTML标记(如CSS)以外,从来没有。 span 的唯一目的是承载在 HTML 中无法表达的标记,例如在印刷出版行业存在数百年的 span style="dropCap",总是应用于项(文章等)的第一个字符 - 不会引起断行(或任何更大的间隔)。
似乎在所有情况下,其他元素更适合添加语义值,使得 span 成为纯粹的布局元素。这是真的吗?
是和否。 span 的唯一真正价值在于它在语义上是中立的。也就是说,与例如 p 不同,当您将其用作承载其他标记的元素时,它不会执行任何可能导致您不想要的效果。还有像上面的 span style="dropCap" 这样的时候,您不想要任何其他效果。

实际上,您不需要使用“span”元素来让段落出现大写字母。有“first-letter”伪类可以实现这一点,并且它可以与其他CSS2功能(如“before”)结合使用以实现高级效果。 - Konrad Rudolph

1
如果您想对标签的某个内容(例如单词或句子)应用格式规则,可以使用 span 标签。它有时被称为无标签格式化。
我在我的 EBNF -> XHTML 转换器中使用 span 来对字面量和令牌应用不同的格式。

1
元素(和
元素)本身通常被认为是语义中立的。一个好的方法是尽可能适当地使用语义标记,但有时你会遇到现有的html元素并不为你的内容提供语义意义(如EM、STRONG、ABBR、ACRONYM等),这时候下一步就是使用语义中立的
,并配以语义明确的id或class。

0

我认为他在问div和span之间的区别,实际上除了默认行为之外,没有什么区别。

这是一种惯例。在使用样式时,div通常用于划分内容的部分,而span用于划分内联文本。您可以随时在任何地方使用divspan,但是将它们视为不同的有帮助,即使只是按照惯例。


正确,一个人“可以”在任何地方使用div,但是在内联元素中使用div是非法的,因此这是不正确的。 - cdeszaq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接