Vue.jsの続きです。前回はボタンを配置してみました。今回はヘッダー、フッターを配置してみます。v-app-barとv-footerを使います。それではいきましょう!
【目次】
前回の記事はこちら
※参考:【Vue.js】Vuetifyでボタンを並べてみる(v-app、v-content、v-container、v-layout、v-flex、v-btn) - クモのようにコツコツと
前回のおさらい
ボタンを3つ配置した。
See the Pen Vuetify 02 by イイダリョウ (@i_ryo) on CodePen.
JSは超シンプル!
new Vue({ el: '#app', vuetify: new Vuetify(), })
メインはHTMLコード
<div id="app"> <v-app> <v-content> <v-container> <v-layout wrap> <v-flex xs12 sm6 md4 text-center my-5><v-btn>押して</v-btn></v-flex> <v-flex xs12 sm6 md4 text-center my-5><v-btn >押して</v-btn></v-flex> <v-flex xs12 sm6 md4 text-center my-5><v-btn>押して</v-btn></v-flex> </v-layout> </v-container> </v-content> </v-app> </div>
v-app
>v-content
>v-container
という入れ子構造。v-layout
とその中のv-flex
がグリッド設定設定で、画面サイズによってカラム数が変わる。v-btn
がボタン
そして、CSSコードはなんとゼロ!
詳細は前回記事を参照
※参考:【Vue.js】Vuetifyでボタンを並べてみる(v-app、v-content、v-container、v-layout、v-flex、v-btn) - クモのようにコツコツと
ヘッダーの配置(v-app-bar)
ヘッダーを配置した。
See the Pen Vuetify 03 by イイダリョウ (@i_ryo) on CodePen.
ヘッダーのボタンを押すとフワンとアニメーションするのが気持ちいい。
HTMLコード
<div id="app"> <v-app> <div> <v-app-bar> <!--ヘッダー内容--> </v-app-bar> </div> <v-content> <v-container> <!--本文内容--> </v-container> </v-content> </v-app> </div>
v-app-bar
をv-content
の上に入れる。
公式サイトでは外側をdiv
で囲っており、これがないとヘッダーの高さが固定されなかった。
ヘッダー部分の詳細
<div> <v-app-bar color="gray accent-4" dark > <v-app-bar-nav-icon></v-app-bar-nav-icon> <v-toolbar-title>びゅうてぃふぁい</v-toolbar-title> <div class="flex-grow-1"></div> <v-btn icon> <v-icon>mdi-heart</v-icon> </v-btn> <v-btn icon> <v-icon>mdi-magnify</v-icon> </v-btn> <v-menu left bottom > <template v-slot:activator="{ on }"> <v-btn icon v-on="on"> <v-icon>mdi-dots-vertical</v-icon> </v-btn> </template> <v-list> <v-list-item v-for="n in 5" :key="n" @click="() => {}" > <v-list-item-title>りんく {{ n }}</v-list-item-title> </v-list-item> </v-list> </v-menu> </v-app-bar> </div>
v-app-bar
全体をdivタグで囲むv-app-bar-nav-icon
にナビアイコンが表示されるv-toolbar-title
にタイトル文字を入れる.flex-grow-1
はflexboxによる成り行き設定v-btn
の中にv-icon
。中の文字を認識してアイコンを表示しているv-menu
の中にtemplate
で開閉ボタン、v-list
でリストメニューtemplate
のv-slot:activator
属性でonの設定をし、v-on
と紐付けているv-list
の中のv-list-item
で変数nをv-for
でループして’v-list-item-title`のマスタッシュタグで「りんく1」などの数字にしている。
※参考:https://vuetifyjs.com/en/components/app-bars
template
タグはページ読み込み時ではなくスクリプト実行時に表示される雛形となるタグ。
※参考:templateタグの意味と使い方 | HTML | できるネット
v-slot:activator
って初遭遇
特定の条件時(クリック時・ホバー時のみなど)のみポップアップする場合のトリガー用のスロット
※参考:Vuetifyのv-slot:activatorの使い方 - Qiita
そもそもスロットって何?
スロットとは、子コンポーネントの描画内容を親コンポーネントが決める機能です。
※参考:Vue.js中級編!?「スコープ付きスロット」を理解しよう | Hypertext Candy
なるほど。
フッターの配置(v-footer)
次にフッターを配置。
See the Pen Vuetify 04 by イイダリョウ (@i_ryo) on CodePen.
フッターにコピーライト表記を追加。
HTMLコード
<div id="app"> <v-app> <div> <v-app-bar> <!--ヘッダー内容--> </v-app-bar> </div> <v-content> <v-container> <!--本文内容--> </v-container> </v-content> <v-footer> <!--フッター内容--> </v-footer> </v-app> </div>
今度はv-footer
をv-content
の下に配置する。
フッター部分の詳細
<v-footer> <div class="flex-grow-1"></div> <div>© 2019 - {{ new Date().getFullYear() }} クモのようにコツコツと</div> </v-footer>
.flex-grow-1
で成り行き設定(右寄せに)- マスタッシュタグの中で
Date()
で年を取得
こちらはシンプル。ちょっとしたJSを書きたいときにマスタッシュタグで囲うとscriptタグより少ない技術で済む。
※参考:https://vuetifyjs.com/en/components/footer
なお、©
は一般的なHTMLの特殊文字記法(&と;で囲う)
※参考:HTMLの特殊文字一覧:文字コードの変換表と書き方の説明 - ウェブランサー
最後に
VuetifyはCSSを書かずにJSもシンプルなまま、HTMLだけでどんどん画面が作れちゃう。デザインがマテリアルデザインで良いのであればかなり時短になると思う。
タグや属性がだいたいv-hoge
なのも識別がしやすくていい!
次回は、ほかのパーツなども配置してみたく思います。それではまた!
※続き書きました!
https://www.i-ryo.com/entry/2019/09/11/071054
※参考:Vue.jsの習得のためにやったことまとめ
qiita.com