下部にフッターを固定するところまでできたので、今回はヘッダー代わりツールバーを配置します。また、ついでにフッターもまともなものにします。
基本的なセットアップは終わっていることを前提していますので、それらについては下記を参照してください。



各種バージョンは以下のとおりです。
- Angular CLI: 11.2.8
- Node: 15.10.0
- Angular Material: 11.2.8
TOC
今回の目標とソースコードについて
今回できあがるページのイメージとソースコードは以下のとおりです。

ツールバーコンポーネントの追加
Angular Materialを使ってツールバーを追加していきます。前回ヘッダーコンポーネントをshared
フォルダ配下に作成したと思うので、そこを変更していきます。Angular Materialのコンポーネントの作り方は基本的には一緒で、公式ホームページから例をコピペして、必要に応じて変更します。
公式ホームページからツールバーをコピーします。コピーするには使いたいベースとなる例を見つけ、そのコードを表示します。例として、今回は下記のものを使用するので、その右上にあるボタンを押します。

するとコードが表示されます。基本的にHTML、TS、CSSのタブがありますので、それぞれ自分のアプリケーションにコピーします。

今回は下記のものを例にして、作っていきます。メニューと共有ボタンはいらないので、後ほど削除します。

まず、HTMLをコピーします。例の中から下記にあたる部分をコピーしてコンポーネント内のhtmlファイルに貼り付けます。コピーする際に不要なメニューや共有ボタンなどを排除します。
<mat-toolbar color="primary">
<span>My App</span>
<span class="spacer"></span>
</mat-toolbar>
続いて、CSSをコピペしていきます。
.spacer {
flex: 1 1 auto;
}
続いてTSになるのですが、今回の例だとコピーする必要はなさそうです。
今回headerコンポーネントは、app.module.ts
で宣言されており、以前の記事で共有のMaterialModuleを作成し、インポート済みなので、ツールバーが想定通り表示されていると思います。

ちなみに、このツールバーにもFlexLayoutが使われています。HTMLを見ていただくと分かる通り、タイトルのあとに何もない<span class="spacer"></span>
があると思います。このspanに対して、CSSでflex: 1 1 auto;
を指定しています。これらは、左からflex-grow
、flex-shrink
、flex-basis
を指定していることになります。今回の例だと左に置きたいものと右に置きたいものの間において、よしなにその間を空白で埋めてくれるようなものです。そのため、例だと左側にタイトル、右側に共有ボタンなどが表示されています。詳しくこれらについて見たい方は、下記のページを参考にしてください。
フッターコンポーネント作成
続いてフッターコンポーネントを編集していきます。今回したいことは以下の通り。
- アプリケーション名を表示(ついでにツールバーのタイトルも変更)
- フッターの背景色をAngular Materialのメインカラーにする
フッターコンポーネントのhtmlとscssを以下のように編集。
<footer class="footer">Angular Materialテストアプリ</footer>
.footer {
padding: 12px;
font-size: 12px;
background: #3f51b5;
color: #ffffff;
text-align: center;
}
フッターに使う背景の色などはテーマから取ってくるべきなのでしょうが、複雑になるので今回は単純に同じ色を直で指定してます。この段階で以下のようなページができているはずです。

まとめ
ツールバーの追加とフッターの編集を行いました。メインコンテンツが何もないので、まだまだ寂しい見た目をしていますが、来週からコンテンツを作っていき、webページらしくしていきます。
