モーダルを閉じたときに出る警告は消すより順番を直す

つくば市のホームページ制作会社

モーダルウィンドウを閉じた瞬間、Chromeの開発者ツールのコンソールに黄色い警告が出る。Bootstrapでも、Angularでも、Ionicでも、同じ文面が出てくるおなじみのものです。検索すると一行で黙らせる方法がすぐ見つかるので、深く考えずに入れてしまった経験がある方も多いのではないでしょうか。

CSS-Tricksに、この警告は正しく、よく出回っている直し方のほとんどは使う人を困らせる方向に働いている、と正面から論じた記事が掲載されました。表示の崩れとして目に見えない不具合だけに、制作の現場では見落としやすい話です。

警告が伝えているのはフォーカスの置き去り

問題の中心は、aria-hidden という属性の性質にあります。この属性は要素をスクリーンリーダーなどの支援技術から見えなくしますが、キーボードでのフォーカス移動からは外しません。つまり、読み上げの対象からは消えているのに、Tabキーでは到達できる、という食い違いが起こり得ます。

モーダルを閉じる処理でよくあるのが、先に外側の枠へ aria-hidden を付けてフェードアウトを始め、アニメーションが終わってから元のボタンにフォーカスを戻す、という順番です。この間、閉じるボタンにはまだフォーカスが残っています。記事によると、Chromeはこの状態を見つけると指定された非表示を実際には適用せず、読み上げ側に中身を見せたままにしたうえで警告を出しているとのことです。コンソールの表示はお知らせではなく、書いたマークアップをブラウザが上書きしたという報告だと捉えたほうが実態に近いようです。

よく見かける直し方が使う人を置き去りにする

検索上位によく出てくるのが、閉じる処理の中で document.activeElement.blur() を呼ぶ一行です。確かに警告は消えます。ただ、フォーカスはどこにも移らず、ブラウザはページ全体の body に落とします。マウスで操作している人には何も起きていないように見えますが、キーボードやスクリーンリーダーで操作している人は、読み上げが途切れたうえに、次のTabでページの先頭からやり直すことになります。記事では、フォーカスの順序に関するWCAGの達成基準2.4.3に反する状態だと指摘しています。

ほかにも、setTimeout などで処理を少し遅らせる方法、aria-hidden 自体を取り除く方法、Radixやshadcnでモーダル扱いそのものを外してしまう設定などが紹介されていますが、いずれも警告を静かにする代わりに別の不都合を生むとされています。遅らせる方法は処理の重い端末で失敗が不定期に出るようになり、属性を外す方法はモーダルを開いている最中に背後のページを操作できてしまいます。

筆者自身もこの一行を入れて出荷し、後日の利用者テストでスクリーンリーダー利用者がページの先頭から延々とTabを押して元の場所へ戻る様子を見て、ようやく意味に気付いたと書いています。自動のアクセシビリティ検査も静止した状態のマークアップを見るため、この種の順番の不具合は通ってしまう、という指摘は制作側として耳が痛いところです。

閉じるときの手順を並べ替える

記事が示す正しい直し方は、新しい部品を足すことではなく、閉じる処理の順番を入れ替えることです。要点は、隠す領域からフォーカスを先に出してから隠す、の一点に集約されます。手順としては次の流れになります。

  • 開いている間に背後のページへ付けていた inert を先に外す
  • モーダルを開いたボタンへ、その場でフォーカスを戻す
  • 閉じかけているモーダル自体には aria-hidden ではなく inert を付け、クリックも受け付けないようにしてからフェードアウトさせる
  • アニメーションが終わった時点で要素を取り除く

inert は読み上げの対象からも、フォーカス移動からも、クリックからも要素を外す属性なので、フェード中の抜け殻を安全に扱えます。また、開いたボタンそのものは開く処理の時点で記録しておく必要があります。フォーカスをモーダルの中へ移したあとでは、どこから来たのかが分からなくなるためです。

加えて、動きを減らす設定の利用者のようにアニメーション自体が走らない場合、終了を知らせるイベントが来ないまま要素が残り続けるという落とし穴も挙げられています。削除した行のメニューから開いたモーダルのように、戻り先のボタンがもう無い場合に備えて、代わりの戻り先を用意しておくことも勧められています。

新しく作るなら標準のdialog要素が近道

記事の冒頭で真っ先に勧められているのが、HTML標準の dialog 要素を showModal() で開く方法です。この場合、フォーカスの受け渡しや背後の操作不能化はブラウザが引き受けてくれるため、今回のような不具合はほぼ起きなくなるとされています。Bootstrapも次の大きな版で自前の処理をやめ、この標準の仕組みに寄せたと紹介されています。

中小企業のサイトでも、お問い合わせの確認画面や画像の拡大表示など、モーダルは意外と多く使われています。既存のライブラリをすぐに入れ替えられない場合でも、閉じる処理でフォーカスがどこへ戻るかをキーボードだけで一度確かめてみる価値はありそうです。コンソールをきれいにすることが目的になっていないか、改めて見直すきっかけになる記事でした。

押しやすさや再入力の手間まで見る新しい指針

つくば市のホームページ制作会社

ウェブサイトの使いやすさを測る物差しが、欧州で一段新しいものに切り替わろうとしている。情報通信技術のアクセシビリティ要件を定めた欧州規格EN 301 549の新しい版が2026年9月に公開され、参照する指針がWCAG 2.1からWCAG 2.2へと改められた。

規格の版が上がっただけと言えばそれまでだが、中身を見ていくと、派手な新機能の話ではなく、日々の制作でつい後回しにしがちな部分が並んでいる。法令の直接の対象になるかどうかとは別に、自分たちのサイトを点検する材料として読む価値がありそうだ。

欧州の参照先が入れ替わる準備が進んだ

新版のEN 301 549 V4.1.1は、ウェブコンテンツだけでなく、ソフトウェアや電子文書に対する要件もWCAG 2.2に合わせて更新されている。公開元の説明によると、欧州アクセシビリティ法を明確に意識して作られた最初の版でもあり、規格の要件と同法の要求事項を結びつける附属書が新しく加わったという。

ただし、公開されたからといってすぐに法的な基準が切り替わるわけではない。欧州委員会が官報で新版を正式に引用するまでは、2021年の版であるV3.2.1、つまりWCAG 2.1のレベルAAが参照される基準として残る。正式に引用された後は、新版に適合していれば欧州アクセシビリティ法とウェブアクセシビリティ指令の両方に適合しているとみなされる扱いになる。

言い換えると、いま慌てて何かを差し替える必要はない。その一方で、欧州が向かう先がWCAG 2.2だとはっきりしたので、準備を始めるなら目標は定まったことになる。

増えた達成基準はどれも地味で実務的

WCAG 2.1と比べると、ウェブコンテンツ向けにはレベルAとAAの達成基準が六つ増えている。キーボードのフォーカスが他の要素に覆い隠されないこと、ドラッグ操作に代わる手段を用意すること、クリックやタップの対象を一定の大きさに保つこと、ヘルプへの導線を各ページで同じように置くこと、同じ情報を何度も入力させないこと、そして認証で記憶や謎解きに頼らせないこと。並べてみると、どれも新しい技術の話ではなく、作り方の話だと分かる。

たとえばクリック対象の大きさは24×24ピクセルが目安になるが、周囲に他の対象が近接していない場合や、同じ機能を別の適合した方法でも実行できる場合、文章やリストの中のリンクである場合などは除外される。ドラッグについても、並べ替えのような操作をドラッグ以外の単一のポインタ操作でも達成できるようにすることが求められ、ドラッグそのものが本質的な機能である場合は対象外になる。

再入力に関する基準は、ひとつの手続きの途中で同じ情報を書かせる場面を想定している。前に入力した内容を自動で埋めるか、選べるようにするのが基本で、安全上の問題がある場合や、以前の情報がもう有効でない場合は例外として扱われる。

中小企業のサイトで先に引っかかりやすいところ

この六つを実際のサイトに当てはめると、引っかかりやすい場所はだいたい決まっている。画面上部に固定したヘッダーや同意を求めるバーは、キーボードで送っていったフォーカスを覆い隠しやすい。スマートフォン向けに詰めて配置した小さなアイコンは、対象の大きさの目安を下回りやすい。

問い合わせフォームも見どころが多い。確認画面から戻ったときに入力内容が消える作りは、再入力に関する基準から見ると改善の余地がある。パスワードの貼り付けを禁止する設定も、記憶に頼らせない方向とは逆を向いている。ヘルプや連絡先の置き場所がページによってばらばらというサイトも珍しくない。

どれも大規模な作り直しを必要とする話ではない。固定ヘッダーの高さの分だけスクロール位置をずらす、アイコンの間隔を少し空ける、入力値を保持する。こうした細かい修正の積み重ねで届く範囲がかなりある。

法令の対象でなくても点検の材料になる

欧州の規格なので、国内の中小企業サイトが直接その適用を受ける場面は限られる。ただ、欧州向けに商品やサービスを販売しているなら無関係とは言えないし、この動きは欧州だけにとどまらない。オーストラリアの規格も欧州規格を土台にしており、現時点ではWCAG 2.1を参照しているが、今後の改訂で新しい版を取り込む可能性が指摘されている。

公開元が当面の準備として挙げているのは、サイトと電子文書をWCAG 2.2の観点で見直すこと、検査の手順や点検表を更新すること、調達の条件や発注先への要求を見直すことなどだ。制作を請け負う側からすると、最後の項目が効いてくる。発注元の点検表が更新されれば、納品物に求められる水準もそこに合わせて動く。

期限が切られているわけではないので、次に作るサイトから少しずつ織り込んでいけば足りる。フォーカスが隠れていないか、指で押せる大きさか、同じことを二度書かせていないか。基準の番号を覚えるより先に、その三つを手元の画面で確かめてみるところからでいいと思う。

HTMLの冒頭に置く定番タグが少し入れ替わった

つくば市のホームページ制作会社

新しいサイトを組むとき、HTMLの冒頭に置く head の中身は、たいてい前の案件から丸ごと持ってきます。文字コードの宣言、viewport、favicon、OGP。一度決めたら数年は触らない部分です。

そのhead部分の雛形を、ウェブ開発者のManuel Matuzović氏が更新して公開しました。前に同じものを出したのが5年前で、その間にHTMLまわりでいろいろ動きがあったので作り直した、という趣旨です。一行ずつ「なぜ必要か」「必須か任意か」が添えられていて、自分たちのテンプレートと見比べるのにちょうどいい内容でした。

まず変わっていないところ

土台の部分は拍子抜けするほど変わっていません。doctypeは、HTMLが版を切らない仕様になった今も、互換性のために書いておく必要があります。html要素のlang属性は、氏が「HTMLでもっとも重要な属性のひとつ」と書くほど扱いが重く、読み上げソフトの発音から翻訳の判定まで幅広く影響します。日本語サイトならjaと書く、それだけの話ですが、英語圏のテンプレートを借りてきてenのままになっている例は今でも見かけます。

meta charsetをtitleより前に置く、という順番の指定も残っています。後ろに置くとページタイトルの文字が化けることがあるためです。印刷用のスタイルシートをmedia=”print”で読み込ませておく話も健在で、「今でも人はウェブページを印刷する」という理由づけには納得させられました。

減った指定と、増えた指定

viewportの指定は width=device-width だけでよく、長らく定番だった initial-scale=1 はもう要らない、というのが氏の見解です。あれは古い版のiOSやAndroidのために必要だったもので、今の環境では出番がないはずだ、と。ただし「まだ必要な場面があった気がする」という声が時々届くとも書いていて、付けておいても害はない、と結んでいます。この歯切れの悪さはむしろ正直で、好感が持てます。

スクリプトの読み込みは、type=”module” を既定にするよう勧めています。moduleを付けると、文書の解析が終わったあと、DOMContentLoadedが発火する前に実行される形になり、deferに近い挙動が暗黙に入ります。表示を止めてまで先に走らせたい理由がないなら、こちらでいいという整理です。

端末の文字サイズ設定を受け取るmetaタグ

今回いちばん目を引いたのが、text-scale という新しいmetaタグでした。

スマートフォンの設定で文字を大きくしても、ウェブページの文字は大きくならない。この挙動に覚えのある方は多いはずです。実際、ChromeもiOSのブラウザも、OSの文字サイズ設定をウェブの中身には反映していません。AndroidのFirefoxだけは反応しますが、あれは文字だけでなくページ全体を拡大する処理なので、メディアクエリのブレークポイントまで一緒に動いてしまいます。

このタグに scale を指定すると、ルート要素の初期font-sizeが、OSやブラウザの文字サイズ設定に比例して伸び縮みするようになります。効くのはremやemで指定した文字だけで、pxで固定した文字は動きません。MDNの解説では、ルートのfont-sizeを16pxのような絶対値で上書きしないこと、サイズ指定は相対単位かキーワードで書くことが、使用の前提として挙げられています。

ただし現状は実験的な機能で、Baselineには入っていません。そして何より、MDNにも本人のブログにも同じ注意が書かれています。入れる前にテストすること。モバイルには文字サイズを200%から300%以上まで上げる設定があり、そこまで伸ばしても崩れないかを確かめずに入れると、横スクロールが出たり文字が重なったりします。氏自身、自分のサイトで横スクロールが発生したと書いていました。

アイコンまわりは相変わらず手間がかかる

faviconは、icoとsvgの両方をlinkで書いておくのが無難だという話も出てきます。SVGのアイコンを定義すると、ブラウザがサイト直下のfavicon.icoへ自動で戻ってくれなくなり、古い環境ではアイコンが表示されない場合があるためです。SVGにする利点は、拡大しても粗くならないことと、SVGの中にCSSを書けるのでダークモード用の色を持たせられることです。

Androidのホーム画面用にはwebmanifestが要り、丸く切り抜かれる表示に備えたmaskable指定のアイコンでは、絵柄を中央の約80%に収めておく必要があります。theme-colorはSafariの26から扱いが変わり、指定した色ではなく、bodyの背景色や画面上部に固定された要素の色が使われるようになりました。

ひとつひとつは小さな話ですが、この手の雛形は一度作ると数年そのまま動き続けます。地方の制作現場でも、中小企業のサイトほど制作時のテンプレートが何年も引き継がれていきます。新規案件に着手する前に一度だけ見比べておくと、要らない一行を落とし、入れておくべき一行を足すきっかけになるはずです。

タブに添えた閉じるボタンを読み上げに伝えるARIAの新しい属性

つくば市のホームページ制作会社

Chromeの安定版151が7月28日に公開された。大型の目玉機能というより細かい追加が並ぶ回だったが、そのなかにaria-actionsという属性が入っていて、これは現場の作り方に素直に馴染みそうだと感じた。ある要素に付き添っている別の操作ボタンの存在を、スクリーンリーダーなどの支援技術に伝えるための指定である。Chromeのリリースノートによると、W3CのARIA仕様に沿った形で実装されたとされている。

想定されている典型例は、タブの見出しに小さく付いている閉じるボタンだ。マウスで操作していれば見えているので迷わないが、キーボードと読み上げでたどっている人には、そのタブに閉じる手段が添えられていること自体が伝わりにくい。メールの一覧行に並ぶアーカイブや削除のボタン、カード型のリストに乗った編集ボタンなども同じ構図になる。主となる要素と、その脇に置かれた操作との関係を機械が読み取る手がかりがなく、支援技術の側から見つけづらいことは、以前から課題として挙げられていた部分だ。近くにボタンが置いてあることは、画面上の距離では明らかでも、読み上げの順番のなかでは伝わらない。結果として、タブ移動を重ねて偶然行き当たるまで存在に気づけない、という状態が起きていた。

既存のマークアップを壊さずに足せる

使い方は他のARIA属性と似ていて、主となる要素から、関連するボタンのidを指すだけでよい。属性を足しても見た目やクリックの挙動は変わらず、対応していないブラウザは単に無視する。既存のコンポーネントに後から付け足す形で試せるので、導入の判断はしやすい。開発者ツール側でも、他のid参照型のARIA属性と同じように、参照先がどの要素を指しているかを確認できるようになっている。W3C側の仕様もほぼ固まっており、Firefoxはすでに対応済み、WebKitは試作の段階と伝えられている。ChromeはまずWindows、Mac、Linuxのデスクトップで有効になり、モバイル向けは後続になるとのことだ。

もっとも、属性を書けばすぐ読み上げが変わるという話ではない。支援技術の側がこの関係をどう利用者に案内するかは、各社の実装がこれから揃っていく段階にある。ただMicrosoftのUI部品群を手がけるチームが早い時期の取り込みに前向きだと伝えられており、部品ライブラリ経由で静かに広まっていく類の機能ではありそうだ。自前でタブやリストのUIを組んでいるなら、仕様の様子を眺めておく価値はある。

中小企業のサイトでも、同じ形はあちこちにある。予約フォームの入力欄に添えたクリアボタン、実績一覧のカードに置いた詳細ボタン、通知バーの右端にある閉じる印。どれも見えている人には自明で、見えていない人には気づきにくい。ARIAは足しすぎるとかえって読み上げを濁らせるので万能ではないが、これまで説明のしようがなかった関係を素直に書ける手段が増えたのは、地味ながらありがたい変化だと思う。

ふりがなが隣の文字に重なるのを抑えるCSSの新しい指定

つくば市のホームページ制作会社

日本語のページを組んでいると、ふりがな、つまりルビの扱いで地味に手を取られることがある。難読の地名や人名に読みを添えたい、子ども向けや自治体のページで漢字に読みを振りたい、といった要望は今も普通に出てくる。HTMLにはもともと ruby 要素があり、<ruby>石動<rt>いするぎ</rt></ruby> のように書けば親字の上に読みが乗る。ところが実際に組んでみると、読みのほうが親字より長いときの見え方がブラウザまかせになりがちで、そこを細かく指定する手段が長らく足りていなかった。Chromeのベータ版に入った新しいCSSプロパティは、その足りなかった部分をひとつ埋めるものになっている。

ルビは日本語サイトの地味な難所

ルビの厄介さは、親字と読みの長さが一致しないところにある。二文字の漢字に四文字の読みを振れば、読みの側が横にあふれる。ブラウザはこのあふれた分を隣の文字の上に少しはみ出させて表示することが多い。行がむやみに間延びしないので、組版としてはむしろ自然な処理だ。

問題は、そのはみ出しが常に望ましいとは限らないことだった。隣にリンクや強調が続いていると読みが重なって見えづらくなる。狭いカラムや表のセルの中では、はみ出しのせいで折り返し位置が予想と変わる。逆にはみ出しを一切許さないと、親字と読みの幅を揃えるために文字間が広がり、本文の中でその部分だけ間延びして見える。どちらを選ぶかは文脈次第で、これまではCSSからその判断を伝える標準的な手段がなかった。制作側は文字サイズを下げる、ルビを画像にする、そもそもルビをあきらめるといった回り道をしてきた。

はみ出しの許し方を選べるruby-overhang

Chrome 151のベータで加わったのが ruby-overhang というプロパティで、ルビが隣にはみ出すことを許すかどうかを書き手が指定できる。初期値は auto で、これは従来どおりブラウザの判断ではみ出しを許す振る舞いにあたる。隣にも別のルビが並んでいる場合など、重なると読めなくなる状況では自動的にはみ出さない、といった配慮も仕様に含まれている。

もうひとつの値が spaces で、はみ出してよい相手を空白と約物、つまり句読点やかっこの類に限る。隣が普通の文字なら、はみ出さずにその手前で止まる。Chromeの説明によれば none は spaces の別名として扱われ、はみ出しを完全に禁じた結果として不自然な隙間ができるのを避ける形になっている。この none の解釈は資料によって記述が揃っていない段階なので、実際の見え方は手元で確かめておきたいところだ。

書き方そのものは短い。読みが隣の文字に重なると困る箇所に ruby-overhang: spaces; を当てるだけで、あとはブラウザが処理してくれる。JavaScriptで文字幅を測って調整する、といった作業はいらない。

位置や揃え方を決める指定との組み合わせ

ルビまわりのCSSは、これが最初というわけではない。読みを親字の上に置くか下に置くかを決める ruby-position、親字に対して読みをどう割り付けるかを決める ruby-align は以前から使える。縦書きで読みを右側に出したい、読みを親字の幅いっぱいに散らしたい、といった調整はこれらが受け持つ。

今回の指定は、そこに「隣との境界をどう扱うか」という軸を足すものだと考えるとわかりやすい。位置と揃え方を決めたうえで、あふれた分を外に出してよいかどうかを別に決められる。組み合わせると、たとえば見出しの中のルビははみ出しを許して行の高さを保ち、本文の狭い箇所でははみ出しを止める、といった使い分けができる。

現時点で試すときの構え

ruby-overhang は主要ブラウザすべてに揃った状態ではなく、Baselineの対象にもなっていない。Chromeでもまだ安定版ではなくベータの段階にある。今すぐ本番の見た目を左右する前提で組むものではない、というのが正直なところだ。

とはいえ、対応していないブラウザではこの指定が無視されるだけで、ルビ自体は従来どおり表示される。壊れるのではなく、これまでの見え方に戻るだけなので、段階的に足していける類の機能になる。ルビを多用しているページがあるなら、対応済みのブラウザで spaces を当てたときにどう変わるかを一度見ておくと、将来の判断が早くなる。

中小企業のサイトでルビが主役になる場面は多くないが、社名や商品名の読み、地域名、業界特有の用語など、読みを添えたい単語は意外とある。読みを振ると崩れるから避ける、という選択をしてきた現場ほど、こうした指定が揃ってきたことの意味は大きい。日本語の組版に関わる指定がウェブ標準の側で少しずつ整っていくのは、地味だが歓迎したい流れだ。

ホバーや押したときの見た目をコードなしで整えるWordPressの新機能

つくば市のホームページ制作会社

ボタンにマウスを載せたら色が変わる、リンクにキーボードのフォーカスが当たったら枠線が出る。ウェブサイトではごく当たり前の動きですが、WordPressのブロックエディタでこれを整えようとすると、これまでは追加CSSの欄にセレクタを書き足すか、テーマのスタイルシートを直接触るしかありませんでした。次のバージョンで、ここに標準の指定方法が入ります。

7月15日に公開された7.1のベータ1の告知では、ブロックが操作にどう反応するかを、サイト全体の設定と個々のブロックの両方で共通のコントロールから指定できるようになる、と説明されています。派手さはありませんが、制作側と運用側の分担にじわじわ効いてくる種類の変更です。正式リリースは8月19日、WordCamp USに合わせた日程が示されています。

これまでは追加CSS頼みだった領域

ホバーやフォーカスといった状態ごとの見た目は、CSSでは擬似クラス(:hover、:focus、:active)で書く領域です。ブロックエディタのサイドバーには色やタイポグラフィの入り口はあっても、状態別の入り口はありませんでした。結果として、テーマが用意した見た目をそのまま受け入れるか、追加CSSで上書きするかの二択になります。

後者はセレクタの書き分けが面倒でした。サイト全体のボタンをまとめて変えるのは比較的簡単でも、あるページの一つのボタンだけ挙動を変えたいとなると、そのブロックに固有のクラスを振り、そのクラス向けの記述を足すことになります。運用担当の方が触れる範囲ではなく、結局は制作会社への小さな依頼として積み上がっていく部分でした。

この標準化はGutenbergのリポジトリで数年前から要望が出ていたもので、ようやく本体に入る形になります。

全体にも一つのブロックにも当てられる

今回の仕組みで押さえておきたいのは、適用範囲が二段構えになっている点です。グローバルスタイル側で指定すればサイト全体のボタンの反応が揃い、個別のブロック側で指定すればその一つだけが別の反応になります。テーマの土台は崩さないまま、例外だけを局所的に作れるということです。

もう一つ、フォーカス時の見た目を編集画面から扱えるようになる意味は小さくありません。キーボードだけでサイトを操作する人にとって、今どこにいるかを示す枠線は迷子にならないための唯一の手がかりです。装飾を優先してこの表示を消してしまう実装は今も見かけますが、逆に言えば、消すのではなく背景色に対して見やすい色に調整するという判断を、コードを触らない担当者でもできるようになります。

対応するブロックはまず限られる

期待しすぎないほうがよい部分もあります。ベータの段階で状態指定に対応しているのはボタンとナビゲーションリンクなど、対象はまだ絞られています。すべてのブロックに広がるのはこの先の版で、本体側でも段階的に範囲を広げていく方針が示されています。

また、テーマ開発の側ではtheme.jsonから擬似要素を扱えるようにする整備も並行して進んでいます。編集画面のコントロールとテーマの定義ファイル、両方から状態のスタイルを扱えるようにしていく流れの一部と見ておくと、位置づけを取り違えずに済みます。開発者向けの月次まとめでも、この周辺は7.1の柱の一つとして扱われています。

更新前に確認しておきたいところ

実務で気をつけたいのは、既存サイトで追加CSSを使ってホバーの見た目を上書きしている場合です。新しいコントロールから指定した内容と、これまで書いてきた記述が重なると、どちらが勝つかは書き方次第になります。更新のタイミングで、追加CSSにどんな状態指定が残っているかを一度洗い出しておくと、後から原因を探す手間が減ります。

本番にいきなり当てるのではなく、複製した検証環境で主要なページを一通り見てから、というのはこの種の更新では毎回変わらない手順です。ボタンとナビゲーションが対象である以上、影響が出るとしたら問い合わせ導線やグローバルメニューという、サイトの中でも動いてほしくない場所になります。

小さな見た目の調整を運用側で完結できる範囲が広がるのは、更新を続けていくサイトにとっては地味に効きます。制作時に決めた見た目を固定するのではなく、運用しながら少しずつ手を入れられる状態にしておく。ブロックエディタが年々進んでいる方向は、おおむねそこに向いているように見えます。

開閉するUIをブラウザ標準で作る、open擬似クラスが揃える最後のピース

つくば市のホームページ制作会社

ウェブサイトで何かを開いたり閉じたりする操作は、どんなサイトにもあります。ハンバーガーメニューの開閉、問い合わせ前に表示するモーダル、よくある質問のアコーディオン、小さなツールチップ。こうした開閉パーツは長らくJavaScriptのライブラリで組むのが当たり前でした。ところが2026年に入り、ブラウザ標準の機能だけで同じことができる場面がぐっと増えています。

節目になったのが、2026年5月に公開されたSafari 26.5です。ここでopen擬似クラス(:open)が実装され、ChromeやFirefoxと足並みがそろいました。地味な追加に見えますが、標準機能だけで開閉UIを組む流れを後押しする一歩です。詳しくはWebKitの公式ブログでも解説されています。

open擬似クラスが開いた状態をまとめて扱う

:openは、要素が開いている状態にスタイルを当てるための擬似クラスです。対象はdetails要素やdialog要素、それにselect要素や、日付や色を選ぶinput要素のピッカーが開いたときまで含みます。開閉する部品を、種類を問わず同じ書き方で整えられるのが利点です。矢印の向きを変える、背景色を切り替えるといった見た目の調整を、状態ごとにCSSの中で完結させられます。

これまでは[open]属性セレクタで開閉状態を拾っていました。ただしこの書き方が効くのはdetails要素とdialog要素だけで、select要素やinput要素には使えませんでした。細かな差に見えますが、開閉するあらゆる要素を一貫した書き方で扱えるようになった意味は小さくありません。要素の種類ごとに別々のセレクタを覚える負担が減り、スタイルの見通しも良くなります。詳しい対応状況はMDNで確認できます。

標準タグだけで組める開閉パーツ

開閉UIの部品は、ここ数年でブラウザ側にそろってきました。モーダルはdialog要素のshowModalで開けます。背景を暗くする処理やフォーカスの閉じ込め、Escキーで閉じる動きまで、ブラウザがはじめから面倒をみてくれます。ちょっとしたメニューや吹き出しは、HTMLにpopover属性を足すだけで開閉できます。Popover APIは2025年4月に主要ブラウザで安定して使えるようになり、いまでは前提として組み込める土台になりました。popover属性を付けた要素は、外側をクリックしたりEscキーを押したりすると自動的に閉じます。いわゆるライトディスミスの挙動を、自分で書かなくてもブラウザが用意してくれます。

よくある質問のアコーディオンは、details要素とsummary要素だけで作れます。開いたときの見た目は:openで整えれば、開閉の状態管理をJavaScriptで書く必要はありません。ポップオーバーが表示中かどうかは:popover-openでも拾えます。Safari 26.5では、どの要素がポップオーバーを開いたかを知るための仕組みも加わり、複数の開閉部品が絡む画面でも扱いやすくなりました。ボタンを押すと候補が開くドロップダウンのような部品も、こうした標準機能の組み合わせで素直に表現できます。素朴なHTMLの積み重ねで、これまで外部ライブラリに任せていた動きの多くがまかなえます。

制作現場にとっての意味

標準機能に寄せる利点は、まずコードが軽くなることです。開閉のためだけに読み込んでいた外部ライブラリを減らせば、ページの表示は速くなり、保守の手間も下がります。加えて見落としがちなのがアクセシビリティです。dialog要素やpopover属性は、キーボード操作やスクリーンリーダーへの対応がはじめから組み込まれています。自前で作った開閉UIにありがちな、フォーカスが迷子になる、Escキーで閉じないといった不具合を避けやすくなります。ブラウザ標準の挙動に乗るぶん、環境による見え方や操作感のばらつきも抑えやすくなります。

中小企業のサイトでも、問い合わせ導線のモーダルやFAQのアコーディオンなど、使いどころは多いはずです。たとえば、以前はプラグイン頼みで組んでいたFAQの開閉を、details要素と:openだけに置き換えれば、依存が減って動作も安定します。ただし現状では、古いブラウザ向けのフォールバックや、凝ったアニメーションでのCSSとの併用など、細かい調整が要る場面は残ります。それでも、開閉UIの土台をブラウザ任せにできる範囲は着実に広がっています。新しく組むときは、まず標準機能だけで足りるかを出発点に考える価値が出てきました。手が込んだ実装に進むのは、それで届かないところを見極めてからでも遅くありません。

背景に応じて文字色を自動で選ぶCSS関数、読みやすさを支える新しい仕組み

つくば市のホームページ制作会社

ボタンや見出しの背景色を決めたあと、その上に載せる文字を黒にするか白にするかで迷った経験は、制作に関わる人なら一度はあるはずです。背景が濃ければ白、淡ければ黒と感覚で選んでいくものの、配色のパターンが増えるほど組み合わせの管理は地味に重くなります。この「背景に対して読みやすい文字色を選ぶ」という判断を、CSSだけで自動化するcontrast-color()という関数が、主要ブラウザにようやく出そろいました。

背景色から文字色を自動で決める関数

contrast-color()は、引数に渡した色に対して黒と白のどちらがより高いコントラストになるかを判定し、読みやすいほうを返す関数です。色を指定できる場所であればどこでも使えるので、文字色の指定に組み込めば背景色に応じて自動的に切り替わります。

書き方はとてもシンプルで、背景にブランド色を変数で渡しているなら、文字色は次のように一行で済みます。

background-color: var(–brand); color: contrast-color(var(–brand));

判定にはWCAGのコントラスト比の考え方が使われており、読みやすさの最低限を機械的に満たしやすくなります。Chrome 147、Firefox 146、Safari 26と三つのブラウザエンジンが2026年に対応し、安全に使える機能をまとめたBaselineでも新たに利用可能の段階に入りました。ブラウザ間の挙動をそろえるInterop 2026の対象にも含まれており、どの環境でも同じ結果になることが期待できます。

これまでの配色対応との違い

ブラウザが標準で対応する前から、読みやすい文字色を得る方法はいくつかありました。JavaScriptのライブラリで表示時にコントラスト比を計算して色を当てる、Sassの関数であらかじめ対になる色を生成しておく、あるいは単純に人の目で一つずつ黒と白を決めておく、といった具合です。

どれも動きはしますが、手間と保守の負担は残ります。表示時に計算する方法は画面が出るまでにわずかな処理を挟みますし、ビルド時に色を固定する方法は背景色を変えるたびに対の色も作り直すことになります。手作業の指定は、ライトモードとダークモードで色の組を二重に持つことになりがちです。contrast-color()はこの判断をブラウザ側に任せるため、背景色を一か所変えれば文字色もそのまま追従します。

制作現場で効く場面

恩恵が分かりやすいのは、背景色が一定しない場面です。ブランド色をボタンに使うコンポーネントなら、色だけ差し替えれば文字の見やすさは自動で保たれます。ホバーで背景を明るくする演出を入れた場合も、必要に応じて文字色が白から黒へ切り替わります。

ライトとダークの切り替えとも相性がよく、prefers-color-schemeで背景の変数だけを入れ替えれば、文字色の組を別々に書く必要がなくなります。color-mix()などで動的に作り出した色にも追従するため、配色をプログラム的に生成する設計とも噛み合います。デザインシステムのように色をトークンとして一元管理する作り方とも相性がよく、土台の色を一つ変えるだけで関連する文字色がまとめて整うため、配色の調整にかかる手数を減らせます。

地方の中小企業サイトやCMSでは、色の設定を制作者以外が触る場面も少なくありません。管理画面でテーマ色を選ぶと文字色まで適切に決まる、という作りにしておけば、運用する人がコントラスト比を意識しなくても読みにくい配色になりにくくなります。納品後の更新で配色が崩れるリスクを下げられる点は、長く運用するサイトほど効いてきます。

使う前に知っておきたい制約

便利な一方で、現時点の仕様には割り切りもあります。返すのは黒か白のどちらかだけで、中間調の背景に対しては必ずしも最適な結果にならないことがあります。判定の方式を選べる拡張的な書き方も一部ブラウザで試験的に使えるものの、Baselineの範囲ではまだ標準化されていません。

そのため、重要なボタンや本文など可読性が要になる箇所は、自動任せにせず実際の表示で確かめる姿勢は残しておきたいところです。とはいえ、配色の土台を機械的に整える層として置いておく価値は十分にあります。これまで手で管理してきたコントラストの一部を、ようやくCSSそのものに預けられるようになったという意味で、地味ながら実務に効く一歩だと言えます。

ウェブ制作現場の新しい選択肢、WordPressセキュリティからCSS機能まで制作者が知るべき動向

つくば市のホームページ制作会社

ウェブ制作の現場では、セキュリティ対策からレイアウト技術まで、複数の分野で新しい選択肢が生まれています。2026年5月のWordPressセキュリティ動向では、Burst Statistics認証回避バグや100万インストールのAvada Builder SQLインジェクション、MonsterInsightsのOAuthトークン盗取が問題となる一方、ウェブアクセシビリティ分野では分析対象100万サイトの94.8%でWCAG違反が検出され、低コントラストテキストが79.1%のページで見つかっています。CSS技術では、Subgridが2026年には全主要ブラウザで実用段階に達し、コンテナクエリと組み合わせることで従来の制約を乗り越える新しいレイアウト手法が広がりつつあります。

WordPressセキュリティ:3つの深刻な脆弱性と対策の現状

2026年5月に発見された重要な脆弱性のうち、最も深刻なのがBurst Statistics プラグインの認証回避問題(CVE-2026-8181、CVSSスコア9.8)で、20万サイト以上が影響を受けました。この脆弱性は4月23日にコードが出荷されてから5月12日にパッチが公開されるまで19日間の短期間で、WordfenceのPRISMプラットフォームが15日目に発見したという点が注目されます。

Avada Builderでは100万インストールを超える人気プラグインで任意ファイル読み取りとSQLインジェクションの脆弱性が見つかり、パスワードハッシュなどの機密データ流出のリスクが生じました。特にSQLインジェクションの悪用にはWooCommerceが一度インストールされてから無効化された環境が条件となり、WooCommerceを一度も使ったことがないサイトはこの攻撃の対象外となっています。

月間90件を超える脆弱性開示に対して手動での追跡管理は現実的ではなく、MonsterInsightsの脆弱性によってGoogle広告トークンが漏洩し予算が消耗する事例のように、忘れられたサイトで問題が発生するケースが指摘されています。

ウェブアクセシビリティ:法的要件の厳格化と現実的課題

WebAIM Million 2025レポートによると、上位100万サイトの95.9%が基本的なWCAG 2.2標準を満たしておらず、実質的にアクセシブルと言えるのは100サイト中わずか4サイトという状況です。ただし1ページあたりの平均エラー数は56.8から51に減少しており、進歩は緩やかながら進んでいることがわかります。

法的要件では、DOJ規則によってWCAG 2.1レベルAAが技術標準として設定され、5万人以上を対象とする政府機関は2026年4月24日、小規模政府機関は2027年4月26日がコンプライアンス期限となっています。欧州アクセシビリティ法は2025年6月にEU全加盟国で義務化され、もはや政府ウェブサイトに限定されず、銀行アプリやeコマースプラットフォーム、電子書籍、社内ツールまで対象となりました。

最も多い問題は低コントラストテキスト(79.1%のページで平均29.6箇所)で、代替テキスト不備は55.5%のページに影響し、そのうち44%がリンク画像に関わる問題で、スクリーンリーダーユーザーのナビゲーションを完全に阻害しています。

CSS新機能:コンテナクエリとSubgridの実用化

コンテナクエリはGrid以来最も重要なCSS レイアウト機能の追加で、コンポーネントがビューポートではなく親コンテナのサイズに応じて動作することで、どんな文脈にも適応する真に再利用可能なコンポーネントを可能にします。同一のカードコンポーネントが配置場所(サイドバー、メインコンテンツ、フルワイドヒーロー)に応じて縦型・横型レイアウトを自動切り替えでき、JavaScriptやコンテキスト専用CSSクラスが不要になります。

Subgridは2019年Firefox、2022年Safari、2023年9月Chrome 117で実装が完了し、2026年には機能検出なしで主流ユーザーに対して直接利用できる安定した技術となりました。従来のline-clamp: 1による1行制限やmin-height: 4remでの固定高さ指定といったハック的手法を削除でき、Subgridがコンテンツクリッピングや任意のピクセル値への固定なしに整列問題を解決します。

色彩処理では、2026年にはバリエーション毎の16進コードリストを維持する必要がなくなり、CSS Color Level 5の相対色構文を使って、fromキーワードでベースブランド色から任意のバリエーション(明度・彩度・透明度)をCSS内で直接生成できるようになっています。

制作環境の変化:AI影響下での品質管理

WebAIM 2026年版調査では上位100万ホームページの95.9%でWCAG違反が検出され、前年94.8%から悪化し、1ページあたりの平均エラー数も56.1件と12ヶ月で10.1%増加しています。この後退の構造的要因として、ページ複雑性の前年比22.5%増加とARIA使用量の27%増加(多くが不適切な実装)が挙げられています。

2026年にはAIがウェブサイト作成の主要エンジンとなり、レイアウト生成、コンポーネント組み立て、コンテンツ制作、デプロイ加速を人間チームでは追従できないペースで実行しています。ユーザーがブラウザで実際に体験するものはソースコード意図と大きく異なることが多く、現代のウェブサイトはCMSプラットフォーム、AI生成コンテンツ、サードパーティツール、パーソナライゼーションレイヤーなど多数のソースから組み立てられています。

2026年の実質的な変化はAIのワークフロー効率への貢献であり、スマートツールと知識豊富な人間レビューアーの組み合わせがスピードと一貫性を向上させる一方、AIに全てを任せる組織は従来より高速に重要なバリアを見落とし続けることになります。