はじめに
以下を実現します。
サービスの手順や作業の流れを解説する際、全体の工程を視覚的に伝える「プロセスステップ」表現はユーザーの理解を大きく助けます。
Cocoon標準の「タブ」ブロックも便利ですが、CSSの新機能(sibling-index()や:has())を活用すれば、JavaScriptを使わずにステップ表示へ簡単にカスタマイズできます。
この記事では、この方法について説明します。
完成イメージ
- 注文
- 決済
- 最終確認
- 購入完了
- イベント一覧から希望する公演・日時を選択する。
- 希望する席種(S席、A席、自由席など)や枚数を指定する。
- 氏名、メールアドレス、電話番号などの連絡先を入力する。
- 支払い方法(クレジットカード、コンビニ払い、スマホ決済など)を選択・入力する。
- 席種、枚数、手数料、合計金額、入力情報を一画面で最終確認する。
- 「購入を確定する」ボタンを押下する。
- 画面に購入完了メッセージと「注文番号」を表示する。
- システムから購入完了メール(自動配信)がユーザーに届く。
実装手順
以下の手順で実装します。
- ラベルGutenbergエディターでの設定
「タブ」ブロックを配置します。
- ラベルCSSを追加
以下のコードをstyle.cssに追加します。
.wp-block-cocoon-blocks-tab { /* アクティブ・進捗線の色 */ --tab-color: #3b82f6; /* 非アクティブの線の色 */ --tab-line-color: #e5e7eb; --tab-color-glow: color-mix(in srgb, var(--tab-color), transparent 80%); --tab-color-light: color-mix(in srgb, var(--tab-color), white 30%); --tab-marker-border: color-mix(in srgb, var(--tab-line-color), black 12%); .tab-label-group { counter-reset: step-counter; gap: 0; margin: 0 0 30px 0 !important; overflow: visible !important; > li { /* タブ位置 */ --i: sibling-index(); align-items: center; background: linear-gradient(var(--tab-line-color), var(--tab-line-color)) 0 15px / 100% 6px no-repeat !important; counter-increment: step-counter; display: flex; flex: 1 1 0; flex-direction: column; padding: 0 !important; position: relative; text-align: center; /* 最初: 自分の中心 → 右端 */ &:first-of-type { background: linear-gradient(var(--tab-line-color), var(--tab-line-color)) 100% 15px / 50% 6px no-repeat !important; } /* 最後: 左端 → 自分の中心 */ &:last-of-type { background: linear-gradient(var(--tab-line-color), var(--tab-line-color)) 0 15px / 50% 6px no-repeat !important; } /* li が1つだけの場合は線なし */ &:only-of-type { background: none !important; } /* 進捗線 */ &::after { background-image: linear-gradient( -45deg, var(--tab-color) 25%, var(--tab-color-light) 25%, var(--tab-color-light) 50%, var(--tab-color) 50%, var(--tab-color) 75%, var(--tab-color-light) 75%, var(--tab-color-light) ); background-size: 20px 20px; border-radius: 3px; clip-path: inset(0 100% 0 0); content: ""; height: 6px; position: absolute; right: 50%; top: 15px; transition: clip-path 0.3s ease-in-out; width: calc((var(--i) - 1) * 100%); z-index: 1; } /* アクティブ、またはアクティブより前は線を表示 */ &.is-active::after, &:has(~ li.is-active)::after { clip-path: inset(0 0 0 0); } /* 数字サークル */ &::before { line-height: 32px; background-color: #fff; border: 2px solid var(--tab-marker-border); border-radius: 50%; box-sizing: border-box; content: counter(step-counter); font-weight: bold; height: 36px; margin-bottom: 8px; transition: all 0.4s ease; width: 36px; z-index: 2; } /* アクティブ */ &.is-active { color: var(--tab-color); font-weight: bold; &::before { background-color: var(--tab-color); border-color: var(--tab-color); box-shadow: 0 0 0 4px var(--tab-color-glow); color: #fff; } } } } }
さいごに
今回紹介した方法を使えば、JavaScriptや複雑な設定を一切使うことなく、Cocoonの標準「タブ」ブロックをステップ表示にカスタマイズできます。
sibling-index()や :has()といった最新のCSS機能を活用することで、タブの増減にも自動で追従し、コードの保守性も大幅に向上します。


