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

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

ウェブサイトの使いやすさを測る物差しが、欧州で一段新しいものに切り替わろうとしている。情報通信技術のアクセシビリティ要件を定めた欧州規格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とCSSを書いても、ブラウザによって表示や挙動が少しずつ違う。制作の現場では当たり前のように受け入れている面倒だが、その差を毎年少しずつ埋めていく共同プロジェクトがある。Interopと呼ばれる取り組みで、ブラウザを作っている各社が参加し、年ごとに重点分野を決めて、各ブラウザの対応状況をテストの合格率で追いかけていく。

その来年ぶんの題材を決める提案の受付が、9月3日に始まった。締切は9月23日で、GitHubのissueとして誰でも出せる。同じ日にAppleのWebKit、Googleのweb.dev、MicrosoftのEdgeチームがそれぞれ呼びかけを出していて、どんな書き方が通りやすいかの説明も添えられている。読み比べると、重なっている勘所がいくつか見えてくる。

すでに標準として固まっているか

前提として、Interopは新しい技術を発明する場ではない。W3CやTC39といった場で仕様が固まり、ブラウザベンダーからの異論が残っていないものについて、実装の食い違いだけを潰していく。過去に選ばれた機能は、少なくともどれか一つのブラウザで実装済みだったものがほとんどだとされている。

WebKitの記事は、まだ存在しない機能がほしい場合はInteropではなく、CSSであればCSS Working Groupのissueなど、その技術を決める場に持ち込むよう案内している。順番を飛ばすと、そもそも土俵に乗らないという整理だ。

テストがあるかどうかで枠が変わる

Interopの進み具合は、Web Platform Testsの合格率で測られる。裏を返すと、テストが十分にない機能は、選ばれても点の付けようがない。提案するときは、既存のテストがどれくらいあるかを調べてリンクすることが求められる。

テストや計測の仕組みが足りない領域には、重点分野とは別に調査枠が用意されている。こちらは合格率を競うのではなく、将来の改善に向けて土台を整えるための宿題という位置づけになっている。出したい機能の成熟度によって、入り口が二つあるということになる。

範囲は狭く、具体的に

三社とも揃って書いているのが、提案の範囲を絞ることだ。WebKitは「タイポグラフィ」ではなくfont-size-adjustのように、一つの機能か、関係の近い小さなまとまりで出すよう勧めている。Edgeの記事も、「CSSを良くしてほしい」「フォームまわりを直してほしい」といった広い要望は評価しづらく、焦点の定まった提案のほうが選ばれやすいとしている。

実際に困った場面を書けるか

説得材料として重視されているのは、現場でどう困ったかという具体的な話だ。自分の案件で遭遇した食い違い、フレームワークやライブラリのissue、開発者アンケートの結果など、多くの人が同じ壁に当たっている証拠があると強い。

探す手がかりも用意されている。webstatus.devで各ブラウザの対応状況を確認したり、開発者からの要望を集めたリポジトリで、すでに公開されている使いどころを引いてきたりできる。数ある候補の中で、なぜこれを先に片付けるべきなのかまで書けると良いとされている。

提案を出さない人にもできること

提案文を書く時間がなくても、関われる余地はある。同じ内容のissueを二つ立てるより、すでにあるissueにコメントや反応を付けて後押しするほうが良いと、各社とも案内している。気になる提案に賛同の意思を残しておくだけでも、判断材料のひとつになる。

選ばれなかった提案も捨てられるわけではない、という説明も目を引いた。Edgeのチームは、落選した提案は開発者からの明確な要望として受け取り、長く残っている課題を整理したダッシュボードに反映していくと書いている。提案の結果が出るのは来年2月ごろの予定だという。

今年の重点分野には、View Transitions、Navigation API、アンカー位置指定、ダイアログとポップオーバー、コンテナスタイルクエリなどが並んでいる。こうした機能を数年後に「もうどのブラウザでも普通に動く」と言えるかどうかは、この時期の公募から始まっている。中小企業のサイトを作る側としても、いま回避策を書き足している場所を思い出しておくと、来年以降の道具立ての変わり方が少し読みやすくなる。

コンテナクエリが知られているのに使われない理由

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

CSSのコンテナクエリ(container queries)が主要ブラウザにそろってから、それなりの時間がたちました。部品が置かれた場所の広さに合わせて見た目を変えたい、という要望は長年のCSSの願いごとの上位にあったはずです。ところが、実際の制作現場ではまだあまり使われていません。

Smashing Magazineが9月16日に公開した記事は、この「知られているのに使われない」状態を正面から取り上げています。筆者は、使われない理由よりも、使われたときの使い方のずれに関心を向けています。今回はこの記事を軸に、MDNの解説も参照しながら、メディアクエリとの役割分担や、手を出す前に知っておきたい落とし穴を整理してみます。

認知は高いのに利用が伸びていない

記事によると、コンテナクエリのブラウザ対応率はおよそ94%に達しています。一方で、State of CSSの調査では、存在を知っている開発者が86%なのに対し、実際に使っているのは41.4%にとどまるそうです。筆者自身も調査には偏りがあると断ったうえで、現時点で最も参考になる指標だとしています。

また、今年のSmashingConf Amsterdamでは、CSSの解説で知られるKevin Powell氏も普及の遅さに触れたと紹介されています。新機能というより、すでに使える道具が棚に置かれたままになっている状況といえます。

筆者が指摘するのは、コンテナクエリが見た目のうえでメディアクエリとよく似ていることです。書き方が似ているので、同じ目的で同じように動くものだと思い込みやすい。その結果、メディアクエリの置き換えとして試し、違いが分からないまま離れていく、という流れが起きやすいのだと考えられます。

外を見るメディアクエリ、内を見るコンテナクエリ

記事の整理はシンプルです。メディアクエリが確かめているのは、基本的に画面(ビューポート)の幅です。たとえば幅1024px以上でカードを横並びにする指定をしたとします。このカードを、1920pxの画面の中で幅300pxしかないグリッドの一枠に置いても、画面幅の条件は満たしているので横並びの指定が効いてしまい、中身が窮屈になったりはみ出したりします。

コンテナクエリは問いの立て方が違います。確かめるのは、その部品を包んでいる親要素にどれだけの幅があるかです。次のように親要素をコンテナとして宣言し、その幅を条件にします。

.card-wrapper {
  container-name: card;
  container-type: inline-size;
}

@container card (min-width: 450px) {
  .card {
    display: flex;
    flex-direction: row;
  }
}

こうするとカードは画面の広さに左右されず、置かれた場所に450px以上の横幅があるときだけ横並びになります。MDNも、コンテナクエリを使えば、同じカードをページのどこに置くかを意識せずに再利用できると説明しています。

記事は、現在のウェブには2,300種類を超える画面サイズがあるという数字も挙げています。768pxのような抽象的な境目を越えたから「タブレット用」の見た目になる、という考え方そのものに無理が出てきている、というのが筆者の主張です。

ページ全体の骨組みと部品の中身で使い分ける

記事が勧めるのは、どちらか一方に寄せることではなく、担当範囲を分けることです。ページ全体をまたぐヘッダーやフッター、メインのグリッド、ダークモードのような利用者の設定、タッチ操作の有無といった端末の特性は、これまでどおりメディアクエリの担当です。一方、カードやウィジェット、フォーム、ナビゲーションのように、割り当てられた場所に収まる必要がある部品の中身は、コンテナクエリの担当と考えます。

筆者自身の判断基準も分かりやすいものです。ひとつの部品が複数の場所で使われるならコンテナクエリ、ページの最上部に常にあるメインナビゲーションのように、ページ単位でしか存在しない部品ならメディアクエリ。前者は置き場所の広さが毎回違い、後者は画面の幅がそのまま頼れる目安になるからです。

WordPressで制作していると、この区別は実感しやすいはずです。同じ投稿カードや問い合わせボタンの部品が、トップページでは3列に並び、固定ページでは本文の幅いっぱいに置かれ、別の場所ではサイドバーに収まる。画面幅だけで分岐を書いていると、置き場所ごとに例外の指定が増えていきます。納品後に更新担当の方がブロックを並べ替えることを考えても、部品が自分の置かれた幅に応じて整う作りのほうが崩れにくくなります。

文字サイズと折り返しの判定にも使える

記事では、レイアウトの切り替え以外の使いどころも紹介されています。ひとつは文字サイズです。見出しの大きさを画面幅に連動するvw単位とclamp()で決めていると、その部品をサイドバーへ移したときに文字が大きすぎたり小さすぎたりします。コンテナクエリには専用の単位があり、MDNによると、cqwとcqhはコンテナの幅と高さ、cqiとcqbは行方向とブロック方向の大きさ、それぞれの1%を表します。cqminとcqmaxはcqiとcqbの小さいほうと大きいほうです。

.card-title {
  font-size: clamp(1rem, .5rem + 3cqi, 2rem);
}

このように書けば、見出しの大きさは部品が置かれた場所の幅に合わせて伸び縮みし、指定がその部品の中で完結します。なお、MDNでは、当てはまるコンテナが見つからない場合、これらの単位はその方向の小さいビューポート単位として扱われると説明されています。

もうひとつは、フレックスボックスの折り返しを検知する工夫です。CSSには、並んだ要素が次の行へ折り返したかどうかを直接知る仕組みがありません。記事ではKevin Powell氏から学んだ方法として、各アイテム自体をコンテナにし、伸びる設定を与えておくやり方が紹介されています。折り返しが起きると、次の行に落ちたアイテムが親の幅いっぱいまで広がり、その急な幅の変化をコンテナクエリが拾う、という仕組みです。これまでならJavaScriptのResizeObserverに頼っていた場面を、CSSだけで扱える可能性があります。筆者も完全無欠ではないと書いているので、試すときは実際の表示で確かめるのがよさそうです。

手を出す前に知っておきたい落とし穴

記事は、コンテナクエリ特有の注意点も3つ挙げています。

まず、コンテナは自分自身を条件にできない点です。カード要素をコンテナにして、そのカード自身の表示方法を切り替えようとしても動きません。自分の大きさで自分の見た目を変えると、無限に計算し直すことになるからです。そのため、カードの外側にもう一段包む要素を用意し、そちらをコンテナにする必要があります。既存のテーマやテンプレートに後から組み込む場合、この「もう一段の包み」をどこに置くかが最初の検討事項になります。

次に、container-typeにsizeを指定すると高さがつぶれることがある点です。sizeは縦横両方の大きさを条件にできる指定ですが、ブラウザは中身を見ずにコンテナの大きさを決めるため、高さや最小の高さ、縦横比を明示していないと高さが0pxになってしまいます。MDNも、コンテナの宣言には封じ込め(containment)が伴い、それは性能のために必要な仕組みだと説明しています。多くの場合は横方向だけを見るinline-sizeで十分で、縦方向が本当に必要な場面に限ってsizeを選ぶのが無難です。

最後に、条件の値にカスタムプロパティを使えない点です。デザインシステムで境目の幅を変数にまとめている場合でも、コンテナクエリの条件にvar()を書くことはできません。カスタムプロパティは要素の親子関係に沿って値が受け継がれるため、クエリの中でその値自体を書き換えると判定が循環してしまうからです。

スタイルクエリなど周辺の仕様も広がっている

今回のSmashing Magazineの記事が扱っているのは、大きさを条件にするサイズクエリです。MDNの解説を読むと、コンテナクエリの仕組みはそれだけではありません。現在は、サイズクエリ、コンテナの名前だけで絞り込む名前のみのクエリ、スタイルクエリ、スクロールの状態を条件にするクエリ、アンカー配置の状態を条件にするクエリ、の5種類が整理されています。

このうちスタイルクエリは、コンテナの計算済みのスタイルを条件にするものです。MDNによると、現時点で実際に条件にできるのはカスタムプロパティに限られ、通常のCSSプロパティを条件にする書き方はまだどのブラウザにも実装されていません。それでも、親要素に設定したテーマ用の変数の値によって子要素の見た目を切り替える、といった使い方はすでに検討できます。@propertyで型を登録しておくと、blueと#0000ffのように書き方の違う同じ色も一致として扱われる、という細かな挙動も解説されています。対応状況はブラウザごとに差があるので、採用する前に互換性の表を確認しておくのが安心です。

サイズクエリの基本がまだ手に馴染んでいない段階で、周辺の仕様まで一度に追う必要はありません。ただ、部品の置かれた状況をCSS側で判断する方向へ仕様全体が広がっていることは、頭の片隅に置いておく価値があります。

既存サイトへの取り入れ方

中小企業のサイトや地方の制作案件で、いきなり全体をコンテナクエリ前提で組み直す必要はないでしょう。記事の筆者も、すべてのプロジェクトでメディアクエリをコンテナクエリに置き換えるべきだとは考えていないと明言しています。

現実的なのは、置き場所によって崩れやすい部品から試すやり方です。お知らせの一覧カード、商品や事例の紹介カード、サイドバーにも本文にも置かれるバナーなど、同じ部品を複数の場所で使い回しているところが候補になります。こうした部品は、これまで置き場所ごとの追加指定で調整してきたことが多く、その追加指定を減らせるかどうかで効果を判断しやすいはずです。

書き方がメディアクエリに似ているぶん、使い分けの考え方さえ押さえてしまえば導入の壁はそれほど高くありません。ページの骨組みは画面の幅で、部品の中身は置かれた場所の幅で決める。この線引きを一度チーム内で共有しておくと、次のサイト改修のときに部品の作り方を見直すきっかけになりそうです。

CSSで書けることが増えた直近のブラウザ更新

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

ブラウザの更新が続いていて、CSSだけで書ける範囲がまた少し広がっている。9月1日に公開されたFirefox 155と、8月にベータ版へ入ったChrome 153では、これまでJavaScriptを挟んで処理していたことや、回避策を組み合わせて実現していた表現が、スタイルシート側に移ってきた。

もちろん、実装されたばかりの指定をすぐ本番で使えるわけではない。ただ、どの方向に進んでいるかを知っておくと、いま組むサイトの設計や、数年後の書き直しの量が変わってくる。直近の更新から、頭の隅に置いておくと役に立ちそうなものを並べてみる。

HTMLの属性値をどのプロパティでも使えるようになった

CSSの attr() 関数は、これまで content プロパティの中でしか使えなかった。疑似要素にHTMLの属性値を文字として流し込む用途に限られていて、幅や時間の指定に使うことはできなかった。

Firefox 155では、この制限が外れて任意のプロパティで使えるようになった。width: attr(data-size px) のように単位を添えた型の指定ができ、値がなかったときのフォールバックや、名前空間つきの属性にも対応している。コンテナスタイルクエリの条件式の中でも使える。

棒グラフの長さや進捗バーの幅のように、データによって変わる数値をテンプレートから渡したい場面は多い。これまではインラインのstyle属性を書き出すか、JavaScriptで後から当てるかのどちらかだったが、data-属性に数値を入れておけばCSS側で受け取れる形になる。

色の透明度だけを差し替えられる関数

同じくFirefox 155で、alpha() 関数が使えるようになった。色を渡すと、他の成分はそのままに透明度だけを変えた色が返ってくる。関数の中では alpha というキーワードで元の色の透明度を参照できるので、alpha(from var(–brand) / calc(alpha * 0.5)) のように、元の値を基準にした計算も書ける。

ブランドカラーを変数でひとつ持っておき、ホバー時の背景や区切り線をそこから派生させる、といった使い方に向いている。色ごとに半透明版を別の変数として用意して二重に管理する、という手間が減らせる。

値の進み具合を数値として返す関数

progress() 関数も同じ更新で入った。開始値と終了値を渡すと、ある値がその間のどのあたりまで進んだかを数値で返す。opacity: calc(0.4 + progress(100cqw, 300px, 900px) * 0.6) と書けば、コンテナの幅が300pxから900pxへ広がるあいだに不透明度が変化していく。

これまでも calc() と clamp() の組み合わせで近いことはできたが、式が長くなって後から読み解きにくかった。どこからどこまで変化させたいのかが、そのまま式の形に出る。

スクロールの軸を分けて指定できるようにする動き

Chrome 153のベータでは、スクロールまわりの指定がふたつ増えている。ひとつは overflow プロパティで、scroll と clip を軸ごとに組み合わせて書けるようになる。overflow: scroll clip のように指定すると、position: sticky の固定範囲を軸ごとに別の祖先要素へ預けられ、clip を指定した側は動かないまま保てる。

もうひとつは scroll-axis-lock という新しいプロパティ。ブラウザは指やホイールの動きが片方の軸に大きく偏ると、その軸だけにスクロールを固定してしまうことが多い。誤操作を防ぐには合理的な挙動だが、地図や大きな図面のように斜めへ動かしたい領域では、固定がかからない角度から操作を始めないといけない、という不便につながる。この指定で、固定しないようブラウザへ伝えられる。

名前が変わったものと、まだ既定で無効なもの

Firefox 155では font-stretch プロパティが font-width という名前に変わった。旧名は別名として引き続き動くが、算出済みスタイルを列挙すると font-width のほうが返るようになっている。スタイルをJavaScriptから読み取って処理しているところがあれば、影響を受けないか確かめておきたい。

一方で、枠線の描画領域に背景を切り抜く background-clip の border-area や、スクロール量に連動するアニメーションは、Firefox 155では既定で無効のままだ。設定を切り替えれば試せるが、検証記事を読むときは、そのまま出荷されたものなのか、設定で有効にして試したものなのかを分けて見ておいたほうがいい。

ここに挙げたものは、いずれも片方のブラウザで実装が進んだ段階で、主要ブラウザで揃うまでにはまだ時間がかかる。中小企業のサイトで今日から使い始める類の話ではない。それでも、属性値や色や進み具合といった、これまでスクリプトに任せていた計算がCSS側へ降りてきているという流れは共通している。手元の案件で、これは本当にスクリプトが要るのかと一度立ち止まってみると、思ったより短く書ける箇所が見つかるかもしれない。

ルビや余白の指定がSafariの先行版に増えた

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

WebKitが公開しているSafari Technology Previewの最新版に、文字の見え方を細かく決めるCSSの追加がまとまって並んでいた。先行版のリリースノートは地味な項目の羅列になりがちだが、今回は日本語の組版に直接関わるものが混じっていて目に留まった。正式版に入る前の段階とはいえ、どこへ向かっているかは読み取れる。

ひとつはルビの張り出しを扱う ruby-overhang というプロパティだ。ルビは親文字より横に長くなることがあり、既定でははみ出した分が隣の文字に少しかぶる。指定できる値はこれまで、ブラウザの判断に任せる auto と、はみ出しを一切許さない none の二つだった。リリースノートによると、ここに spaces という値のサポートが加わり、張り出してよい相手を隣り合う空白や約物に限る、という中間的な指定ができるようになった。none は spaces の別名という扱いに変わっている。MDNのリファレンスでも、このプロパティの形式的な構文はすでに auto と spaces の二つで書かれていて、仕様側で進んでいた整理が実装に降りてきた形になる。

あわせて white-space-trim も入った。これは white-space を構成するプロパティのひとつで、要素の前後や内側に残る空白を捨てるかどうかを指定する。値は discard-before、discard-after、discard-inner を組み合わせて使う。テンプレートの改行やインデントがそのまま余白として出てしまう場面を、HTMLの書き方を詰めて回避するのではなく、CSS側で処理できるようにするものだ。MDNの white-space のページには、この構成プロパティはまだどのブラウザにも実装されていない、という注記が残っている。先行版に限った話とはいえ、実装が一つ出てきたことになる。

ほかにも、下線の位置をずらせる text-decoration-inset、箇条書きの記号そのものに content を指定できるようになった ::marker、要素の内側での折り返し方を扱う wrap-inside が並んでいる。修正の側にも、::selection に指定した text-decoration が描画されない問題や、直交する書字方向の子要素を持つブロックの幅がつぶれる問題が挙がっている。どれも派手さはないが、縦組みや細かな文字詰めを一度でも触ったことがあれば思い当たる類の話だ。

いま使うというより、頭の隅に置く段階

ここで挙げたものはSafariの先行版に入った段階で、正式版や他のブラウザで使えるかどうかはこれからの話になる。中小企業のサイトで来週から使う、という性質のものではない。ただ、ルビや余白の詰めは、これまで全角スペースの調整やJavaScriptでしのいできた領域でもある。ブラウザ側で素直に扱える方向へ仕様が動いていることを知っておくと、次に組版で困ったときに探す場所が一つ増える。リリースノートは項目ごとに短くまとまっているので、気になる分野だけ拾い読みしておくのでも十分だろう。

WordPressの新版で増えた見た目まわりの指定

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

WordPressの新しいバージョンが8月19日に公開された。コードネームは「Mary Lou」で、ジャズピアニストのメアリー・ルー・ウィリアムスにちなんでいる。公式の発表によると、800人を超える貢献者が関わり、1500以上の改善と修正が入ったという。ここでは制作の現場で実際に触ることになりそうな変更を、いくつか並べて見ていく。

画面幅ごとのスタイルが標準の操作に

サイトエディターから、タブレットとモバイルの画面幅に対してブロックの見た目を指定できるようになった。グローバルスタイルでブロック種別ごとに設定することも、個々のブロックに設定することもできる。編集しながら表示幅を切り替えて確認する仕組みも付いている。

theme.json では @mobile と @tablet というキーの下に入れ子で書く。@desktop にあたるキーは意図的に用意されていない。ブロックの既定のスタイルがそのままデスクトップのスタイルであり、上書きしなかった項目はどの画面幅でも効き続ける、という考え方になっている。

区切りの位置も theme.json の settings.viewport で変えられる。既定はモバイルが480px、タブレットが782pxで、px、em、rem の非負の長さだけが有効になる。CSSの関数や割合、単位なしの値は無視される。標準のブロックサポート(タイポグラフィ、色、背景、境界線、寸法、余白、レイアウト)を使っているブロックは自動で対応し、独自のスタイル操作を持つブロックは対象外になる。自作ブロックを確認するときの境界線はここになる。

ホバーや押した状態も扱えるようになった

あわせて、擬似的な状態のスタイル指定が入った。theme.json とエディターの両方から :hover、:focus、:focus-visible、:active を指定できる。ただし今のところ対象は Button ブロックと Navigation Link ブロックに限られている。

メニューの現在地を表すための独自状態の仕組みも入っているが、こちらは theme.json のみで画面上の操作はまだ用意されていない。今は存在を知っておく程度でよさそうだ。

背景まわりで長年の回避策が不要に

ブロックサポートに background.gradient が加わった。従来の color.gradient は background の一括指定として出力されるため background-image まで打ち消してしまい、ひとつのブロックで背景画像とグラデーションを同時に使えなかった。新しい方は background-image の個別指定として出力され、画像とグラデーションをカンマ区切りでまとめて書き出せる。Group、Accordion、Pullquote、Post Content、Quote が最初の対応組になっている。

ほかに dimensions.minWidth が min-height と同じ流儀で追加され、グローバルスタイルでは text-shadow も扱えるようになった。

新しいブロックと編集画面の土台

Playlist と Tabs が試験的な扱いから正式なブロックになった。Playlist は複数の音声をひとまとめに並べ、再生中の様子を波形で添えることもできる。Tabs はタブで内容を切り替える表示で、これまでプラグインに頼っていた場面をいくらか置き換えられそうだ。

編集画面側では、管理バーがすべてのエディターで表示され続けるようになった。投稿エディターは、テーマの種類や登録済みブロックのバージョンにかかわらず常に iframe の中で動く。内容によって切り替わっていた従来の挙動はなくなる。エディター用のスクリプトが動く文書とキャンバスの文書は別物なので、素の document や window を見に行っているコードは対象を取り違える。要素から ownerDocument や defaultView をたどる書き方への置き換えが要る。

管理画面まわりの細かい追加

wp_get_tooltip() と wp_get_toggletip() が追加され、これまでエディターの中にしかなかった説明の吹き出しを管理画面全体で使えるようになった。前者はアイコンだけの操作に読み上げ可能な名前を与えるもの、後者は補足説明を開くボタンを添えるもので、コア自身も投稿画面のメタボックスやログイン画面のチェックボックスで使っている。

Navigation ブロックが子のリンクにフォントサイズを渡さなくなった点も、テーマを作っている人には効いてくる。相対単位が入れ子で掛け算になり、編集画面と表示側で文字の大きさが食い違う原因になっていた。has-{slug}-font-size を直接狙っているテーマは、開発者向けノートにある従来の挙動を戻すフィルターを見ておくとよい。

更新の前に、独自ブロックや管理画面を拡張しているプラグインを一度試しておきたいところだ。画面幅ごとの指定がコアに入ったことで、追加CSSで抱え込んでいた部分をテーマ側に戻せる場面は増えそうに思う。

動画の再生状態に合わせた見た目をCSSで切り替える

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

動画や音声を埋め込んだページで、再生が始まったら中央の大きな再生ボタンを消す、読み込み待ちの間だけ画面を少し暗くする、といった切り替えを組んだことはないでしょうか。こうした見た目の出し分けは、これまでJavaScriptで再生や停止のイベントを拾い、要素にクラスを付け外しして実現するのが定番でした。その状態の判定を、CSSの側から直接書ける指定がブラウザに入ってきています。

再生中か止まっているかを見分ける指定

Chromeの開発者向けブログが公開したChrome 152ベータ版の案内には、:playing、:paused、:seeking、:buffering、:stalled、:muted、:volume-lockedという疑似クラスが並んでいます。いずれもaudio要素とvideo要素を、そのときの状態にもとづいて選ぶためのものです。

MDNの説明によると、:playingはメディアが再生されている状態を表します。興味深いのは、いま実際に映像や音が進んでいる場合だけでなく、利用者の意思以外の理由で一時的に止まっている場合も再生中として扱う点です。つまり、回線が細くて読み込み待ちになっている最中も:playingに当てはまります。利用者が自分でボタンを押して止めたときが:paused、というすみ分けになっています。

読み込み待ちや消音といった細かい状態も拾える

:bufferingは、再生を続けたいのにデータが足りず、読み込みを待っている状態を指します。MDNには、:bufferingに当てはまる要素は:playingにも同時に当てはまる、とはっきり書かれています。待機中の表示を出しているあいだも再生中用のスタイルは効いたままになるので、両方が重なる前提で指定を組む必要があります。

:mutedは、音を出せる要素が消音されている状態です。似たものに:volume-lockedがありますが、こちらは端末やブラウザ側の設定によって、JavaScriptからは消音の切り替えも音量の変更もできない状態を指します。作り手が制御できる消音と、作り手には手が出せない音量の固定を、別々に見分けられるようになっているわけです。

書き方は素直で、MDNにはvideo:mutedに枠線を付ける例が載っています。video:not(:muted)と組み合わせれば、音が出ている状態との出し分けもできます。利用者が再生コントロールで消音を切り替えれば、その場でスタイルのほうも切り替わります。

状態の同期をスクリプトに任せなくてよくなる

この手の状態管理は、地味に事故が起きやすいところです。イベントの取りこぼし、同じ画面に複数の動画を置いたときの指定の衝突、画面を切り替えたあとに前の状態が残ってしまう、といった不具合は制作の現場ではおなじみでしょう。判定をブラウザ自身が持ってくれるなら、そもそも表示と実態がずれる余地が小さくなります。

地方の中小企業のサイトでも、会社紹介の動画や商品の紹介映像を置くことは珍しくありません。凝った独自プレーヤーを作らない場合でも、再生が始まったら重ねていた説明の見せ方を控えめにする、読み込みが長引いているときだけ待機中の表示を出す、といった調整はCSSの側だけで書けるようになります。スクリプトを増やさずに済む分、表示の軽さにも保守のしやすさにも効いてきます。

いまの対応状況と現実的な取り入れ方

ただし、すぐにどこでも使えるわけではありません。MDNの各ページには限定的な対応と表示されていて、広く使われているブラウザの一部では動かないためBaselineには達していない、と明記されています。手元のブラウザで動いたからといって、すべての来訪者に同じ見え方を届けられる段階ではない点は押さえておきたいところです。

一方でChromeの案内では、これらの疑似クラスがInterop 2026の重点分野の一つに挙げられています。Interopはブラウザごとの実装のばらつきを揃えていくための取り組みなので、そこに入っているということは、対応が広がる方向で足並みが揃いつつあると読んでよさそうです。

現実的な取り入れ方は、これまでどおりの作りを土台に置いたうえで、対応しているブラウザでは見え方がもう少し気の利いたものになる、という上乗せの形でしょう。動かないブラウザでも困らない範囲から試してみると、次にプレーヤーまわりを触るときの引き出しが一つ増えます。

並べた要素のすき間に罫線を引く指定がブラウザに入った

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

グリッドやフレックスで要素を並べたあと、そのすき間に細い線を入れたくなる場面は多い。カード一覧の区切り、料金表の縦線、記事リストの横罫。デザインとしてはごく普通の表現なのに、CSSで素直に書ける指定がなく、制作側が毎回それらしい形に組み立ててきた領域だった。ここへ来て、その部分がブラウザ側で片付きはじめている。

すき間に線を引くために、これまでやってきたこと

いちばん多かったのは、並べた要素そのものに枠線を付ける方法だろう。カードの右側にだけ線を引き、行末の要素は擬似クラスで線を消す。三列で組んだグリッドなら、三の倍数番目を狙って消していく。動くには動くが、列数がブレークポイントごとに変わると、消す対象も一緒に書き換えなければならない。

フレックスで折り返す並びだと事情はもっと厄介になる。何番目で折り返すかは中身の幅次第なので、要素の番号を狙う書き方が成り立たない。仕方なく擬似要素を絶対配置で置いたり、親に背景色を敷いてすき間だけ透かして線に見せたり、要素の背景色との差で線を演出したりしてきた。どれも見た目は作れるが、線の色を変えたいだけの依頼で三箇所直すことになる。

背景色を敷いて線に見せる手も、条件がそろえば見た目はきれいに決まる。ただし親の背景が写真やグラデーションだと途端に成立しないし、余白の値を変えると線の太さまで一緒に動く。ダークモードの切り替えを入れると、線の色ではなく背景色を二重に管理することになり、あとから読む人には何が線で何が下地なのか分かりにくい。

要するに、線を引くための仕掛けが、線とは関係のない場所に散らばっていた。すき間そのものを指定できる手段がなかったからで、これは書き手の工夫が足りないという話ではなかった。

もともと段組みだけのものだった指定が広がった

CSSには以前から column-rule という指定がある。ただしこれは段組みレイアウト専用で、グリッドやフレックスでは効かなかった。線を引く指定は存在するのに、いちばん使いたいレイアウトでは使えない状態が続いていたわけだ。

今回入ったのは、この column-rule をグリッドとフレックスにも広げ、さらに横方向のすき間に線を引く row-rule を新しく用意する、という変更になる。Chromeの開発者向けブログによると、ChromeとEdgeのバージョン149から既定で有効になった。段組み、グリッド、フレックスのいずれでも同じ書き方が通る。

書き味としては枠線の指定とほとんど同じで、太さと線種と色をまとめて渡すだけでいい。要素の何番目かを数える必要はなく、折り返しが増えても減っても、すき間があるところに線が入る。列数をブレークポイントで切り替えても、線の指定はそのままでいい。この一点だけでも、日々のCSSの見通しはかなり変わる。

交差やはみ出しをどこまで決められるか

実際にやってみると気になるのが、細部の扱いだ。縦線と横線が交わるところをどうするか、線をすき間いっぱいまで伸ばすのか少し余らせるのか、中身の入っていない列にまで線を出してしまわないか。この手の判断は、これまで擬似要素の位置調整でごまかしてきた部分でもある。

新しい仕様では、そこにもそれぞれ指定が用意されている。交差点の処理は column-rule-break と row-rule-break、線をどこまで伸ばすかは column-rule-inset と row-rule-inset、空の行や列に線を出すかどうかは column-rule-visibility-items と row-rule-visibility-items が受け持つ。開発者向けの試用段階では伸縮の指定が別の名前だったが、仕様の側に合わせて整理された経緯がある。

加えて、線の太さや色、伸縮の量はアニメーションの対象になる。マウスを載せたときにだけ区切り線をうっすら出す、といった演出が、余計な要素を足さずに書けるということでもある。細かい話に見えるが、ここまで決められるかどうかで、回避策から本当に卒業できるかが分かれる。

使えるブラウザと、いまの構え方

現時点で対応しているのはChromiumを土台にしたブラウザで、SafariとFirefoxはまだ入っていない。ここは正直に見ておいたほうがいい。日本の中小企業サイトだとiOSのSafariの比率が高い案件も珍しくないので、いますぐ全面的に頼れる指定ではない。

ただ、この機能は使えなかったときの壊れ方が穏やかだ。対応していないブラウザでは、すき間に線が出ないだけで、レイアウトそのものは何も崩れない。区切り線が装飾として効いている程度の場面なら、対応済みのブラウザで少し丁寧に見える、という積み増しの使い方ができる。線がないと情報の区切りが読み取れない、という設計になっている場合だけ、従来の手法を残しておけばいい。

従来の手法を残す場合も、両方を無条件に書くと対応済みのブラウザで線が二重になる。対応しているかどうかで書き分ける @supports を挟んでおくと、この衝突は避けられる。新しい指定が使える環境では新しい書き方を、そうでない環境では今までの回避策を、という形にしておけば、数年後にSafariとFirefoxが追いついた時点で、古いほうのかたまりを削るだけで済む。移行の作業を先に用意しておく、という考え方に近い。

未対応のブラウザ向けのポリフィルも開発が進んでいるとされている。ただ、装飾のためにスクリプトを足すのは本末転倒になりやすいので、まずは飾りとして入れて様子を見る、という順番が現実的だと思う。

見た目の細部がCSS側に寄っていく流れ

この変更を単体で見ると、便利なプロパティが増えた、という話で終わる。ただ、ここ一年ほどのCSSの動きを並べると、同じ方向を向いた変更が続いていることに気づく。

たとえば、並んだ要素に少しずつ時間差を付けて動かす書き方は、長らく要素の番号を手で書き並べるか、スクリプト側で遅延を計算するしかなかった。それが、自分が何番目の兄弟かをCSSの中で数えられる関数として一部のブラウザに入りはじめている。枠線の形をもっと自由に扱うための border-shape のような提案も議論が進んでいて、CSS-Tricksあたりでは繰り返し取り上げられている。

共通しているのは、見た目のために増やしていたマークアップやスクリプトを減らす方向だということだ。区切り線のための空の div、時間差のための番号付きクラス、位置合わせのための擬似要素。こうしたものは、書いた本人以外には意図が読み取りにくく、引き継いだ制作者が触りにくい部分でもあった。指定として名前が付くと、少なくとも何をしたかったのかは残る。

受け継いだサイトを触る側から見ると

制作会社としてありがたいのは、新規で作るときの快適さより、あとから触るときの読みやすさのほうかもしれない。他社が作ったサイトを引き継いで直す仕事では、擬似要素で引かれた線の位置が微妙にずれている、といった相談がわりとよくある。中身を追うと、当時の列数を前提にした番号指定が残っていて、その後の改修で列数だけが変わっていた、という筋書きだ。

すき間に線を引く指定が一行で済むなら、こうした置き土産は減っていく。すぐに全部を書き換える必要はないし、動いているものを触るリスクのほうが大きい場面も多い。ただ、次にそのブロックへ手を入れるとき、回避策を継ぎ足すのではなく、素直な指定に置き換えられる選択肢ができたのは小さくない。

新しい指定が出るたびに全部追いかける必要はないと思う。それでも、長く回避策で埋めてきた場所が正面から解決されたときは、覚えておくと後で効いてくる。区切り線はまさにその手の場所だった。

Safariの新しい版で使えるようになるフォームと表示まわりの指定

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

Safariの次の版のベータが公開され、58件の新機能と525件の修正が入るとされています。WebKitの発表を読むと、目新しい機能を数多く並べるというより、既存の機能の細かい挙動を揃える作業に重心が置かれているのが分かります。

とはいえ、制作の現場ですぐ効きそうな追加もいくつか含まれています。中小企業のサイトでも出番がありそうなものを、順に並べてみます。

セレクト要素の見た目を組み直せるようになる

フォームのセレクトボックスは、ブラウザごとに見た目が違ううえ、選択肢の並びに手を入れられない部分が長く残っていました。デザインに合わせたい場合、select要素を捨ててdivとJavaScriptで作り直すのが定番の回避策です。

今回のベータではappearance: base-selectに対応し、本来の要素のまま見た目だけを組み直せるようになります。キーボード操作や読み上げ、フォーム送信の挙動は標準のまま残るので、作り直したときに抜けがちな部分を自前で用意しなくて済みます。問い合わせフォームのように、崩れると直接損をする箇所ほど恩恵が大きいところです。

遅れて読み込まれた要素で読む位置がずれない

記事を読んでいる途中で、画面の上のほうにある画像や埋め込みが遅れて表示され、本文が下に押し出される。よくある不快な挙動です。スクロールアンカリングは、こうしたときに表示位置を自動で補正して、読んでいた行を保ちます。

他のブラウザではすでに動いていた機能なので、Safariが加わることで挙動の差が縮みます。ただし、画像に幅と高さを書いておくといった基本の対策が不要になるわけではありません。ブラウザ側の補正はあくまで最後の受け皿と考えておくのが安全です。

見出しをまとめて指定できる疑似クラス

:headingは、h1からh6までをまとめて指す疑似クラスです。これまではセレクタに六つ並べて書くのが普通で、余白や行間を揃えたいだけの場面では冗長でした。

書く量が減るだけの小さな追加に見えますが、見出しの階層が増えたり減ったりする構成では、書き漏らしを防ぐ意味もあります。ブログのように書き手が複数いるサイトでは、想定していなかった深さの見出しが入ることも珍しくありません。

余白まで含めて幅を伸ばすstretchという値

幅や高さの指定にstretchという値が使えるようになります。親の中で余白の分まで含めて伸ばす指定で、これまでcalcを使って余白を引いて調整していた場面を素直に書けます。

あわせてrevert-ruleというキーワードも入りました。そのルールが当たる前の状態まで戻す指定で、後から足したCSSが積み重なって入り組んだサイトの調整に向きます。どちらも派手さはありませんが、既存サイトに手を入れる仕事では出番がありそうです。

画像のsizes属性をブラウザに計算させる

遅延読み込みを指定した画像で、sizes属性にautoと書けるようになります。実際のレイアウト幅をブラウザが測り、srcsetに並べた候補から適したものを選びます。

これまでは画面幅ごとの表示幅を自分で書き並べる必要があり、レイアウトを変えるたびに書き直す手間がありました。書いた値が実際のレイアウトと食い違うと、必要以上に大きい画像を読み込んでしまいます。手作業の当て推量が減るのは、表示速度の面でも助かります。

同じ時期に出たChromeの新しい安定版には、矢印キーでの項目移動を属性の指定だけで有効にできるfocusgroupが入っています。片方は新しい書き方を先に出し、片方は既存の機能の足並みを揃える。方向は違いますが、どちらも自前のスクリプトで埋めていた部分を標準側に寄せる動きです。実務では、対応が片方だけの機能はしばらく補助的に添える程度にとどめ、両方に入ったものから本番へ回すのが無難だと思います。

枠線にグラデーションを回り道なしで指定できるCSSの新機能

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

ボタンやカードの枠線にグラデーションをかけたい、という要望は制作の現場でよく出てきます。ところがこれまでのCSSでは、枠線そのものに直接グラデーションを指定する手立てがありませんでした。地方の小さなサイトから大規模サイトまで、デザイナーが同じ回り道を強いられてきた領域です。ここに動きがあったので共有します。

これまで枠線グラデーションは回り道が必要だった

border-colorには単色しか指定できません。そのためグラデーションの枠線を作るには、いくつかの遠回りな方法が使われてきました。代表的なのがborder-imageを使う書き方ですが、角丸との相性が悪く、border-radiusを当てると角が欠けてしまうという弱点があります。

もうひとつは、擬似要素や入れ子の要素を重ねて、背景のグラデーションを枠線に見せかける方法です。こちらは角丸にも対応できますが、余分なマークアップが増え、レイアウトの計算も複雑になります。SVGで枠を描いて重ねるやり方もありますが、いずれにしても本来の目的に対して手数が多すぎました。

結果として、枠線グラデーションは「できなくはないが、毎回コピーしてきた定型のコードを貼り付けて使う」ような、少し身構える表現になっていました。どれも「枠線にグラデーション」というシンプルな見た目のわりに、裏側の手間が大きいのが実情です。新しく担当する制作者がコードを読み解くときにも、なぜこんな構造になっているのか分かりにくいという副作用がありました。

background-clipにborder-areaという値が加わった

Chrome 150で、background-clipプロパティにborder-areaという新しい値が入りました。これは要素の背景を、枠線が描かれる範囲に沿って切り抜くという指定です。border-widthとborder-styleを踏まえて背景を枠線の形に合わせ、border-colorの透明度は無視します。

やっていることは単純で、背景にグラデーションを敷き、それを枠線の領域だけに見えるよう切り抜く、という発想です。border-imageのような専用の仕組みではなく、使い慣れた背景まわりのプロパティの延長で枠線を装飾できるのが利点です。角丸ともきれいに馴染みます。なおこの機能は先にWebKit系のブラウザが搭載しており、今回のChrome側の対応で足並みがそろった形になります。

実際の書き方と気をつける点

基本の流れは、background-imageにグラデーションを指定し、background-clipにborder-areaを指定し、あわせてbackground-originをborder-boxにする、という三点セットです。background-originを省くと初期値のpadding-boxで描かれてしまい、グラデーションの位置が枠線とわずかにずれます。ここは忘れやすい落とし穴なので、border-boxを明示しておくと安全です。

枠線を実際に見せるには、border-styleをsolidにしてborder-widthで太さを与える必要があります。透明な枠線では切り抜く範囲そのものが生まれないためです。破線や点線を指定すれば、その途切れた形のままグラデーションが乗るので、単なるグラデーション枠にとどまらない装飾も作れます。詳しい挙動はChrome 150の公式ブログにまとまっているので、導入前に一度目を通しておくとよいでしょう。

既存の背景色や背景画像と組み合わせたいときは、backgroundを複数レイヤーで重ねる書き方になります。枠線用のグラデーションと本体の背景を別々のレイヤーとして指定し、border-areaを枠線側のレイヤーにだけ効かせる、という整理をしておくと崩れにくくなります。

中小企業サイトでどう活かせるか

現時点では対応ブラウザがまだ限られるため、すべての来訪者に同じ見た目を届ける用途には早すぎます。実務では、枠線グラデーションを装飾の飾りと位置づけ、対応していないブラウザでは単色の枠線にフォールバックさせる考え方が無理のない使い方です。見た目が少し華やかになるかどうかの差であれば、対応環境だけで恩恵を受けられれば十分という判断もできます。

キャンペーンのバナーや、目立たせたいボタン、料金プランのカードなど、装飾の効果が効く場所は中小企業サイトにもよくあります。これまで擬似要素を積んで実現していた表現が、背景まわりの数行で書けるようになるのは、保守のしやすさという点でも歓迎できる変化です。ブラウザ全体に広がるのを待ちつつ、手元の環境で挙動を試しておくと、対応がそろったときにすぐ使い始められます。