目次
はじめに
今回ご紹介するvue-tabs-componentを使えば、タブを簡単に実装することができます。
非常にシンプルなライブラリです。
環境
Vue.js:2.6.10
vue-tabs-component:1.5
インストール
以下のyarn、npm、CDNのどれか一つを使ってインストールします。
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>にoptionのuseUrlFragmentを設定します。
<tabs :options="{ useUrlFragment: false }"> ... </tabs>
コールバック
コールバックはclickedとchangedの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>にoptionのdefaultTabHashを設定します。
<tabs :options="{ defaultTabHash: 'tab2' }"> <tab id="tab1" name="タブ1"></tab> <tab id="tab2" name="タブ2"></tab> </tabs>
まとめ
vue-tabs-component は、すごく目立つ機能があるわけではありませんが、最低限欲しいと思う機能は備わっています。
ちょっろと実装したい時には、非常に便利です。