1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

きっかけ

4月に弊社がアクセシビリティプロジェクトを立ち上げた事もあり、日々のプロダクトに対するアクセシビリティの課題に取り組んでおります。

上記の記事でも書かれていますが、2024/7/5のような日付はにせんにじゅうよん すらっしゅ なな すらっしゅ ごとVoiceOverに読まれてしまいます。

VoiceOverの画像「2024/7/5」と書かれている

ではtimeタグにしてdatetimeに正しい文字をいれてみてはどうかと考えました。

<time datetime="2024年7月5日">2024/7/5</time>

それでもVoiceOverでの読み上げはにせんにじゅうよん すらっしゅ なな すらっしゅ ごです。

そこで「aria-labelが使えないタグで読み上げを設定したいときの対処方法」の記事にも書いてあった実装方法を応用したコンポーネントを作成してみました。

実際のコード

ReadItem.tsx
import { css } from "@emotion/css" //css in jsはemotionを使っています
import { ReactNode, ElementType, AllHTMLAttributes } from "react"

interface Props extends AllHTMLAttributes<HTMLElement> {
  children: ReactNode
  readText: string
  tagType: ElementType
}

export const ReadItem = ({
  children,
  readText,
  tagType: Tag = 'span',
  ...props
}: Props) => {
  return (
    <>
      <Tag {...props} aria-hidden="true">
        {children}
      </Tag>
      <span css={hasAriaLabelStyle}>{readText}</span>
    </>
  )
}

const hasAriaLabelStyle = css({
  transform: 'scale(0,0)',
  position: 'absolute',
})

Propsにchildrenと読み上げ用のreadText、HTML要素も汎用的に変更できるようにtagTypeを渡しています。
ではこのコンポーネントを使用して先程の日付を読み上げるように文章をつくってみます。

App.tsx

import { ReadItem } from "./ReadText";

export default function App() {
  return (
    <div className="App">
      <p>
        <ReadItem
          tagType="time"
          readText="2024年7月24日"
          dateTime="2024年7月24日"
        >
          2024/7/24
        </ReadItem>
        は土用の丑の日
      </p>
    </div>
  );
}

実際のHTMLではこんな感じになっています。

<p>
    <time datetime="2024年7月24日" aria-hidden="true">2024/7/24</time>
    <span class="css-1afofdy">2024年7月24日</span>
    は土用の丑の日
</p>

VoiceOverでも正しく読まれたようです。

VoiceOverの画像「2024年7月24日は土用の丑の日」と書かれている

実際に作成したdemoがこちらです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?