【HTML】割引などの金額変更で打ち消し線を表現するためのマークアップ
公開日:2024-06-10
キーワード:
- s要素
- del要素
採用技術:
- TailwindCSS
文中の訂正や、既に事実とは異なることを表現する場合にはs
要素やdel
要素が用意されていますが、ECサイトなどの商品説明で割引を表すために元の金額に打ち消し線(取り消し線)を描く表現がしたいとき、どのようになっているのが良いかを検討します。
Web標準から考えるAnchor Link
ブラウザCSSに打ち消し線(text-decoration: line-through;
)が指定されている要素はs
要素とdel
要素がある。
いずれも文章を訂正したことを表すときに用いられる要素だが、2つの要素の大きな違いはコンテンツが文書から削除されているものであるかどうかにある。
s
要素は、正確ではなくなった情報や関連しなくなった情報を表すものだが、Webページの一部として必要な情報であることに変わりはない。現在はこうだが昔はこうだった、という情報を表すために必要な要素だ。
一方でdel
要素は文書からコンテンツが削除されたことを表すもので、修正履歴などをマークアップする際に用いられる。主に編集に関連する画面で活躍するものだ。
なお、ARIA in HTML(日本語版)を参照するといずれも暗黙のロールは削除されたコンテンツを示す「deletion
」である。
変更前の価格に打ち消し線を引きたい場合は、s
要素を採用するのが妥当だろう。
s
要素のサポート状況Anchor Link
s
要素は古くから存在する要素だが、アクセシビリティ・サポーテッドかどうかを確認しておく。
上記の例をブラウザがどう解釈しているのかを確認してみる。
Google Chromeは「ラーメン」の部分をdeletion
ロールとして解釈している。
Firefoxも同様だ。一方で、支援技術側のサポート状況は次のようになっている。
AT | Google Chromeでの読み上げ内容 |
---|---|
Voice Over (macOS 12) | 私は昨日、ラーメンお寿司を食べました。 |
Voice Over (iOS) | 私は昨日、ラーメンお寿司を食べました。 |
ナレーター (Windows10) | 私は昨日、ラーメンお寿司を食べました。 |
PC-Talker NEO (Windows10) | 私は昨日、ラーメンお寿司を食べました。 |
NVDA (Windows10) | 私は昨日、削除マークありラーメンお寿司を食べました。 |
セマンティクスとしてはs
要素を採用することが望ましいが、スクリーンリーダを利用するユーザにとって、手元で確認できる範囲ではほとんどのケースで意味がないことがわかる。ラーメンお寿司ってなんだろう。おいしいのかな。
実例を見てみるAnchor Link
一般的に価格の変更についてどのような実装になっているか、4つのWebサービスを調査してみた。金額表示部分以外については言及しないものとする。
AmazonAnchor Link
参考価格に打ち消し線が入った見た目になっているが、参考にしていた価格としては現在も正しい情報と解釈できるので、s
要素を採用する妥当性は低く感じる。
なお、実際の構造は以下の通りでs
要素は採用されていない。
<span>
<span>¥147,000</span>
<span aria-hidden="true">
<span>¥</span>
<span>147,000</span>
</span>
</span>
<div>
<span>参考: </span>
<span>
<span>¥161,700</span>
<span aria-hidden="true">¥161,700</span>
</span>
</div>
また、打ち消し線もtext-decoration
ではなく、疑似要素によって表現されている。
楽天市場Anchor Link
最終的な金額のみの表示か、「商品価格+送料−獲得予定ポイント」の表で価格が掲載されている。 セール価格の場合も同様で、通常価格や参考価格が書かれるパターンは見当たらなかった。
商品詳細画面には通常価格があるが、打ち消し線の表現はされていない。
<tr>
<td>
<div>当店通常価格</div>
<div>103,290</div>
<span>
<div>円</div>
</span>
</td>
</tr>
<tr>
<td>
<div></div>
<span>
<span>
<div>92,961</div>
</span>
<div>円</div>
</span>
<span>
<div>送料無料</div>
</span>
</td>
</tr>
Yahoo!ショッピングAnchor Link
商品一覧画面では通常価格は書かれておらず、セール表示のみ。
商品詳細画面ではメーカー希望小売価格が表示されており、打ち消し線が表示されている。
セマンティクスは以下の通りで、text-decoration
が用いられていた。
<p>メーカー希望小売価格 45,210円</p>
ZOZOTOWNAnchor Link
商品一覧画面では通常価格は書かれておらず、セール表示のみ。
商品詳細画面ではメーカー希望小売価格が表示されており、打ち消し線が表示されている。
div
要素とspan
のみでマークアップされおり、text-decoration
が用いられていた。
<div>
<span>¥7,920</span>(2024年5月27日時点の価格)
</div>
個人的なベストプラクティスAnchor Link
ワイヤーフレームの段階で調整ができるのであれば、素直にすべて文字列で表示するのが好みではある。こうなっていれば読み間違えることも少なく、スクリーンリーダユーザへの誤解も避けられる。また、著者がセール価格を重要だと考えるならばstrong
要素を採用できる。
<p>
<span>通常価格:¥3,000</span>
<strong>
<span>セール価格(税込):</span>
<span>¥1,980</span>
</strong>
</p>
もし元の価格に打ち消し線を引きたい場合は、s
要素を用いずにCSSのみで表現するのが妥当だろう。打ち消し線が引かれていても「元の金額」は正確でなくなった情報ではないためだ。
<p>
通常価格:<span class="line-through">¥3,000</span>
<strong>
<span class="sr-only">セール価格</span>¥1,980
</strong>
</p>
もっとシンプルに「現在の金額」「元の金額」だけの表示で、且つ元の金額を打ち消し線だけで表現したい場合は、スクリーンリーダ用の文字列を設置するとよいかもしれない。
<p>
<s>
<span class="sr-only">価格</span>¥3,000
</s>
<strong>
<span class="sr-only">セール価格</span>¥1,980
</strong>
</p>
なお、疑似要素でこれを再現しようとすると WCAG の達成基準 1.3.1 情報及び関係性(日本語版)に反することに注意が必要だ。