お買い物マラソン開催中!9/24 01:59まで楽天市場
カスタマイズ

タブ切り替えをHTMLとCSSで実装(JavaScriptなし/複数設置可)

アイキャッチ/タブ切り替えカスタマイズ
スポンサーリンク
ブロガー
ブロガー

Cocoonでも、有料テーマのようにタブ切り替えできないかな?

そんな願いを叶えます。

コードペンで作成したタブ切り替えがこちら。

実際に動作やコードを確認できます

See the Pen Untitled by はっちゃん (@hacchan) on CodePen.

タブ切り替えは実は人気有料テーマのSWELLではHTMLやCSSをいじらずにサクッと作れてしまうのですが、私が使っている無料テーマのCocoonはそう簡単にはいかなくて。

手作りでなんとか設置できないかな~と調べること数日。

今回、思い切って導入しました!

この記事を読めば機能的な有料テーマ風!タブ切り替えを実装できますのでぜひ読んでみてくださいね。

スポンサーリンク
この記事を書いた人
  • ブログ好きな40代主婦
  • CocoonサイトをCSSでフルカスタマイズ
  • JavaScriptを勉強中
  • ドメインパワー32
  • ワードプレスで2サイトを運営しています
はっちゃん
です
プロフィール

タブ切り替えをWordPressで使う際の注意点

サイト型トップページ/お知らせ

まずはじめに注意点です。

  • このタブ切り替えはクラシックエディタでは使えません

クラシックエディタではワードプレスの仕様で自動的に<p></p>(段落を意味するHTMLのタグのひとつ)が挿入され、強制的に改行されてタブのレイアウトが崩れてしまうためです。

いずれかの方法を選択してください。

  • ブロックエディタでカスタムHTMLに記述する(こちらがベストです)
  • <p></p>がついてしまった場合はタグを削除する

タブ切り替えの動作イメージ

初期状態ではタブ①が選択されているので(変更可能)、タブ②、タブ③を押してみてください。

クリックすることによって下部に表示されるコンテンツが切り替わっていると思います。

See the Pen タブ切り替え by はっちゃん (@hacchan) on CodePen.

タブ切り替えするためのコード

まずはこちらをご覧ください。

HTML

投稿編集画面:HTMLモードで入力します。

途中で<br><p>が入ると予期せぬ改行がされてしまうので、<input><label>部分はすべてつなげて書くようにします。
<div class="tab-wrap">
 <input id="TAB-01" type="radio" name="TAB" class="tab-switch" checked="checked" /><label class="tab-label" for="TAB-01">タブ①</label>
    <div class="tab-content">
      コンテンツ①をここに入れる
    </div>

 <input id="TAB-02" type="radio" name="TAB" class="tab-switch" /><label class="tab-label" for="TAB-02">タブ②</label>
    <div class="tab-content">
      コンテンツ②をここに入れる
    </div>

 <input id="TAB-03" type="radio" name="TAB" class="tab-switch" /><label class="tab-label" for="TAB-03">タブ③</label>
    <div class="tab-content">
      コンテンツ③をここに入れる
    </div>
</div>

HTMLの解説

ずらーっと並ぶと何がなんだかよく分からないように見えますが、タブ1つのコードはこの部分です。

<input id="TAB-01" type="radio" name="TAB" class="tab-switch" checked="checked" />
<label class="tab-label" for="TAB-01">タブ①</label>
    <div class="tab-content">
      コンテンツ①をここに入れる
    </div>

タブ自体を作るHTML部分

<input id="TAB-01" type="radio" name="TAB" class="tab-switch" checked="checked" />
<label class="tab-label" for="TAB-01">タブ①</label>

<input>(radioボタン)と<label>タグがセットで1つのタブができあがります。

<input>のtypeは”radio”にします。

radioボタンの「同時にひとつのボタンしか選択できない」(ひとつのradioボタンをチェックすると他のradioボタンのチェックが自動的に外れる)性質を利用してタブ切り替えを作成します。

<input>(radioボタン)に、タブのオン/オフ(そのタブが選択されているかいないか)を拾ってもらい、タブとなる部分は<label>を使って表示させて見た目を整えます。

それぞれの<input>のid属性と<label>のfor属性の名前を合わせます。

タブが選択された際に表示する内容のHTML部分

<div class="tab-content">
      コンテンツ①をここに入れる
</div>

ここでは「tab-content」というクラス名をつけ、タブが選択された際の表示切り替えに利用します。

HTMLのポイント

※ポイントとなる部分のみを抜粋しています。

  1. <input>name属性に同じ名前を付ける。
    • タブ① <input id=”TAB-01name=”TAB” />
    • タブ② <input id=”TAB-02name=”TAB” />
    • タブ③ <input id=”TAB-03name=”TAB” />
  2. 1行の<input>id属性<label>for属性に同じ名前を付ける。
    • タブ①<input id=”TAB-01” /><label for=”TAB-01“></label>
    • タブ②<input id=”TAB-02” /><label for=”TAB-02“></label>
    • タブ③<input id=”TAB-03” /><label for=”TAB-03“></label>
  3. 初期状態でアクティブにするタブ
    • <input>checked=”checkedを指定します

ここがとても大事

同一ページ内にタブを複数設置する場合に注意すること。

  1. タブ切り替え毎に<input>のname属性にそれぞれ別の名前を付けます。

  2. <input>id属性<label>for属性が別のタブ切り替えとかぶらないように気をつける。(もちろん同タブ切り替え内でもかぶらないようにします)

名前の付け方はTAB-1、TAB-2、TAB1-1など、他と同じにならなければ自分の分かりやすいようになんでもOK。

作りたいタブ切り替えすべてに違う名前が必要なんだね!HTMLをコピペしてそのまま使い回すと重複してタブ切り替えが動かなくなってしまうよ。

CSS

CSSでタブのデザインを整えます。
(このコードでは吹き出しにしています。)

/**************************
 タブ切り替え
***************************/

/* 親要素でタブの横並びのためflexを指定
*/
.tab-wrap {
  display: flex;
  flex-wrap: wrap;
  margin:5px 0;
}


/* タブ1~3と書いているタブメニュー部分
*/
.tab-label {
  color: White;
  background-color:lightgray;
  text-align: center;
  padding: .5em 1em;
  order: -1;
  position: relative;
  z-index: 1;
  cursor: pointer;
  flex: 1;
}

.tab-label:not(:last-of-type) {
  margin-right: 5px;
}

/* タブのコンテンツ部分*/
.tab-content {
  width: 100%;
  height: 0;
  overflow: hidden;
  opacity: 0;
}

/* アクティブなタブ、チェックされているradioボタンの隣にあるlabelの背景色を変える*/
.tab-switch:checked+.tab-label {
 background-color:#999fad;/*背景色*/
}

.tab-switch:checked+.tab-label:after{
	content: "";
	position: absolute;
	top: 100%;
	left: calc(50% + 5px);
	margin-left: -15px;
	border: 10px solid transparent;
       border-top:10px solid #999fad;
	width: 0;
	height: 0;
}

.tab-switch:checked+.tab-label+.tab-content {
  height: auto;
  overflow: auto;
  padding: 15px 0 0 0;
  opacity: 1;
  transition: .5s opacity;
}

/* radioボタンは仕組みだけ利用するため非表示に*/
.tab-switch {
  display: none;
}

タブの数は自由に変更できます

HTMLの解説でも書いた通り、タブひとつ分のHTMLはこのように<input><label>とタブに表示するコンテンツがワンセットになっています。

<input id="TAB-03" type="radio" name="TAB" class="tab-switch" /><label class="tab-label" for="TAB-03">タブ③</label>
    <div class="tab-content">
      コンテンツ③をここに入れる
    </div>

タブを増やす場合

1行の<input>id属性<label>for属性は必ず合わせ、

既存のタブとは違う名前をつけてワンセットのHTMLコードを追加、タブ名、表示する内容等を編集します。

タブを減らす場合

必要ないタブをワンセットまるごと削除します。

このとき外側の<div class=”tab-wrap”>を閉じている一番最後の</div>まで削除しないように注意しましょう。

タブを入れ子にして複数設置

このカスタマイズ方法を使うとタブを入れ子にして複数設置できるので、

新着記事 人気記事

この2つを各カテゴリごとにタブ切り替え

できるようにしました。

タブ複数設置DEMO

カテゴリーのタブの中に新着/人気の切り替えタブを入れています。

See the Pen Untitled by はっちゃん (@hacchan) on CodePen.

HTML(少し長くなります)

<div class="tab-wrap">
    <input id="TAB-01" type="radio" name="TAB" class="tab-switch" checked="checked"><label class="tab-label" for="TAB-01">カテゴリ①</label>
    <div class="tab-content">
        
<div class="tab-wrap">
    <input name="TAB-1" class="tab-switch" id="TAB-1-1" type="radio" checked="checked"><label class="tab-label" for="TAB-1-1">新着記事</label>
    <div class="tab-content">
↓ここにカテゴリ①の新着記事を表示↓
      
    </div>

    <input name="TAB-1" class="tab-switch" id="TAB-1-2" type="radio"><label class="tab-label" for="TAB-1-2">人気記事</label>
    <div class="tab-content">
↓ここにカテゴリ①人気記事を表示↓

    </div>
</div>
    </div>


    <input id="TAB-02" type="radio" name="TAB" class="tab-switch"><label class="tab-label" for="TAB-02">カテゴリ②</label>
    <div class="tab-content">

<div class="tab-wrap">
    <input name="TAB-2" class="tab-switch" id="TAB-2-1" type="radio" checked="checked"><label class="tab-label" for="TAB-2-1">新着記事</label>
    <div class="tab-content">
↓ここにカテゴリ②の新着記事を表示↓

    </div>

    <input name="TAB-2" class="tab-switch" id="TAB-2-2" type="radio"><label class="tab-label" for="TAB-2-2">人気記事</label>
    <div class="tab-content">
↓ここにカテゴリ②の人気記事を表示↓

    </div>
</div>

    </div>

    <input id="TAB-03" type="radio" name="TAB" class="tab-switch"><label class="tab-label" for="TAB-03">カテゴリ③</label>
    <div class="tab-content">

<div class="tab-wrap">
    <input name="TAB-3" class="tab-switch" id="TAB-3-1" type="radio" checked="checked"><label class="tab-label" for="TAB-3-1">新着記事</label>
    <div class="tab-content">
↓ここにカテゴリ③の新着記事を表示↓

    </div>

    <input name="TAB-3" class="tab-switch" id="TAB-3-2" type="radio"><label class="tab-label" for="TAB-3-2">人気記事</label>
    <div class="tab-content">
↓ここにカテゴリ③の人気記事を表示↓

    </div>
</div>



    </div>
</div>

タブ切り替えを当ブログのトップページに採用

そんなこんなで当ブログにもタブ切り替えが設置され、新トップページが完成いたしました~\(^-^)/

タブのデザイン

CSSを少し変更すると、シンプルなタブのデザインにすることもできます。

See the Pen タブ切り替え(複数設置) by はっちゃん (@hacchan) on CodePen.

ショートコードを利用した新着記事と人気記事

新着記事と人気記事についてはワードプレステーマ「Cocoon」のショートコードを使って表示しています。

投稿編集画面でショートコードのブロックを選択してコードを書きます。

新着記事を表示するショートコード
[new_list]
人気記事を表示するショートコード
[popular_list]

カテゴリや表示する記事数を指定したり、表示形式をある程度変えることもできます。

使い方はCocoon公式サイトをご覧ください。

タブ切り替え/参考にさせていただいたサイト

今回のタブ切り替えはものぐさWEBノート さんから知恵をお借りしました!!

\シンプル&オシャレ、分かりやすいサイトです/

ひとこと

タブ切り替えを自作する方法をご紹介しました。

HTMLは複雑そうに見えてもそのままコピペでき、それぞれの属性につける名前を間違わないように(かぶらないように)すれば難なく設置できるかと思います。

自分で作るには難しいと思っていたタブ切り替えを実装できて私自身もとても満足しています!

Comment

  1. 匿名 より:

    コメント失礼します。

    HTMLにある「コンテンツをここに入れる」には何を入れたら良いのでしょうか?

    タブ自体は奇麗に表示されていますが、各タブの下にカテゴリーを表示したいのですが、URLなどを入力するようなものではないようですし…

    他のサイトも拝見したのですが、ここに何を入れるとカテゴリーや記事が表示されるのかわからず質問させて頂きました。

    • はっちゃんはっちゃん より:

      新着記事や人気記事を表示したいならこちらの記事に書いたショートコード(Cocoon独自のものです)を使いますが、

      カテゴリーを表示したいということであれば、トップページの作り方という記事を更新しましたのでこちらが参考になるかと思います^^

      https://turicco.com/2022/10/05/cocoon-toppage/#toc14

  2. 匿名 より:

    返信ありがとうございます。

    Cocoonではないのでショートコードは使えないのですが、記事拝見させて頂きました。
    色々と試みてみたのですが、結局、素人にはどの要素をいれるとカテゴリーの記事一覧が表示されるのかわからずでした…

    もう少し頑張ってみます。

タイトルとURLをコピーしました