Riot.jsでシンプルなタブを作ってみる
最近Riot.jsにハマっていて、とりあえず慣れるためにタブを作ってみました。タブを実装する方法は色々ありますが、タブの数をキーとした方法で実装してみました。
デモ
タブを実装
<div data-is="tabs"></div>
<script src="https://cdn.jsdelivr.net/npm/riot@3.7/riot+compiler.min.js"></script>
<script type="riot/tag">
<tabs>
<ul class="tabs">
<li each="{tab, i in tabs}" class="{is-active: parent.index === i}" onclick="{parent.changeTab}">{tab}</li>
</ul>
<section class="content" data-is="content-{index}"></section>
<style>
:scope {
margin: 0 auto;
max-width: 300px;
background-color: #fff;
box-shadow: 0 6px 40px rgba(201, 50, 16, .5);
}
.tabs {
list-style: none;
border-bottom: 1px solid #ebebeb;
background-color: #fafafa;
}
.tabs::after {
display: table;
content: '';
clear: both;
}
.tabs > li {
position: relative;
float: left;
padding: .8em 0 1em;
width: 33.33333%;
color: #6c6c6c;
text-align: center;
cursor: default;
}
.tabs > li.is-active {
color: #fd7557;
font-weight: bold;
}
.tabs > li.is-active::before {
position: absolute;
left: 0;
right: 0;
bottom: 0;
content: '';
border-top: 3px solid #fd6d4f;
box-shadow: 0 0 8px rgba(234, 64, 26, .6);
}
.content {
padding: 1.2em 1.4em;
color: #4c4c4c;
}
</style>
var self = this;
// タブのタイトルを配列で管理
self.tabs = [
'Tab 1',
'Tab 2',
'Tab 3'
];
// 初回表示時は0番目のタブを表示
self.index = 0;
// タブをクリックでindexを切り替え
changeTab(event) {
self.index = event.item.i;
}
</tabs>
<content-0>
<p>どろん!! |_・) |・) |) ※パッ</p>
</content-0>
<content-1>
<p>只今 \( ̄^ ̄)/ 参上!!</p>
</content-1>
<content-2>
<p>((((((( ‥)ノ |EXIT|</p>
</content-2>
</script>
<script>
riot.mount('*');
</script>
今回は content-0
のようにタブの番目をキーとしていますが、実際には添え字なしのカスタムタグで管理するかもしれません。仕組み自体は非常にシンプルなので、Riot.jsを理解するにあたって参考になるといいなと思います。
CSS本執筆しました!!!
CSS本出します!1/29発売予定
— たかもそ@CSS本1/29発売!! (@takamosoo) 2018年12月31日
自分がCSS学びたての頃にもっとはやく知りたかったテクニックを載せています。CSSの基礎知識について解説していないので、中級者〜向けとなります。CSS入門書を読んではみたものの、思い通りに作れない人にオススメです。
よろしくお願いします。https://t.co/fkz1dM03Pj pic.twitter.com/suYyaPqwIs