テクノロジー

Google推奨CSSの書き方!FlexboxとGridの正解は?

Google推奨CSSの書き方!FlexboxとGridの正解は?

CSSの書き方、これで合ってる?と不安になりませんか

Webサイトを作っていると、「このCSSの書き方、本当にモダンで正しいのかな?」と不安になること、ありますよね。情報が多すぎて、どれが最新のベストプラクティスなのか分からなくなりがちです。

そんな悩みを解決するヒントが、実はGoogleから提供されています。Google Chromeチームが公開している「Modern Web Guidance」は、まさにモダンなWeb開発の「やるべきこと・やってはいけないこと(Dos / Don'ts)」が詰まったガイドラインなんです。

この記事では、そのガイドラインを元に、特に重要なCSSの基礎とレイアウトのポイントを絞って、分かりやすくご紹介します。これを読めば、あなたのCSSコードがもっとスマートで壊れにくくなるはずです!

まずは基本から!Googleが示すCSSの基礎方針

まずは基本から!Googleが示すCSSの基礎方針

モダンなCSSを書くための第一歩は、基礎方針を理解することです。Googleが推奨するのは、「重複を避け、ブラウザの標準機能を最大限に活かす」という考え方です。

同じ値を何度も書くと、後で修正するときに直し忘れが起きやすくなりますよね。これを避けるために、まずはCSSの変数(カスタムプロパティ)を使うのが基本です。しかし、それよりも優先すべきなのが、ブラウザに元々備わっている仕組みを使うことです。

  • currentColorを使う
    親要素の色を継承したいとき、わざわざ変数で色を指定しなくてもcurrentColorで対応できます。
  • inheritキーワードを使う
    親子で同じ値を使いたい場合、inheritを使えば明示的に継承させられます。
  • em単位やコンテナ単位を使う
    font-sizeやボックスモデルの値を繰り返す代わりに、相対的な単位を使うことで柔軟な設計が可能です。

また、もう一つ重要なのが「論理プロパティ」の優先です。margin-leftのような物理的な指定ではなく、margin-inline-startのような論理的な指定を使うことで、日本語の縦書きや右から左に読む言語(RTL)でもレイアウトが崩れにくくなります。

ここがポイント

論理プロパティは常に万能というわけではありません。言語や書字方向に関わらず、常に同じ位置に表示したいアイコンや影などには、従来どおり物理プロパティを使うのが適切です。「これは反転してほしいか?」と自問自答するのがコツです。

こうした基礎を押さえるだけで、コードはぐっと見通しが良くなり、将来の変更にも強くなります。

レイアウト手法の選び方!FlexboxとGrid、どう使い分ける?

レイアウト手法の選び方!FlexboxとGrid、どう使い分ける?

CSSレイアウトの主役といえば、FlexboxとGridですよね。でも、どちらをいつ使えばいいのか迷うことも多いはず。Googleのガイドラインでは、明確な判断基準が示されています。

基本的には「ブラウザのレイアウトエンジンに任せる」のが最も高速で効率的です。固定の幅や高さでガチガチに固める前に、コンテンツの量に応じてサイズが変わる「intrinsic sizing」や、これから紹介するレイアウト手法を検討しましょう。

以下の表は、どのレイアウトを使うかの判断基準をまとめたものです。

用途 使うべきCSS機能
要素を1方向(タテかヨコ)に並べる Flexbox
行と列を持つ複雑なページ構造 Grid
入れ子要素を親のグリッド線に揃えたい subgrid
新聞のような段組み multi-column
要素を別の要素に追従させて浮かせる anchor positioning

このように、単純な横並びならFlexbox、ページ全体の骨格を作るならGrid、というように目的で使い分けるのが正解です。適材適所で選ぶことが、壊れにくく美しいレイアウトへの近道となります。

FlexboxでやりがちなNG例と正しい書き方

FlexboxでやりがちなNG例と正しい書き方

1次元のレイアウト、つまり要素を横一列や縦一列に並べるのに非常に便利なFlexbox。しかし、便利な反面、いくつか知っておくべき「やってはいけないこと」があります。

特に注意したいのが、見た目の順番とHTMLの構造(DOM順)が食い違ってしまうケースです。これはキーボードで操作するユーザーにとって、非常に使いにくいサイトになってしまう原因になります。

  • orderプロパティの乱用
    クリックできるボタンなどの順序をorderで変えると、見た目とキーボードのフォーカス順がズレてしまいます。
  • flex-direction: *-reverseの使用
    これも同様に、DOM順と見た目の順序が逆転するため、操作可能なコンテンツには使うべきではありません。
  • justify-selfの使用
    justify-selfはGridレイアウト用のプロパティで、Flexboxでは効きません。代わりにmargin: autoを使いましょう。

一方で、これを知っているとコーディングが楽になる「やるべきこと」もたくさんあります。

  • gapプロパティで余白を作る
    要素間の余白は、各要素にmarginを指定するより、親要素にgapを指定する方がシンプルで確実です。
  • autoマージンで端に寄せる
    一つの要素だけを右端や左端に寄せたい場合、margin-inline-start: auto(またはmargin-inline-end: auto)を使うのが定石です。
  • 長い文字列には`min-inline-size: 0`
    URLなどの長い文字列がコンテナからはみ出す問題は、flexアイテムにmin-inline-size: 0 (または min-width: 0) を指定することで解決できます。

これらのDos/Don'tsを意識するだけで、より多くの人にとって使いやすく、そして保守しやすいFlexboxレイアウトが実現できます。

Gridとsubgridで実現する高度なレイアウト

Gridとsubgridで実現する高度なレイアウト

ページ全体の骨格や、行と列が組み合わさった複雑なコンポーネントを作るなら、Gridレイアウトの出番です。Gridは2次元のレイアウトを直感的に作れる強力なツールです。

Gridを使いこなすコツは、レイアウトのパターンに応じて適切なプロパティを選ぶことです。

レスポンシブなカードリスト

画面幅に応じて列数が自動で変わるカードリストを作りたいなら、repeat(auto-fit, minmax(200px, 1fr))という書き方が定番です。これにより、各カードが最低200pxの幅を保ちつつ、利用可能なスペースを均等に分け合います。

ページ全体の骨格

ヘッダー、サイドバー、メインコンテンツ、フッターといったページ全体のレイアウトにはgrid-template-areasが非常に便利です。各エリアに名前を付け、アスキーアートのように視覚的にレイアウトを定義できます。

カード内の要素を揃える

Gridレイアウトの中にさらにGridを入れ子にしたとき、内側の要素が隣のカードの要素と揃わない…という問題がよくあります。これを解決するのがsubgridです。子のグリッドが親のグリッド線を継承するため、カード間でタイトルやボタンの高さをピタリと揃えられます。

特にsubgridは、これまでJavaScriptで高さを計算していたようなデザインをCSSだけで実現できる画期的な機能です。Gridを使いこなせば、これまで諦めていた複雑なレイアウトも、シンプルかつ堅牢に実装できるでしょう。

バズリ編集長のひとこと

バズリ編集長のひとこと

結論から言うと、モダンCSSは「ブラウザに任せる」のが一番賢いやり方なんですよね。個人的には、昔みたいにピクセル単位でガチガチに固めるんじゃなくて、fr単位やminmax()で柔軟性を持たせる考え方が好きです。これからCSSを学ぶ人は昔の書き方を飛ばしてOK。ベテランの方は、昔の常識をアップデートする良い機会やと思います。

論理プロパティは、すべてのサイトで使うべきですか?

Googleのガイドラインでは、基本的に論理プロパティを優先することが推奨されています。日本語の縦書きや多言語対応の可能性があるサイトでは特に有効です。ただし、言語に関係なく常に同じ向きにしたいUI(例、シャドウや特定のアイコン)には、意図的に物理プロパティ(margin-leftなど)を使うべき場面もあります。

FlexboxとGrid、結局どちらが優れているのですか?

どちらが優れているというわけではなく、用途によって使い分けるのが正解です。ナビゲーションバーのように要素を一方向に並べるならFlexbox、ページ全体の骨格のように行と列で管理するならGrid、といったように適材適所で選びましょう。両方を組み合わせて使うことも一般的です。

subgridはもう実務で使っても大丈夫ですか?

はい、主要なモダンブラウザ(Chrome, Firefox, Safari, Edge)はすべてsubgridに対応しているため、現在では実務で安心して使用できます。古いブラウザへの対応が必要な場合は、@supportsルールを使ってフォールバックを用意するとより安全です。

まとめ

今回は、Googleの「Modern Web Guidance」を元に、モダンなCSSの「やるべきこと・やってはいけないこと」を見てきました。

重要なのは、固定値に頼りすぎず、FlexboxやGridといったブラウザの強力なレイアウト機能を信頼し、その特性を最大限に活かすことです。また、論理プロパティを使うことで、よりグローバルでアクセシブルなサイト構築に繋がります。

このガイドラインは、コーディングに迷ったときの道しるべになります。ぜひ、日々の開発に取り入れて、より良いCSSを目指してみてください!
元記事はこちらで確認できます: GoogleのModern Web Guidanceに学ぶ、モダンCSSのDos / Don'ts大全

AD SPACE