vue-tabs-componentで簡単にタブを実装する

2019年5月15日

はじめに

今回ご紹介するvue-tabs-componentを使えば、タブを簡単に実装することができます。

非常にシンプルなライブラリです。

 

環境

Vue.js:2.6.10
vue-tabs-component:1.5

 

インストール

以下のyarnnpmCDNどれか一つを使ってインストールします。

yarn

yarn add vue-tabs-component

npm

npm install vue-tabs-component --save

CDN

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js"></script>

 

Gitは以下のGithubから

https://github.com/spatie/vue-tabs-component

 

導入手順

[手順1] - コンポーネントの取り込み

[手順1-1]もしくは[手順1-2]のどちらかを使用します。

[手順1-1] - yarn npm

import Vue from 'vue';
import {Tabs, Tab} from 'vue-tabs-component';
Vue.component('tabs', Tabs);
Vue.component('tab', Tab);

[手順1-2] - CDN

 var Tabs = window['VueTabs'].Tabs,
     Tab  = window['VueTabs'].Tab;

 new Vue({
   ...
   components: {
    Tabs,
    Tab
   }
 })

[手順2] - テンプレートの設置

    <div id="app">
        <div>
            <tabs>
                <tab id="tab1" name="タブ1">
                    First tab content
                </tab>
                <tab id="tab2" name="タブ2">
                    Second tab content
                </tab>
                <tab id="tab3" name="タブ3">
                    Third tab content
                </tab>
            </tabs>
        </div>
    </div>

[手順3] - スタイルの適用

デフォルトですとスタイルが存在しないので、下記のサンプルを適用します。

.tabs-component {
  margin: 4em 0;
}
.tabs-component-tabs {
  border: solid 1px #ddd;
  border-radius: 6px;
  margin-bottom: 5px;
}
@media (min-width: 700px) {
  .tabs-component-tabs {
    border: 0;
    align-items: stretch;
    display: flex;
    justify-content: flex-start;
    margin-bottom: -1px;
  }
}
.tabs-component-tab {
  color: #999;
  font-size: 14px;
  font-weight: 600;
  margin-right: 0;
  list-style: none;
}
.tabs-component-tab:not(:last-child) {
  border-bottom: dotted 1px #ddd;
}
.tabs-component-tab:hover {
  color: #666;
}
.tabs-component-tab.is-active {
  color: #000;
}
.tabs-component-tab.is-disabled * {
  color: #cdcdcd;
  cursor: not-allowed !important;
}
@media (min-width: 700px) {
  .tabs-component-tab {
    background-color: #fff;
    border: solid 1px #ddd;
    border-radius: 3px 3px 0 0;
    margin-right: .5em;
    transform: translateY(2px);
    transition: transform .3s ease;
  }
  .tabs-component-tab.is-active {
    border-bottom: solid 1px #fff;
    z-index: 2;
    transform: translateY(0);
  }
}
.tabs-component-tab-a {
  align-items: center;
  color: inherit;
  display: flex;
  padding: .75em 1em;
  text-decoration: none;
}
.tabs-component-panels {
  padding: 4em 0;
}
@media (min-width: 700px) {
  .tabs-component-panels {
    border-top-left-radius: 0;
    background-color: #fff;
    border: solid 1px #ddd;
    border-radius: 0 6px 6px 6px;
    box-shadow: 0 0 10px rgba(0, 0, 0, .05);
    padding: 4em 2em;
  }
}

 

デモ

>>専用ページで確認する

 

オプション

URLフラグメントの変更を無効にする

<tabs>optionuseUrlFragmentを設定します。

<tabs :options="{ useUrlFragment: false }">
  ...
</tabs>

 


コールバック

コールバックはclickedchangedの2つが存在します。

<tabs @clicked="tabClicked" @changed="tabChanged">
  ...
</tabs>

methods: {
  tabClicked (selectedTab) {
       console.log('Current tab re-clicked:' + selectedTab.tab.name);
  },
  tabChanged (selectedTab) {
       console.log('Tab changed to:' + selectedTab.tab.name);
  },
}

 


デフォルトタブ

<tabs>optiondefaultTabHashを設定します。

<tabs :options="{ defaultTabHash: 'tab2' }">
      <tab id="tab1" name="タブ1"></tab>
      <tab id="tab2" name="タブ2"></tab>
</tabs>

まとめ

vue-tabs-component は、すごく目立つ機能があるわけではありませんが、最低限欲しいと思う機能は備わっています。

ちょっろと実装したい時には、非常に便利です。

 

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-vue.js
-, ,