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

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

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

(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; }']

還有一種最簡(jiǎn)單粗暴的:

<app-card>   

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

</app-card>

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

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

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

app-card {   

  display: block;   

  margin: 10px 0;   

  background: #eee;  

}

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

:host {   

  display: block;   

  margin: 10px 0;   

  background: #eee;  

}

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

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

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

:host(.active) {   

  background: red;  

}


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

:host-context(.theme-blue) {   

  color: blue;  

}

注:它會(huì)在當(dāng)前組件宿主元素的祖先節(jié)點(diǎn)中查找 CSS 類, 直到文檔的根節(jié)點(diǎn)為止。 強(qiáng)制給子組件加樣式 默認(rèn)情況下,組件樣式只會(huì)作用于組件自身的HTML上。 我們先再創(chuàng)建一個(gè)組件,名為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;  

}

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

/deep/ .card-header {   

  font-size: 25px;  

}

/deep/就是用來(lái)強(qiáng)制一個(gè)樣式對(duì)各級(jí)子組件的視圖及其內(nèi)容都生效。

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

<style>  

  div {color: #333;}  

</style>

(2) link標(biāo)簽

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

(3) import

@import 'app.css';

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



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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)