哪些HTML标签更适合用于货币?

44

如果您需要选择一个HTML标签来表示价格、金额或账户余额(例如:2012年3月9日-收入:1,200.00 €项目#314159-价格:31.99美元),那么:

  • 您会选择哪个标签来表示金额,并说明原因?
  • 应该将货币单位也放在自己的标签中吗?

我真的不想使用通用的内联元素,如<span class="income">1,200.00 €</span><span class="price">$ 31.99</span>,但目前我还没有找到相关参考。

6个回答

35

HTML规范中关于var的定义如下:

<var>元素表示一个变量。这可以是数学表达式或编程上下文中的实际变量,表示常量的标识符,函数参数,或者只是用作散文中占位符的术语。

对我来说,这意味着 <var> 不适合你所列举的价格。具体取决于你想要实现什么效果,但似乎你有以下几个选择:

  1. 使用微数据 (ref),例如使用Schema.org 的 offer 词汇表示一个产品的价格
  2. 如果您希望引起价格的注意而不指示其更重要,可以使用 <b> (ref)
  3. 如果价格很重要,例如明细收据的总价,可以使用 <strong>
  4. 如果需要使用一个元素来以不同的样式显示价格,但不适用 <b><strong>,可以使用带有类的 <span>
  5. 如果以上都不适用且您不想为价格设置样式,则不需要 进行任何操作

从你给出的例子中看来,似乎没有必要对价格进行标记。如果这些例子是来自显示财务信息的表格,请确保它们在由 <th scope="col">Income</th><th scope="col">Price</th> 表示的列中以供无障碍性访问。

希望这能帮到你!


不错 :) 看着 <b> 描述 “b 元素代表一段文本,为了实用目的而引起注意,而不传达任何额外的重要性”。如果我需要在页面上显示多个相同相关性的金额,则它可能是最合适的标记。 - Fabrizio Calderan
3
无论如何,我强烈建议引入一个标签 <amount> 以用于Web语义化目的。 :) - Fabrizio Calderan
3
为什么你想要一个元素来表示价格?你希望用它实现什么样的目标?仅仅为了增加“意义而增加意义”并不足以成为添加新元素的好理由,因此你需要提供一些使用案例和真实的好处... - Oli Studholme
7
我们已经有了时间和地址,为什么不加上货币呢? - squeezy
@fatsokol 这是迄今为止最有力的论据。我支持这个观点。 - pilau

14

查看HTML5规范,可以很清楚地发现价格不被认为是一个语义实体。我也同意这个观点。可以这样考虑:

如果有语义元素,那么结果应该是这样的

<p>
   I have 4 apples, 2 oranges and <money>5 <currency>dollars</currency></money>.
</p>

什么让5美元与2个橙子不同?我们也应该添加一个标签吗?
引用块: 你会选择哪个标签来表示金额,为什么?
使用带有class的,如果您想添加一些CSS。 因为没有人真正关心语义。很好,但实际上样式才是最重要的。
引用块: 货币也应该包含在自己的标签中吗?
绝对不是。
引用块: 我真的想避免使用通用的内联元素
为什么?
如果您想表达“货币的特殊性质”,则可以决定使用
引用块: i元素代表以替代声音或情绪的方式呈现的文本段落,或以表示文本的不同质量的方式偏离正常散文,... http://dev.w3.org/html5/spec/the-i-element.html

15
“……其实没有人太关心语义学。虽然很好,但在现实中,唯一重要的是风格。”- 真的吗? - Nathan Pitman
@NathanPitman 嗯,显然我有点夸张了。不过,像 addressdlsamp 这样的元素很少见,而 html 通常充斥着 div - user123444555621
@Pumbaa80 是的,这被认为是一种不好的做法;不应该鼓励这样做。 - jackvsworld
4
我知道这个回答已经近5年了,但是似乎像你描述的那样具有货币语义支持将成为加强加密货币可用性和安全性的重要功能。这几乎肯定也可以支持其他系统(例如Venmo、PayPal)。这将使像ShapeShift Lens这样的插件拥有更加流畅和安全的用户体验。 - Tyler Smith
1
这个例子故意将钱放在特定的语境中,因此它不需要被视为真正的货币。但也有些情况下,它确实具有特殊的意义。 - Izhar Aazmi

12

那么关于<data>呢?

<p>The price is <data class="money" value="100.00">$100</data>.</p>
根据HTML5规范

data元素表示其内容,同时在value属性中提供了一种机器可读的形式。

与微格式或微数据结合使用时,该元素用于为数据处理器提供机器可读值和为Web浏览器呈现提供人类可读值。在这种情况下,要在value属性中使用的格式由所使用的微格式或微数据词汇决定。

在这种情况下,您还可以使用微数据添加有关货币类型等其他信息。


这是一个很好的建议,也很可能是我在我的用例中要做的。这种方法允许灵活性(例如另一个答案中指出的水果与钱的争论),同时仍然允许应用程序增强典型的网络体验。 - Tyler Smith

4
我会在这里使用“定义列表”(definition list)

HTML <dl> 元素(或 HTML 描述列表元素)封装了一组术语和描述的对。该元素的常见用途是实现词汇表或显示元数据(键值对列表)。

<dl>
   <dt>Income:</dt>
   <dd>1.200,00 €</dd>
   <dt>Price:</dt>
   <dd>$31,99</dd>
</dl>

这种方法也适用于具有多个定义的情况,例如其他货币的价值,我喜欢这个。 - Neil

1

我也觉得没有比var更语义化的了:

<var>1.200,00 <abbr title="EUR"></abbr></var>

1
对于<abbr>来说是个好点,但我仍然对<var>有一些疑问:http://dev.w3.org/html5/spec/Overview.html#the-var-element 我认为数量不能被视为变量,也不能作为表达式/方程的一部分。例如,如果我必须列出价格,它们怎么能被视为变量呢? - Fabrizio Calderan
@FabrizioCalderan:我并不是说这是最语义化的东西,但对于会计师/经济学家来说,我认为他们可以将价格视为变量。无论如何,我认为你必须在spandldtdd之间进行选择。 - Alix Axel
2
虽然这在技术上是“语义化”的,但它所代表的语义并不是财务语义,这似乎是问题的精神所在。与varabbr等通用语义不同,在未来几年中拥有类似<money currency="EUR" value="120000" />或甚至(如另一个答案中建议的)<data class="money" value="120000" currency="EUR">€1.200,00</data>这样的东西将非常有用。 - Tyler Smith

-3
使用var标签。它被描述为:“变量或用户定义的文本”。
<var> </var>

5
“<var>”可以是数学表达式或编程环境中的变量,表示常量的标识符、函数参数或仅在文本中作为占位符使用的术语。但它似乎不适用于此目的。 - Fabrizio Calderan

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