【Horizon】カラムレイアウトブロックで幅比率を自由に設定する独自ブロック
Horizonテーマでページを作り込んでいると、「ここに2カラムのサイドバー付きレイアウトが欲しい」「3カラムで商品を並べたい」という場面に必ず出くわします。
Horizonには group ブロックがあり横並びレイアウト自体は可能ですが、各カラムの幅比率を直接指定する手段がありません。たとえば「左にメインコンテンツ、右にサイドバー(2:1)」を作ろうとすると、間接的な方法で調整するしかなく、思い通りの比率を出すのに苦労します。
この記事では、この課題を解決するカスタムカラムレイアウトブロックを紹介します。テーマエディタでプリセットを選ぶだけで柔軟なカラムレイアウトが実現でき、既存ファイルへの変更も不要です。
groupブロックの限界
Horizonの group ブロックは汎用的なコンテナで、子ブロックを横並びや縦並びに配置できます。しかし、カラムレイアウトとして使おうとすると以下の壁にぶつかります。
- 幅比率を指定できない ― 「左2:右1」のように明示的な比率指定ができない。子ブロックの幅設定を個別に調整して近似する必要がある
- デスクトップ/モバイルの独立制御が難しい ― デスクトップでは3列、モバイルでは1列に積む、といったレスポンシブ制御が直接はできない
- カラム間の余白調整が限定的 ― 横方向・縦方向のgapを個別にpx単位で指定する仕組みがない
こうした制限を回避するために、PageFlyなどの外部ページビルダーアプリを使うケースもあります。ただ、アプリを追加するとJavaScriptの読み込みが増えて表示速度に影響が出たり、テーマのカラースキームやデザインシステムとの一貫性が崩れやすくなります。
カラムレイアウトブロックでできること
今回紹介するカラムレイアウトブロックは、CSS Gridをベースにしたテーマネイティブのカスタムブロックです。テーマエディタからノーコードで操作でき、以下のことが可能です。
14パターンのプリセット + カスタム自由入力
テーマエディタのドロップダウンから、よく使うカラムパターンをワンクリックで選べます。
| パターン | 用途例 |
|---|---|
| 2列均等(1:1) | テキスト+画像の並列配置 |
| 2列(2:1)/ 2列(1:2) | メインコンテンツ+サイドバー |
| 2列(3:1)/ 2列(1:3) | コンテンツ+狭いサイドバー(ナビやCTAなど) |
| 3列均等(1:1:1) | 特徴紹介、3つの柱 |
| 3列(1:2:1) | 中央にメインコンテンツ、左右にサイド |
| 4列 / 5列 / 6列(均等) | ロゴ一覧、アイコングリッド |
| カスタム(自由入力) |
1 2 1 や 30 40 30 のように数値を入力 |
プリセットでカバーできない比率が必要な場合は「カスタム」を選択し、スペース区切りで数値を入力するだけです。入力した数値はそのままCSS Gridの fr 単位に変換されます。
デスクトップとモバイルを独立制御
レイアウトパターンはデスクトップ用とモバイル用を別々に設定できます。たとえば:
- デスクトップ: 3列均等 → モバイル: 1列(縦積み)
- デスクトップ: 2:1サイドバー → モバイル: 1列(サイドバーが下に回り込む)
- デスクトップ: 4列 → モバイル: 2列均等
カラム間のgap(余白)もデスクトップとモバイルで個別にpx単位で調整可能です。
Horizonの既存ブロックをそのまま配置
カラムの中には、Horizonが持つ既存ブロック(テキスト、画像、group、ボタンなど)をそのまま子ブロックとして配置できます。新しい操作を覚える必要はなく、テーマエディタの通常のドラッグ&ドロップで使えます。
外観設定もフル装備
groupブロックと同等の外観設定を備えています:
- カラースキーム(テーマの配色を継承 or 個別指定)
- 背景画像・背景動画
- オーバーレイ(ソリッド / グラデーション)
- ボーダー(太さ、透明度、角丸)
- パディング(上下左右を個別指定)
- 縦方向の揃え(上寄せ / 中央 / 下寄せ / 高さを揃える)
ライブデモ:実際の配置例
デモストアにこのブロックを組み込み、代表的な比率パターンをそのままテーマエディタから配置してみた例です。いずれもプリセット選択のみで実現しており、Liquid や CSS は一切書いていません。
いずれもデスクトップ表示の例です。モバイルでは別のプリセット(1列や2列均等)を指定することで、同じコンテンツがレスポンシブに縦積みされます。
技術的な設計のポイント
なぜCSS Gridなのか
カラムレイアウトの実装方法として、Flexbox + nth-child という選択肢もあります。しかし、この方式はモバイル向けに列数を変更する際にCSSの詳細度が競合しやすく、他のスタイルとの干渉が起きがちです。
CSS Gridであれば、grid-template-columns の値を変えるだけでレイアウトが切り替わります。メディアクエリでの上書きもシンプルで、予期しないCSS競合が起きにくい設計になっています。
grid-template-columnsの変換ロジック既存ファイルへの変更なし
このブロックは新規ファイルの追加だけで構成されています。
-
blocks/column.liquid― ブロック定義(schema + render呼び出し) -
snippets/column.liquid― レンダリングロジック(CSS Gridの生成) - ロケールファイル(
en.default.schema.json,ja.schema.json)への翻訳キー追加
Horizonの既存ファイルは一切変更していません。これは以前の記事で解説した「ベンダーファイルを触らない」原則に沿った設計であり、テーマのアップデート時にコンフリクトが発生しません。v3.5.0のようなCSS大規模リファクタリングが来ても、このカスタムブロックは影響を受けません。
Horizonのブロックアーキテクチャは、blocks/ ディレクトリにファイルを追加するだけで、テーマエディタに自動的にブロックとして表示される仕組みです。つまり、「ファイルを置くだけ」で新しいブロックが使えるようになります。これはHorizonのブロックベースアーキテクチャならではの強みです。
プリセット + カスタムの2層構造
設定UIは「初心者はプリセットで迷わない、上級者はカスタムで自由に」という2層構造になっています。カスタム入力欄はプリセットで「カスタム」を選んだ場合のみ表示される visible_if 制御が入っており、普段使いではシンプルな画面のままです。
groupブロックとの比較
| groupブロック(標準) | columnブロック(カスタム) | |
|---|---|---|
| 幅比率の指定 | 間接的(子ブロックの幅で調整) | 直接指定(プリセット or 数値入力) |
| レスポンシブ制御 | 限定的 | デスクトップ/モバイル独立設定 |
| Gap(余白)制御 | 限定的 | 横/縦 × デスクトップ/モバイル(4値) |
| CSS方式 | Flexbox | CSS Grid(競合しにくい) |
| 外観設定 | あり | 同等(背景、オーバーレイ、ボーダー等) |
| 用途 | 汎用コンテナ | カラムレイアウト特化 |
groupブロックが不要になるわけではありません。groupは汎用コンテナとして引き続き活躍します。columnブロックは「明確なカラム分割が必要な場面」に特化しており、両者は補完的な関係です。
こんな場面で役に立つ
どのページでも「横に並べたい」場面はあります。具体的にはこういったケースです。
- LPのヒーローセクション ― 左にキャッチコピー+CTAボタン、右に商品画像(2:1)。テキストが主役の構成に。
- ブランドストーリーページ ― 左に長文テキスト、右にミニ写真グリッド(3:1)。読ませるページを作りやすい。
- サービスの強み・特徴紹介 ― アイコン+テキストのセットを3列均等(1:1:1)で並べる定番レイアウト。
- ロゴ一覧・パートナー紹介 ― 4〜6列でロゴを横一列に並べる。デスクトップで6列、モバイルで2列、といった切り替えも設定ひとつ。
- 比較コンテンツ ― 2列(1:1)でビフォーアフターや商品の比較を並べる。
いずれも、テーマエディタのドロップダウンを切り替えるだけで実現できます。コードを触る必要はありません。
導入方法
以下のファイルをテーマに追加するだけです。
-
blocks/column.liquidを追加 -
snippets/column.liquidを追加 - ロケールファイル(
en.default.schema.json,ja.schema.json)に翻訳キーを追記
ファイルを追加してテーマエディタをリロードすると、カスタムセクション内のブロック追加メニューに「カラムレイアウト」が表示されます。
注意:このブロックは 安全カスタマイズ記事で解説したGitブランチ運用を前提としています。upstream/horizon ブランチでオリジナルを追跡し、カスタマイズは main ブランチで管理してください。
コードファイルはSTORE DOJOのTIPSで配布しています。→ 【Horizon】幅比率を指定できるカラムレイアウトブロックを追加する
まとめ
Horizonテーマのカラムレイアウトの課題は、外部アプリに頼ることなく、テーマネイティブのカスタムブロックで解決できます。
- 14パターンのプリセット+カスタム自由入力で、思い通りのカラム比率を実現
- デスクトップとモバイルで独立したレイアウト制御
- CSS Gridベースで軽量、パフォーマンスへの影響なし
- 既存ファイルへの変更なし ― テーマアップデートに強い
- Horizonのブロックアーキテクチャに乗っかるため、ファイルを置くだけで即利用可能
「groupブロックでは幅比率が思い通りにならない」と感じたことがある方は、ぜひ試してみてください。
コードファイル(blocks/column.liquid と snippets/column.liquid)はSTORE DOJOのTIPSで配布しています。
→ 【Horizon】幅比率を指定できるカラムレイアウトブロックを追加する