1. ホーム
  2. Web制作
  3. ヒントとコツ

IRCの取締役を務めています。

2022-01-01 14:35:58

ソースコード例です。

https://codepen.io/shadeed/pen/03caf6b36727accb692eecbc38f95d39?editors=1100

5. アクセシビリティが視認性に与える影響:非表示

要素は隠され、その子孫はアクセシビリティツリーから削除され、スクリーンリーダーはその要素をレンダリングしません。

(1) 位置決め

position属性を持つ要素を隠すには、画面外に移動し、サイズを0(幅と高さ)にする必要があります。例としては、ナビゲーションリンクのジャンプが挙げられます。次の図を考えてみてください。

リンクを画面外に配置するには、以下を追加します。

"css"

    (1) mkdir tmp
    (2). /configure --host=mips-linux-gnu --target=mips-linux-gnu --prefix=$PWD/tmp 
       CC=mips-linux-gnu-gcc CXX=mips-linux-gnu-g++
       CFLAGS=-I/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/include
       LDFLAGS=-L/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib
    (3) make -j4
    (4) make install

値-100%は、要素をビューポートの高さの100%に押し出します。その結果、完全に非表示になります。キーボードにフォーカスされると、このように表示されます。

  2. mkdir tmp
  3. . /configure --host=mips-linux-gnu --target=mips-linux-gnu --prefix=$PWD/tmp
    CC=mips-linux-gnu-gcc CXX=mips-linux-gnu-g++
    CFLAGS=-I/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/include
    LDFLAGS=-L/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib
    --with-jpeg (means add jpeg library)
    --includedir=/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/include
    --libdir=/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib

 インシデントのソースコードです。

https://codepen.io/shadeed/pen/707992e7c98ea633fc6606e576ef8a04?editors=0100

6. アクセシビリティの効果 position: absolute | fixed

この要素はスクリーンリーダーからアクセス可能で、キーボードもフォーカス可能です。それは単にビューポートから隠されています。

クリップパス要素にclip-pathを使用すると、どの部分を表示・非表示にするかを定義するクリッピング領域が作成されます。

画像

上記の例では、透明な黒い部分にclip-pathが設定されています。clip-pathを適用した場合、透明な黒い部分の下には何も表示されません。

上記をより視覚的に示すために、クリッピーツールを使ってみます。次のGIFでは、次のようなクリップパスがあります。

各方向のポリゴン値を0 0にすることで、切り出し領域が0にリサイズされ、その結果、画像が表示されなくなります。この場合も、多角形ではなく円形で行うことができます。

/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/bin/... /lib/gcc/mips-linux-gnu/4.7.2/... /... /... /... /mips-linux-gnu/bin/ld: warning: libz.so.1, needed by . /.libs/liblept.so, not found (try using -rpath or -rpath-link)
    . /.libs/liblept.so: undefined reference to `inflate'
    . /.libs/liblept.so: undefined reference to `powf'
    . /.libs/liblept.so: undefined reference to `ceil' .
    . /.libs/liblept.so: undefined reference to `atan2'
    . /.libs/liblept.so: undefined reference to `expf'
    . /.libs/liblept.so: undefined reference to `deflate'
    . /.libs/liblept.so: undefined reference to `floorf'
    . /.libs/liblept.so: undefined reference to `deflateInit_'
    . /.libs/liblept.so: undefined reference to `sin'
    . /.libs/liblept.so: undefined reference to `inflateEnd'
    . /.libs/liblept.so: undefined reference to `atan'
    . /.libs/liblept.so: undefined reference to `deflateEnd'
    . /.libs/liblept.so: undefined reference to `tan'
    . /.libs/liblept.so: undefined reference to `inflateInit_'
    . /.libs/liblept.so: undefined reference to `cos'
    . /.libs/liblept.so: undefined reference to `log'
    . /.libs/liblept.so: undefined reference to `sqrt' .
    collect2: error: ld returned 1 exit status

画像

7.アクセシビリティがクリップパスに与える影響

その

要素は視覚的に隠れるだけで、スクリーン・リーダーやキーボード・フォーカスはそのまま使用できます。 そのため

ソースコードの例です。

https://codepen.io/shadeed/pen/9fdbd7be9fd9dac17a614c96ba7f64b1?editors=0100

3、色とフォントサイズをコントロールする

この2つのテクニックは、先に説明したテクニックほど一般的ではありませんが、特定のユースケースには有効でしょう。

1. 色の透明度

文字の色を透明にすることで、文字が見えなくなります。アイコンのみのボタンに有効です。

2. 文字サイズ

また、フォントサイズを0に設定すると、視覚的に文字が隠れるので便利です。次のような構造のボタンがある例で考えてみましょう。

      (1) LIBS =
          -> LIBS = -lm
      (2) ZLIB_LIBS =
          -> ZLIB_LIBS = -lz
      (3) LDFLAGS = -L/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/mips-linux-gnu/libc/lib
               -L/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib

私たちの目標は、アクセシブルな方法でテキストを隠すことです。そのために、以下のCSSを追加しました。

1. ./autogen.sh
  2. mkdir tmp
  3. ./configure --host=mips-linux-gnu --target=mips-linux-gnu --prefix=$PWD/tmp
    CC=mips-linux-gnu-gcc CXX=mips-linux-gnu-g++
    CFLAGS=-I/home/newton_linux/prebuilts/toolchains/mips-gcc472- glibc216/include
    LDFLAGS=-L/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib

こうすると、文字が隠れます。色を変えなくても機能するのですが、説明のために追加してみました。

画像

ソースコードの例です。

https://codepen.io/shadeed/pen/4eacdf50c3339fced7f787156c569372?editors=1100

3. アリア・ヒドゥン

aria-hidden属性が要素に追加されると、アクセシビリティツリーからその要素が削除され、スクリーン・リーダーのユーザーの使い勝手が向上します。視覚的に要素を隠すのではなく、スクリーン・リーダーの利用者のみを対象とすることに注意してください。

    ./configure --host=mips-linux-gnu --target=mips-linux-gnu --prefix=$PWD/tmp
    CC=mips-linux-gnu-gcc CXX=mips-linux-gnu-g++
    CFLAGS=-I/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/include
    LDFLAGS=-L/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib
    LIBLEPT_HEADERSDIR=/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/include (指定leptonica库路径)

上の例では、ラベルとアイコンを持つメニューボタンがあります。スクリーン・リーダーからアイコンを隠すために、aria-hiddenが追加されています。

Mozilla Developer Network (MDN) によると、このプロパティのユースケースは以下の通りです。

  • アイコンや画像などの装飾的なコンテンツを非表示にする。
  • {を使用します。 コピーしたテキストを非表示にします。 {を使用します。  画面外や折りたたまれたコンテンツを非表示にします。

4. アクセシビリティがもたらす効果 aria-hidden="true"

は、スクリーン・リーダーからコンテンツを隠すだけなので、スクリーン・リーダーのために設計されています。しかし、目の見えるユーザーにはコンテンツが表示され、キーボードにフォーカスを当てることができます。

(1) アニメーションとインタラクション

隠れている要素を動かしたいとき、例えば、隠れているモバイルナビゲーションを表示したいとき、アクセシブルな方法で行う必要があります。アクセシブルな体験を得るために、スクリーン・リーダーのユーザーに悪い経験をさせるかもしれない間違いをしないよう、見習うべき良い例と悪い例を探ります。

メニューアニメーション - 悪い例

メニューを展開したときにスライドするアニメーションが必要なものがあります。これを行う最も簡単な方法は、メニューに次のように追加することです。

        Überprüfung auf leptonica... ja
        Überprüfung auf pixCreate in -llept... nein
        configure: Fehler: Leptonica-Bibliothek fehlt

以上により、メニューは.activeクラスに従って展開・折りたたみされることになりますが、このクラスは以下のようにJavaScriptで追加されることになります。

         * if test "x$ac_cv_lib_lept_pixCreate" = xyes; then :
            cat >>confdefs.h <<_ACEOF
            #define HAVE_LIBLEPT 1
            _ACEOF
            LIBS="-llept $LIBS"
          * else
            * as_fn_error $? "leptonica library missing" "$LINENO" 5
          * fi

画像

この結果、見た目は良いのですが、大きなバグがあります。opacity: 0を使用しても、アクセシビリティツリーのナビゲーションは隠れません。ナビゲーションが視覚的に隠されていても、キーボードからフォーカスすることができ、スクリーン・リーダーからアクセスすることができます。ユーザーを混乱させないためには、隠さなければなりません。

以下は、Chromeデベロッパーツールのアクセシビリティツリーのスクリーンショットです。

画像

つまり、アクセシビリティ・ツリーとは、スクリーン・リーダーのユーザーがアクセス可能なすべてのコンテンツのリストです。この例では、ナビゲーション・リストが存在し、視覚的に隠されています。2つの問題を解決する必要があります。

  • メニューが隠れているときに、キーボードでフォーカスを合わせることを避けることができる
  • ナビゲーションが非表示の場合、スクリーンリーダーによるナビゲーションを通知しないようにする。

下のスクリーンショットは、Mac OSのVoiceOverローターでページがどのように見えるかを示したものです。ナビゲーションリストは非表示でも存在します

画像

ソースコードの例です。

https://codepen.io/shadeed/pen/e94f377dae6104fe45a71c80d59bb58d?editors=0100

メニューアニメーション - 良い例

このバグを修正するためには、ナビゲーションメニューにvisibility: hiddenを使用する必要があります。これにより、メニューが視界やスクリーンリーダーから隠されるようになります。

"css"

    export LD_LIBRARY_PATH=/home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216:
                 /home/newton_linux/prebuilts/toolchains/mips-gcc472-glibc216/lib

一度追加すると、メニューはスクリーンリーダーから隠されます。VoiceOverが何を表示するか、もう一度テストしてみましょう。

画像

ソースコードの例です。

https://codepen.io/shadeed/pen/e94f377dae6104fe45a71c80d59bb58d?editors=0110

5. カスタムチェックボックス

デフォルトのチェックボックスのデザインはカスタマイズしにくいので、チェックボックスのカスタムデザインを作成する必要があります。基本的なHTMLを見てみましょう。

      svutil.cpp: In statischer Mitgliedsfunktion 'static void SVSync::StartProcess(const char*, const char*)':
      svutil.cpp:89:18: error: 'fork' was not declared in this scope
      svutil.cpp:119:28: Fehler: 'execvp' wurde nicht in diesem Bereich deklariert
      svutil.cpp: In der Mitgliedsfunktion 'void SVNetwork::Close()':
      svutil.cpp:262:16: Fehler: 'close' wurde nicht in diesem Bereich deklariert
      svutil.cpp: Im Konstruktor 'SVNetwork::SVNetwork(const char*, int)':
      svutil.cpp:417:14: error: 'sleep' was not declared in this scope

チェックボックスをカスタマイズするには、アクセシブルな方法で入力を隠す必要があります。そのためには、positionなどのプロパティを使用する必要があります。sr-only または visual -hidden という一般的な CSS クラスがあり、これは視覚的にのみ要素を隠し、キーボードやスクリーンリーダーの利用者がアクセスできるようにします。

    export TESSDATA_PREFIX=/alg

インシデントのソースコードです。 https://codepen.io/shadeed/pen/b722aa72dbe3574617f6506d14e5ac03?editors=1100

ボタン非表示

画像

Twitterでは、「新しいツイートを見る」というボタンがあり、アリア隠しのあるスクリーンリーダーでは非表示になり、新しいツイートがあるときだけ表示されます。

概要

以上、Webで要素を隠す方法とチュートリアルのメリット・デメリットをご紹介しました。