Angular4 開發(fā)實戰(zhàn):(3) 使用CSS美化組件

2018-06-19 11:25 更新
這章來介紹如何使用CSS美化組件。

基于組件,有兩種方式來添加樣式:
  • 使用樣式模板
  • 使用樣式字符串

(1) 使用樣式模板

// card.component.ts   

styleUrls: ['./card.component.scss']   


// card.component.scss   

.card {   

  padding: 10px;   

  box-shadow: 0 0 3px rgba(0,0,0,.2);   

  margin: 10px 0;  

}

(2) 使用樣式字符串

styles: ['h5 { font-weight: normal; }']

還有一種最簡單粗暴的:

<app-card>   

  <h5 style="font-weight: normal">卡頭</h5>  

</app-card>

注:雖然可以,但不推薦。

給宿主元素添加樣式
先來解釋一下何為宿主元素,比如上面我們的自定義組件app-card,這就是宿主元素

如果我們要給組件模板內(nèi)部樣式中為其添加樣式,一般我們想到的是這樣:

app-card {   

  display: block;   

  margin: 10px 0;   

  background: #eee;  

}

你會很郁悶的發(fā)現(xiàn)無效,咋辦呢?Angular還是很友好的,我們可以這樣:

:host {   

  display: block;   

  margin: 10px 0;   

  background: #eee;  

}

這樣你會發(fā)現(xiàn)app-card有背景色啦。

:host就表示當前樣式模板的宿主元素。 注意:默認情況下,自定義組件的display屬性是空字符串的,也就是不占據(jù)空間。

如果只要當其有一定條件的時候才顯示某個樣式,比如只要當宿主元素具有active類時,才出現(xiàn)灰色背景,可以這樣:

:host(.active) {   

  background: red;  

}


外部條件
當組件外部有一些條件時,組件內(nèi)容的樣式才變化。最明顯的就是主題,比如當某個祖先元素具有CSS類`.theme-blue`時,字體才變?yōu)樗{色:

:host-context(.theme-blue) {   

  color: blue;  

}

注:它會在當前組件宿主元素的祖先節(jié)點中查找 CSS 類, 直到文檔的根節(jié)點為止。 強制給子組件加樣式 默認情況下,組件樣式只會作用于組件自身的HTML上。 我們先再創(chuàng)建一個組件,名為card-header

// card-header.component.html   


<div class="card-header">   

  卡頭  

</div>

然后在app.component.ts中添加:

<app-card>   

  <app-card-header></app-card-header>   

</app-card>


比如你在app/components/card/card.component.scss中添加:

.card-header {   

  font-size: 25px;  

}

上面的代碼對子組件card-header里的內(nèi)容是不起作用的,只有這樣:

/deep/ .card-header {   

  font-size: 25px;  

}

/deep/就是用來強制一個樣式對各級子組件的視圖及其內(nèi)容都生效。

這里我使用Sass預(yù)編譯器,更多詳情:Sass快速入門 下面還有三種內(nèi)聯(lián)方式,不過不建議多用:
(1) style標簽

<style>  

  div {color: #333;}  

</style>

(2) link標簽

<link rel="stylesheet" href="app.css">

(3) import

@import 'app.css';

如發(fā)現(xiàn)任何問題或有好的建議,歡迎在下方評論留言。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號