古いブラウザーの対応

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2020.

このモジュールでは、フレックスボックスとグリッドをデザインの主なレイアウト方法として使用することをお勧めしています。 しかしながら、サイトへの訪問者には、古いブラウザーや、使用している方法をサポートしていないブラウザーを使用している人がいます。 これはウェブ上で常に当てはまります — 新しい機能が開発されると、ブラウザーによって異なるものが優先されます。 この記事では、古い技術のユーザーを締め出すことなく最新のウェブテクニックを使用する方法について説明します。

前提知識: HTML の基礎(HTML 入門で学習)、 CSS の動作の考え方( CSS 入門ボックスのスタイル設定で学習)
目的: 使用したい機能に対応していない可能性がある、古いブラウザーでレイアウトのサポートを提供する方法を理解すること。

あなたのサイトのブラウザーはどのような状況ですか?

すべてのウェブサイトは、対象視聴者という点で異なります。 取るべきアプローチを決める前に、古いブラウザーでサイトにやってくる訪問者の数を調べてください。 あなたが追加したり置き換えたりしている既存のウェブサイトを持っているなら、人々が使用している技術を伝えることができる分析機能 (analytics) を利用できるので、これは簡単です。 分析機能を持っていないか、真新しいサイトであるならば、場所によってフィルターをかけた統計 (statistics) を提供することができる Statcounter のようなサイトがあります。

また、端末の種類やサイトの利用方法についても検討する必要があります。 例えば、モバイル端末の平均数よりも多いと予想される場合があります。 アクセシビリティと支援技術を使用している人々は常に考慮されるべきですが、いくつかのサイトではさらに重要になるかもしれません。 私の経験では、開発者は多くの場合、ユーザーの 1% の体験を非常に心配していますが、はるかに多い数のアクセシビリティが必要な人々は考慮していません。

使用したい機能に対するサポートはどうですか?

BCD tables only load in the browser

上記の表は、各機能ページの下部にある「ブラウザーの互換性」という節に記載されています。サイト訪問者が使用しているブラウザーを特定した後、使用したい技術がブラウザーの間でどの程度対応しているか、また、その技術を持たない訪問者のために代替手段をどの程度簡単に提供できるかを評価することができます。

MDN では、すべての CSS プロパティページでブラウザー互換性情報を提供しています。表で表示されているこの互換性情報には、主要なブラウザーのリストと、プロパティの対応を開始したバージョンが記載されています。ブラウザー名は列の見出しにあります。例えば、上の表や grid-template-columns のページで、特に subgrid (最近対応している)と masonry (実験的で対応していない)の値に注目して見ていってください。

これらのブラウザー対応表は、あなたが探している技術に対応しているブラウザーと、その機能をブラウザーが対応し始めたバージョンに関する情報を提供します。ブラウザーとモバイルブラウザーの互換性情報は別個の情報として表示されます。

機能がどの程度対応されているかを調べるもう 1 つの一般的な方法は、Can I Use ウェブサイトです。 このサイトには、ウェブプラットフォームの機能の大部分と、それらのブラウザーの対応状況に関する情報が記載されています。場所別の使用統計を見ることができます。主に世界の特定の地域のためにユーザーを持っているサイトで働いているなら有用です。 Google Analytics アカウントをリンクして、自分のユーザーデータに基づいて分析することもできます。

ユーザーが持っている技術、そしてあなたが使いたいと思うかもしれないことへの対応を理解することは、すべての決断を下し、すべてのユーザーを対応するための最善の方法を知るための良い場所にあなたを置きます。

対応は「同じに見える」という意味ではありません

ユーザーによってはサイトを携帯電話で見たり、他のユーザーは大きなデスクトップ画面を見たりするため、ウェブサイトはすべてのブラウザーで同じように見えるとは限りません。 同様に、一部のユーザーは古いブラウザーのバージョンを持ち、他のユーザーは最新のブラウザーを持ちます。 一部のユーザーは、コンテンツがスクリーンリーダーによって読み上げられているのを聞いているかもしれないし、それを読むことができるようにページにズームインしているかもしれません。 全員に対応するということは、防御的に設計されたバージョンのコンテンツを提供することを意味します。 その結果、最新のブラウザーでは見栄えがよくなりますが、それでも古いブラウザーのユーザーにとっては基本レベルで使用できます。

基本レベルのサポートは、ページの通常フローが意味をなすように、コンテンツを適切に構成することによります。 非常に限られた機能の携帯電話を持っているユーザーは CSS の多くを得ないかもしれません、しかし内容は読みやすくする方法で流れます。 したがって、よく構造化された HTML 文書を常に出発点にする必要があります。 スタイルシートを削除した場合、コンテンツは意味をなしますか?

ウェブサイトを誰もが同じように使えるようにするために時間を費やすことは、商業的に意味がありません。ユーザー環境は様々であり、制御できないからです。プレーンな HTML ページと完全な機能を備えたウェブサイトの間には、取るべきバランスがあります。サイトの代替表示の使い勝手を確実に保持するために、CSSのないプレーンな表示をテストしておくと便利です。この代替表示は、とても古いブラウザーや制限のあるブラウザーを使用しているユーザーには表示されないかもしれませんが、主要な対象となるユーザー、つまり現行のブラウザーを使用しているユーザーには、ブラウザーやインターネット接続が一時的に失敗したときに表示されるかもしれません。 CSS はこのような代替表示の作成を簡素化します。したがって、制御できることに集中する、つまり、あなたのウェブサイトをアクセシビリティにするために時間を費やす方がよく、それによってより多くのユーザーにサービスを提供することができます。

CSS で代替手段を作成する

CSS 仕様書には、レイアウトメソッドのような 2 つの類似した機能が同じアイテムに適用された場合に、ブラウザーがどのような処理を行うかを説明する情報が含まれています。例えば、アイテムが浮動要素であり、グリッドアイテムでもあり、CSS グリッドコンテナーの一部でもある場合にどうなるかを定義しています。要素に margin-topmargin-block-start プロパティが設定されている場合の定義もあります。

ブラウザーは新しい機能を認識しない場合、その宣言を不正なものとしてエラーを発生させずに破棄します。ブラウザーが対応していない CSS のプロパティや数値は破棄されるため、古い値と新しい値の両方を同じルールセットで共存させることができます。ただ、新しい値の前に古い値を宣言し、対応している場合は新しい値が古い値を上書きするようにします(代替表示)。

例えば、ほとんどのブラウザーは display プロパティの 2 値構文に対応しています。そうでないブラウザーは、古い 1 つの値の構文を使用します。

css
.container {
  display: inline-flex;
  display: inline flex;
}

同様に、このエラー処理は、古い CSS コードベースが、古いベンダー接頭辞付き機能が対応できなくなったとしても、動作し続けることを保証します。ベンダー接頭辞はもう一般的には使用されていませんが、ベンダー接頭辞のプロパティや値を記載する必要がある場合は、標準値の前に接頭辞つきの値を宣言し、対応している場合に新しい値が代替値を上書きするようにしてください。

新しいセレクターの使用

すべてのブラウザーで対応していない新しいセレクターを記載することは、より慎重に処理する必要があります。セレクターのカンマ区切りリスト内のセレクターが不正な場合、スタイルブロック全体が無視されます。

ブラウザーの対応していないベンダー接頭辞付きの擬似要素や新しい擬似クラスを使用する場合は、 :is():where() を使用して寛容なセレクターリスト内に接頭辞の値を記載して、セレクターブロック全体が不正で無視されないようにしてください。

css
:is(:-prefix-mistake, :unsupported-pseudo),
.valid {
  font-family: sans-serif;
}
:-prefix-mistake,
:unsupported-pseudo,
.valid {
  color: red;
}

上記の例では、.valid のコンテンツは sans-serif になりますが、red にはなりません。

機能クエリー

機能クエリーを使用すると、ブラウザーが特定の CSS 機能に対応しているかどうかをテストできます。 つまり、特定の機能に対応していないブラウザー用の CSS を作成してから、そのブラウザーが対応しているかどうかを確認し、対応している場合は素敵なレイアウトを追加することができます。

上記の例に機能クエリーを追加すると、グリッドに対応している場合、項目の幅を auto に戻すことができます。

css
* {
  box-sizing: border-box;
}

.wrapper {
  background-color: palegoldenrod;
  padding: 10px;
  max-width: 400px;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
}

.item {
  border-radius: 5px;
  background-color: rgb(207 232 220);
}

@supports (grid-template-rows: subgrid) {
  .wrapper {
    grid-template-rows: subgrid;
    gap: 10px;
    background-color: lightblue;
    text-align: center;
  }
}
html
<div class="wrapper">
  <div class="item">Item One</div>
  <div class="item">Item Two</div>
  <div class="item">Item Three</div>
  <div class="item">Item Four</div>
  <div class="item">Item Five</div>
  <div class="item">Item Six</div>
</div>

機能クエリーは現行のすべてのブラウザーで対応しています。最初に完全に対応している機能のCSSを、機能クエリー以外で書いてください。サイトが使いやすくなり、すべてのユーザーがアクセシビリティを持てるようになったら、機能クエリーブロック内に新しい機能を追加してください。クエリーされた機能に対応しているブラウザーは、機能クエリーブロック内の新しい CSS をレンダリングすることができます。最初に対応している CSS を使用し、次に対応する機能を強化するという手法を使用してください。

古いブラウザーをテストする

1 つの方法は、ブラウザー横断テストのモジュールに詳述されているように、Sauce Labs のようなオンラインテストツールを使うことです。

まとめ

これで、古いブラウザーに代替 CSS を提供し、新しい機能を自信を持ってテストするための知識を持ちました。これで、新しいテクニックを自信を持って使用することができます。

これで CSS レイアウトに関する記事を読み終えていると思いますので、このモジュールのアセスメント、基本的なレイアウトの理解度で理解度を試す時になりました。

関連情報