[Angular Material完全攻略] Day 06 - 打造基本后臺(2) - Toolbar

轉載
在昨天介紹SideNav時墓卦,我們有稍微提到過Toolbar,今天我們就比較認真的來看看Material Design中Toolbar的特性蜒茄,及Angular Material中Toolbar可以呈現什麼樣的變化吧!

Material Design中的Toolbar

Material Design的Toolbar設計指南中餐屎,Toolbar通常會浮動在整個系統(tǒng)的正上方檀葛,所有的內容應該從toolbar下放通過,除非是暫時性顯示的元件如dialog等等腹缩。我們可以把Toolbar當作整個系統(tǒng)的header(或footer)角色屿聋,在這裡放置品牌Logo、標題藏鹊、和一些簡單的執(zhí)行動作等等润讥。

開始使用Angular Material中的Toolbar

Toolbar的元件放置在MatToolbarModule之中,加入這個module后盘寡,我們可以使用mat-toolbar在畫面上呈現一個簡單的toolbar

<mat-toolbar>
  <span>IT鐵人賽-Angular Material Demo</span>
</mat-toolbar>

效果如下:

image

可以看到我們已經加入一個簡單的toolbar了楚殿,不過這樣還有點小小問題,就是我們的toolbar沒有浮動在畫面的最上方竿痰,隨著畫面卷動脆粥,toolbar會消失在畫面之中砌溺,由于toolbar只是一個component,可以在畫面中的任何地方加入变隔,因此直接強制顯示在畫面的最上方在元件設計上也好像怪怪的规伐,但這只是元件設計上的問題而已,要讓這個toolbar固定在最上方其實也不困難弟胀,設定一下CSS就好了楷力!

.demo-app-header {
  position: fixed;
  top: 0;
  z-index: 2;
}

.demo-app-container,
.demo-app-sidenav {
  position: absolute;
  padding-top: 64px;
  height: calc(100vh - 64px);
}

目的是將toolbar固定在上方,并透過z-index: 2來避免卷動時被下方內容蓋過孵户, mat-sidenav-containermat-sidenav喬出一個上方64px的空間給toolbar使用萧朝,避免內容被toolbar蓋過。

接著將原來的元件套上這些樣式

<mat-toolbar class="demo-app-header">
  <span>IT鐵人賽-Angular Material Demo</span>
</mat-toolbar>

<mat-sidenav-container class="demo-app-container">
  <mat-sidenav class="demo-app-sidenav">
    ...
  </mat-sidenav>
  <mat-sidenav-content>
    <router-outlet></router-outlet>
  </mat-sidenav-content>
</mat-sidenav-container>

需要特別注意的是夏哭,前一天我們在mat-sidenav設定了fixedInViewport检柬,在CSS調整后這個屬性會造成sidenav顯示跑掉,因此我們要這個設定拿掉竖配,目前GitHub上已有Issue在討論了何址,希望之后會調整蘿。

成果如下:

image

設定Toolbar的樣式

跟其他Angular Material元件一樣进胯,我們可以透過color來改變toolbar的顏色:

<mat-toolbar color="primary">這是primary的toolbar</mat-toolbar>
<mat-toolbar color="accent">這是accent的toolbar</mat-toolbar>
<mat-toolbar color="warn">這是warn的toolbar</mat-toolbar>

成果如下:

替Toolbar加上各種按鈕

接著我們想在toolbar加上一些東西用爪,第一個是在左邊加上一個icon,可以透過這個icon來開關SideNav胁镐,這是一種很常見的后臺做法

<mat-toolbar color="primary" class="demo-app-header">
  <button mat-icon-button (click)="sideNav.toggle()">
    <mat-icon>{{ sideNav.opened ? 'close' : 'menu' }}</mat-icon>
  </button>
  <span>IT鐵人賽-Angular Material Demo</span>
</mat-toolbar>

效果如下:

image

接著我們想在toolbar的最右邊加上一個登出的按鈕偎血,不過要怎麼把按鈕推到最右邊去呢,其實只要透過CSS就可以輕易解決盯漂,由于Toolbar內的排版是flex颇玷,我們可以加入一個分隔用的空間,把空間后的內容都推到另外一邊去就缆。

.toolbar-seprator {
  flex: 1 1 auto;
}

接著在toolbar中加入這個分隔器

<mat-toolbar color="primary" class="demo-app-header">
  <button mat-icon-button (click)="sideNav.toggle()">
    <mat-icon>{{ sideNav.opened ? 'close' : 'menu' }}</mat-icon>
  </button>

  <span>IT鐵人賽-Angular Material Demo</span>

  <!-- 在這之后的都會被推到右邊去 -->
  <span class="toolbar-seprator"></span>

  <button mat-icon-button>
    <mat-icon>message</mat-icon>
  </button>
  <button mat-icon-button>
    <mat-icon>exit_to_app</mat-icon>
  </button>
</mat-toolbar>

效果如下:

一個有模有樣的toolbar就出現啦帖渠!

多行的Toolbar

Toolbar預設是單行的,在mat-toolbar中的內容預設都會在同一行顯示竭宰,若在一行toolbar中放入太多資訊則可能會因為寬度有限的關系無法顯示空郊,這時候我們可以用多個<mat-toolbar-row>來設定多行的toolbar。

    <mat-toolbar color="primary">
      <mat-toolbar-row>
        <span>第一行Toolbar</span>
        <span class="toolbar-seprator"></span>
        <mat-icon>favorite</mat-icon>
      </mat-toolbar-row>
      <mat-toolbar-row>
        第二行Toolbar
        <span class="toolbar-seprator"></span>
        <mat-icon>delete</mat-icon>
      </mat-toolbar-row>
    </mat-toolbar>

效果如下:

乍看之下跟用多個<mat-toolbar>很類似羞延,但<mat-toolbar-row>本身是沒有color可以設定的渣淳,而是跟隨著mat-toolbar走,另外在語義上也有所不同伴箩,在CSS狀況比較複雜時入愧,也可能造成畫面錯亂的問題,因此應該看情境決定使用的時機。

本日小結

今天我們學會了另一個前端上常用的元件-Toolbar棺蛛,Toolbar算是相對簡單的元件怔蚌,也因為他的簡單,給了開發(fā)人員更多的彈性空間去靈活調整旁赊,不管是在整個頁面架構上桦踊,還是系統(tǒng)內的功能畫面,都有很大的機會去使用到终畅,好好熟練Toolbar的用法對于功能畫面的開發(fā)會很有幫助喔籍胯!

明后天我們再來學習使用其他元件,來豐富這兩天學到的SideNav和Toolbar的內容吧离福!

本日的程式碼GitHub:https://github.com/wellwind/it-ironman-demo-angular-material/tree/day-06-toolbar

分支:day-06-toolbar

相關資源

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末杖狼,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子妖爷,更是在濱河造成了極大的恐慌蝶涩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件絮识,死亡現場離奇詭異绿聘,居然都是意外死亡,警方通過查閱死者的電腦和手機次舌,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門熄攘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彼念,你說我怎么就攤上這事鲜屏。” “怎么了国拇?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惯殊。 經常有香客問我酱吝,道長,這世上最難降的妖魔是什么土思? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任务热,我火速辦了婚禮,結果婚禮上己儒,老公的妹妹穿的比我還像新娘崎岂。我一直安慰自己,他們只是感情好闪湾,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布冲甘。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪江醇。 梳的紋絲不亂的頭發(fā)上濒憋,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音陶夜,去河邊找鬼凛驮。 笑死,一個胖子當著我的面吹牛条辟,可吹牛的內容都是我干的黔夭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羽嫡,長吁一口氣:“原來是場噩夢啊……” “哼本姥!你這毒婦竟也來了?” 一聲冷哼從身側響起厂僧,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扣草,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颜屠,有當地人在樹林里發(fā)現了一具尸體辰妙,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年甫窟,在試婚紗的時候發(fā)現自己被綠了密浑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡粗井,死狀恐怖尔破,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情浇衬,我是刑警寧澤懒构,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站耘擂,受9級特大地震影響胆剧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜醉冤,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一秩霍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚁阳,春花似錦铃绒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矮燎。三九已至,卻和暖如春椿疗,著一層夾襖步出監(jiān)牢的瞬間漏峰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工届榄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浅乔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓铝条,卻偏偏與公主長得像靖苇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子班缰,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355