# Bootstrap 4 - 元件筆記
###### tags: `FrameWork-bootstrap4`
## 一 . Card
### (一) . 基礎
```htmlmixed=
<div class="card">
<div class="card-body">
<h4 class="card-title">Card title</h4>
<p class="card-text">Some example text.
Some example text.</p>
</div>
</div>
```
1. ```card``` class:給出整個卡片的外框,border為1px。
- 高 : 依內容變動。
- **寬 : 父容器的100%**。
3. ```card-body``` class: 加入padding,使內文看起來有排版。
4. ```card-title``` class: 加一點margin-bottom而已,可以直接用```<h>```取代。
5. ```card-text``` class : 加一點margin-bottom而已,可以直接用```<p>```取代。
### (二) . headr 、footer
```htmlmixed=
<div class="container">
<div class="card">
<div class="card-header">
<div class="card-title"> header-title</div>
<div class="card-text"> header-text</div>
</div>
<div class="card-body">
<div class="card-title"> body-title</div>
<div class="card-text"> body-text</div>
</div>
<div class="card-footer">
<div class="card-title"> footer-title</div>
<div class="card-text"> footer-text</div>
</div>
</div>
</div>
```
1. ```card-headr``` class : 跟card-body幾乎一樣,padding數據不一樣,加上在**底下**會加入一個底線。
2. ```card-footer``` class : 跟card-body幾乎一樣,padding數據不一樣,加上在**上方**會加入一個底線。
3. 可以在footer和headr加入card-title和card-text : 效果跟在card-body加入完全一樣。
### (三) . 加入影像 :
```htmlmixed=
<div class="card" style="width:400px">
<div class="card-body">
<h4 class="card-title">John Doe</h4>
<p class="card-text">Some example text
some example text.John Doe is an architect and
engineer</p>
<a href="#" class="btn btn-primary">See
Profile</a>
</div>
<img class="card-img-top" src="http://fakeimg.pl/300x300" alt="Card image" style="width:100%">
</div>
```
1. ```img-top``` class : 將影像加入card-body前面時。
2. ```img-bottom``` class : 將影像加入card-body後面時。
3. 基本上兩個沒甚麼差,css properity一樣,數據不一樣而已。
4. 把img加入 card-body或card-headr或card-footer : 使影像佔不到整個card的畫面,因為有padding。
## 二 . Alert
### (一) . 基本
#### 第一點 : **基本class** :
1. ```class="alert" ``` : alert最外層的wraper。
- 通常用```<div>```。
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 有padding,1px的border,有margin-butomm。
2. ```class="alert-info" ``` : 改變alert的背景,字體顏色。
- 改變color、background-color、border-color的屬性。
3. ```class="alert-link" ``` : 使```<a>```的文字可以對應```class="alert-info" ```改變顏色。
- 通常用```<a>```。
- 沒有任何長寬、padding、margin、order屬性。
- 僅改變文字顏色,字體大小。
4. ```class="alert-heading" ``` : 使heading的文字顏色跟隨```class="alert-info" ```改變顏色。
- 通常用```<h>```類。
- 沒有任何長寬、padding、margin、order屬性。
- 僅改變顏色。
5. alert的內文直接用```<p>```即可,也可以不要用。
#### 第二點 : **基本佈局** :
```htmlmixed=
<div class="alert alert-info">
<h5 class="alert-heading"> heading </h5>
<p>
context
<a class="alert-link" href="#">Link</a>
</p>
</div>
```
1. 佈局模型 :
- ```alert```和``` alert-info``` : 為底,最基本外層。
- ```alert-heading```包住```<h>```tag,改變顏色。
- ```alert-link``` :包住```<a>```tag, 改變顏色。
2. 顏色 :
- ```alert-info```為主要的決定。
- ```alert-heading``` 和```alert-link```會依照外層的```alert-info```改變顏色。
- 內文可以用```<p>```包住,沒有class可以加,顏色在```alert-info```已經設定好。
### (二) . 標準動態佈局
#### 第一種變化 : 關閉alert
1. ```data-dismiss="alert"``` : 加在alert內部的tag中,當此tag被點擊時,關閉外層```alert```。
- 只要有這個屬性,基本上就可以關閉alert了。
- 每個alert都要有一個這個,不再任一個alert的```data-dismiss="alert"``` 被點擊時不有作用。
2. ```class="close" ``` : 可以使關閉button的外型好看點。
3. ```class="fade"``` : 有此設定下的tag會在關閉的時候會有淡去的動畫。
- 如果直接加上此class的話,tag會在初次渲染的時候就觸發消失。
- 所以要加上下一個提及的class。
5. ```class="show"``` : 通常加在一個有關閉和開啟動作的tag,可以使初次渲染的時候,此tag不被消失。
```htmlmixed=
<div class="alert alert-info fade show">
<h1 class="alert-heading"> heading </h1>
<button type="button" class="close" data-dismiss="alert" >close</button>
<p>
context
<a class="alert-link" href="#">Link</a>
</p>
</div>
```
#### 第二種變化 : 加上```<hr>```
- 因為```alert```的設計本身沒有向```card```元素有```header```跟```footer```。
1. 可以```<hr>```加上分別出來上面跟下面。
2. ```<hr>``` : 一條線加上```margin-top```,```margin-bottom```。
3. 一般用一個```<hr>```就好,不要用兩個,比例看起來怪怪的。
4. 再加上```<br>```在```<button>```的尾端。
- 因為```<button>```是一個inline tag,後面直接接上一個```<hr>```會有重複的問題。
- 加上```<br>```可以使button結束就換行,不會跟```<hr>```搶位子。
```htmlmixed=
<div class="alert alert-info fade show">
<h3 class="alert-heading"> heading </h3>
<button type="button" class="close" data-dismiss="alert">close</button><br>
<hr>
<p>
context
<a class="alert-link" href="#">Link</a>
</p>
</div>
```
## 三 . Model
### (一) . 基本
#### 第一點 : 基本class :
1. ```class="modal"``` : 最外層的wrap,在modal被呼叫後佔滿整個視窗。
2. ```class="modal-dialog"``` : 第二層的wrap,有margin,讓視覺上modal的內容跟整個視窗分離。
4. ```class="modal-content"``` : 第三層wrap,包住內容的。
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 沒有padding,margin,有1px的border。
6. ```class="modal-body"``` : 主要包住內文的,若要使用row-col的話,必須加在這裡。
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 有```padding```, 沒有```margin```或```border```。
5. ```data-target="#id_for_modal" ```和```data-toggle="modal"``` : 加在modal外。
- 由外層開啟modal的基本方法。
- 外部tag : 加入```data-target="#id_for_modal" ```和```data-toggle="modal"``` 。
- 內部tag : 在```class="modal"```中加入```id="id_for_modal"```,記住,內部tag的id必須跟外部```data-target="" ```的一樣。
#### 第二點 : 基本佈局 :
```htmlmixed=
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#tar">
Launch static backdrop modal
</button>
<div class="modal" id="tar">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
test
</div>
</div>
</div>
</div>
```
1. 佈局模型 :
- 第一層wrap為```class="modal"```。
- 第二層wrap為```class="modal-dialog"```。
- 第三層wrap為```class="modal-content"```。
- ```class="modal-content"```內開始加入真正的內容。
- ```class="modal-content"```可以視為card元件中的```class="card"```內部加入```body header footer```
2. 顏色 : 基本上可以自己加入,沒有boostrap4已經做好的。
### (二) . 標準動態佈局
#### 第一種變化 : 加入header、footer和關閉按鈕
1. ```class="modal-header"``` : 在下方加入一條線的區域。
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 有padding,沒有margin和border。
2. ```class="modal-footer"``` : 在上方加入一條線的區域。
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 有padding,但比```class="modal-header"```小,沒有margin,有1px的border。
3. ```class="modal-title"``` : 多用於```class="modal-header"```內顯示modal的標題。
- 只有增加行寬的功能,所有仍要搭配```<h>```類的tag。
4. ```data-dismiss="modal"``` : 加在```class="modal"``` 內部的元素的屬性,可以關閉所包覆的modal(同於上面alert的關閉。)。
- 只要有這個屬性,基本上就可以關閉modal了。
- 每個modal都要有一個這個,不再任一個modal的```data-dismiss="alert"``` 被點擊時不有作用。
- 可以加入close或btn等等的class使按鈕外觀好看一點。
```htmlmixed=
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#tar">
Launch static backdrop modal
</button>
<div class="modal" id="tar">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h2 class="modal-title">heading </h2>
</div>
<div class="modal-body">
test
</div>
<div class="modal-footer">
<button type="button" class="close" data-dismiss="modal">Close </button>
</div>
</div>
</div>
</div>
```
## 四 . Collapse
## 五 . Navbar
### (ㄧ) . 基本
#### 第一點 : **基本class** :
1. ```class="navbar"``` : 整個navbar的base。
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 有padding,沒有margin。
- display : 是flex,內容為justify-content-between。
2. ```class="navbar-brand"``` : navbar的brand,使之特別明顯。
- 長寬 : ```heigth```填滿父元素,```width```依內容。
- 邊界 : 有margin-right,有上下padding。
3. ```class="navbar-nav"```:
- 長寬 : ```heigth```填滿父元素,```width```依內容。
- 邊界 :沒有margin或padding。
- display : 是flex,內容為colume。
4. ```class="navbar-item"``` :
- 長寬 : ```width```填滿父元素,```heigth```依內容。
- 邊界 : 有padding,沒有margin。
#### 第二點 : **基本佈局** :
```htmlmixed=
<nav class="navbar navbar-dark bg-dark">
<a href="#" class="navbar-brand"> Brand </a>
<ul class="navbar-nav">
<li class="nav-item"><a href="#" class="nav-link">Main</a></li>
<li class="nav-item"><a href="#" class="nav-link">Others</a></li>
</ul>
</nav>
```
1. 佈局模型 :
- navbar為底,最基本的外層。
- navbar-brand和navbar-nav為兩個主要子元素。
- navbar-brand放logo。
- navbar-nav包住其他的選單功能。
- navbar-item為每一個選單的選項。
2. 顏色 :
- navbar-dark : 可以使得此navbar裡面所有的元素的字體顏色變換。
- bg-dark : 可以使得此navbar的背景變成黑色。
3. 問題 :
- navbar是justify-content-between的預設 : 在navbar-nav中加入mr-auto,使navbar-nav在navbar-brand後。
- navbar-nav的內容安排是colume的,因為boostarp4原本是因應手機而設計的,改方法下面會提及。
### (二) . 標準動態佈局
1. 解決navbar-nav的內容安排是colume的問題 :
- 用```class="collapse navbar-collapse"```包住整個```navbar-nav```。
- 再在```class="navbar"```中加入```class="navbar-expand-sm"```
2. 原理 : 把整個navbar-nav變成一個可拉的清單,而控制的標準就是navbar-expand-sm。
- navbar-expand-sm : 在sm大小以上的螢幕,會navbar-collapse內容。
- navbar-collapse : 對應同一個navbar中的navbar-expand。
```htmlmixed=
<nav class="navbar navbar-expand-sm navbar-dark bg-dark">
<a href="#" class="navbar-brand"> Brand </a>
<div class="collapse navbar-collapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item"><a href="#" class="nav-link">Main</a></li>
<li class="nav-item"><a href="#" class="nav-link">Others</a></li>
</ul>
</div>
</nav>
```
3. 補強 : 在限制之外顯示navbar-nav。
- 若設定 : navbar-expand-sm,在sm的螢幕上,navbar-nav會完全消失不見。
- 方法 : 設定一個```navbar-toggler```,在限制發生時,開啟```navbar-nav```
```htmlmixed=
<nav class="navbar navbar-expand-sm mynavbar navbar-dark">
<a href="#" class="navbar-brand"> Brand </a>
<button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#navbarlist">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarlist">
<ul class="navbar-nav mr-auto">
<li class="nav-item"><a href="#" class="nav-link">Main</a></li>
<li class="nav-item"><a href="#" class="nav-link">Others</a></li>
</ul>
</div>
</nav>
```
4. 替換```<a>```為```<span>``` :
- ```<a> ```的缺點 : 他一定需要一個```href```的屬性,會造成,他必須有一個連接。
- 用```<span>```替換 : 除了```href```的屬性都保留,再加上```type="button"```,可以讓游標移動時有點擊的效果。