こんにちは、ベテランWebデザイナーの皆さん。そして、これからベテランを目指す若手の皆さん。
今日のブログでは、CSS設計における非常に重要な概念「Logical properties」について、特にフローティングとポジショニングに焦点を当てて深掘りしていきます。
「また新しいCSSプロパティか…」と思った方もいるかもしれませんね。ですが、これは単なる新機能ではなく、これからのWeb制作、特にグローバル展開を視野に入れたサイト制作においては、避けて通れない「常識」になると私は確信しています。
なぜ今、Logical propertiesなのか?
皆さんは、RTL(右横書き)言語(アラビア語、ヘブライ語など)のサイト制作や、多言語対応のプロジェクトで苦労した経験はありませんか?
私は過去に、英語サイトをRTL言語にローカライズする際、CSSの大部分を「left」を「right」に、「margin-left」を「margin-right」にといった形で、手作業で書き換える地獄のような作業を経験しました。コンポーネントごとにCSSを分岐させる手間は膨大で、バグの温床にもなりがちでした。
この問題の根本原因は、私たちが普段使っているCSSプロパティの多くが、物理的な方向(上、下、左、右)に依存している点にあります。これらは「Physical properties」と呼ばれます。
一方、Logical propertiesは、コンテンツの書字方向(writing-mode)に基づいて配置を決定します。これにより、言語や書字方向が変わっても、CSSの記述を変更することなく、自動的にレイアウトが適応されるようになります。
Logical propertiesの基本概念
Logical propertiesを理解する上で重要なのは、以下の2つの方向です。
- Inline方向(インライン方向): テキストが流れる方向。英語なら左から右、日本語なら上から下(縦書きの場合)、アラビア語なら右から左。
- Block方向(ブロック方向): ブロック要素が積み重なる方向。一般的なWebサイトでは上から下。
これに基づいて、物理プロパティが論理プロパティに置き換えられます。
| 物理プロパティ | 論理プロパティ | 意味 |
|---|---|---|
top |
block-start |
ブロック方向の開始位置 |
bottom |
block-end |
ブロック方向の終了位置 |
left |
inline-start |
インライン方向の開始位置 |
right |
inline-end |
インライン方向の終了位置 |
マージンやパディング、ボーダーにも同様の概念が適用されます(例: margin-left → margin-inline-start)。
フローティングでの活用
かつてのレイアウトの主役だった`float`プロパティも、Logical propertiesの恩恵を受けられます。
従来の記述:
.card-image {
float: left;
margin-right: 20px;
}
Logical propertiesを使った記述:
.card-image {
float: inline-start; / 書字方向の開始位置にフロート /
margin-inline-end: 20px; / インライン方向の終了側にマージン /
}
この変更が、どんなメリットをもたらすか想像できますか?
例えば、画像とテキストが並ぶカード型レイアウトで、RTL言語に切り替わった場合、`float: inline-start;` は自動的に画像を右に配置し、`margin-inline-end: 20px;` は左側にマージンを適用します。CSSファイルを一切変更することなく、自然なレイアウトが実現するのです。これは、多言語サイトの保守コストを劇的に削減します。
ポジショニングでの活用
AbsoluteやFixedでのポジショニングこそ、Logical propertiesの真骨頂と言えるでしょう。
従来の記述:
.notification-badge {
position: absolute;
top: 10px;
right: 10px;
}
Logical propertiesを使った記述:
.notification-badge {
position: absolute;
inset-block-start: 10px; / ブロック方向の開始位置から10px /
inset-inline-end: 10px; / インライン方向の終了位置から10px /
}
ここで注目したいのが、`inset-block-start` や `inset-inline-end` といったプロパティです。これらは、従来の `top`, `bottom`, `left`, `right` に対応する論理プロパティで、それぞれ書字方向に応じて自動で位置を調整します。
さらに便利なのが、一括指定プロパティ `inset` です。
.notification-badge {
position: absolute;
inset: 10px auto auto 10px; / top right bottom left の順 /
/ 論理プロパティなら: /
inset: 10px 10px auto auto; / block-start inline-end block-end inline-start の順 /
}
これはまだ物理プロパティの順序に慣れているかもしれませんが、将来的には論理的な順序で指定するのが主流になるでしょう。
RTL環境では、`inset-inline-end: 10px;` が自動的に要素を左端から10pxの位置に配置します。通知バッジや、モーダルウィンドウの閉じるボタンなど、特定のコーナーに固定したいUIコンポーネントの実装が格段に楽になります。
具体的なコード例で比較
例えば、親要素の右上(RTLでは左上)にバッジを配置する例です。
物理プロパティの場合:
.parent {
position: relative;
}
.badge {
position: absolute;
top: 0;
right: 0;
/ RTL対応が必要な場合、別途media queryや属性セレクタで `right: auto; left: 0;` のような記述が必要になる /
}
論理プロパティの場合:
.parent {
position: relative;
}
.badge {
position: absolute;
inset-block-start: 0;
inset-inline-end: 0;
/ これだけで、RTL環境でも自動的に左上に配置される /
}
どうですか? 後者のシンプルさと柔軟性は一目瞭然でしょう。
特に、コンポーネントライブラリを開発している方にとっては、あらゆる言語環境で再利用可能なCSSコンポーネントを作る上で、この差は計り知れません。
導入の考慮事項と注意点
- ブラウザサポート: 現代の主要ブラウザでは、ほぼ完全にサポートされています。古いIEなどをターゲットにする場合は注意が必要ですが、実務レベルでは問題ないケースがほとんどでしょう。
- 既存コードのリファクタリング: 既存の大規模なプロジェクトで一気に全てを置き換えるのは大変です。新規コンポーネメントや、RTL対応が必要な部分から段階的に導入していくのが現実的です。
- チーム内の周知: 新しい書き方なので、チームメンバー全員が理解し、合意形成を図ることが重要です。コーディング規約に盛り込むなどして、一貫性を保ちましょう。
まとめ
Logical propertiesは、単に新しいCSSプロパティを覚えるという以上の意味を持ちます。それは、CSSの「考え方」そのものを、より柔軟で、国際化に対応した形へとアップデートすることを意味します。
多言語対応サイトの運用・保守コストの削減、コンポーネントの再利用性の向上、そして何よりも将来にわたって拡張しやすいCSSアーキテクチャの構築。これらは全て、Logical propertiesによって実現可能になります。
シニアWebデザイナーとして、常に最新の技術動向を追い、より良い開発体験とユーザー体験を追求することは私たちの使命です。ぜひ、今日からLogical propertiesをあなたのCSS設計に取り入れてみてください。きっと、Web制作の未来がもっと開けるはずです。
それでは、また次のブログでお会いしましょう!

コメント