Open4
Radix Vueを使ってお手軽にタブレイアウトを作成する
Radix Vueって何?
Vueで利用することができるオープンソースの UI ライブラリ。
ヘッドレスUIと呼ばれるUIライブラリでダイアログやドロップダウンメニューをアプリケーションに実装したい場合に利用することで効率的に開発を進めることができる。
ヘッドレスUIという名の通りレイアウトが決まっていないため、Material UIやChakra UI以上にSCSSやTailwindで自由にカスタマイズできるのが特徴。
実際に使ってみる
実際にタブレイアウトを作ってみる。
公式サイトには、Tailwindを使用したサンプルが載っている。
今回はこちらを解読しながら、自分の作りたいタブレイアウトを作成してみる。
ダミーデータを入れてざっくり書いてみた。
<script setup>
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "radix-vue";
</script>
<template>
<TabsRoot class="tab" default-value="tab1">
<TabsList class="tab__list" aria-label="vueとreactの説明">
<TabsTrigger class="tab__trigger" value="tab1"> Vue </TabsTrigger>
<TabsTrigger class="tab__trigger" value="tab2"> React </TabsTrigger>
</TabsList>
<TabsContent class="tab__content" value="tab1">
<h3 class="tabContent__headline">Vueってな~に?</h3>
<p class="tabContent__text">
Vue.jsは、JavaScriptのフロントエンドフレームワークの一つで、ユーザーインターフェースを構築するために使われます。リアクティブなデータバインディングやコンポーネントベースのアーキテクチャを提供し、シンプルで柔軟な使い方が特徴です。
</p>
</TabsContent>
<TabsContent class="tab__content" value="tab2">
<h3 class="tabContent__headline">Reactってな~に?</h3>
<p class="tabContent__text">
Reactは、JavaScriptのライブラリであり、ユーザーインターフェースを構築するために使われます。コンポーネントベースのアーキテクチャを採用し、仮想DOMを利用して効率的にUIを更新します。SPA(Single
Page Application)の開発や、複雑なUIの管理に向いています。
</p>
</TabsContent>
</TabsRoot>
</template>
<style lang="scss" scoped>
.tab {
max-width: 600px;
border-radius: 5px;
}
.tab__list {
display: flex;
}
.tab__trigger {
padding: 10px 20px;
border: 1px solid #ccc;
cursor: pointer;
background-color: #f8f8f8;
transition: background-color 0.3s;
&:hover {
background-color: #f0f0f0;
}
&[data-state="active"] {
background-color: #e8e8e8;
}
}
.tab__content {
padding: 20px;
background-color: #e8e8e8;
min-height: 400px;
}
.tabContent__headline {
font-size: 24px;
font-weight: 700;
}
.tabContent__text {
padding-top: 10px;
font-size: 16px;
}
</style>
ちょっとだけ説明する。
- TabsRoot
タブレイアウトを作るために必要なコンポーネント。このタグの中に入れ子で以下説明する必要なコンポーネントを入れることで表示できる。 - TabsList
タブを設定するためのコンポーネント。 - TabsTrigger
タブのテキスト等指定するコンポーネント。個々のタブサイズを指定する際はここにスタイルを当てる。 - TabsContent
タブの中身を入れるコンポーネント。最低限の高さ担保等はここにスタイルを当てる。
実際に表示させてみるとこんな感じになる。