# 第一周直播課程 學習筆記
###### tags: `六角學院` `學習筆記`
## 練emmet! Why?
老師在課程說要提升切版速度,除了熟悉編輯器熱鍵、常練習切版、練英打外,另一個提升速度的方法就是練習emmet。
Emmet是一個外掛程式,讓你可以用幾個特定符號讓你不用死記HTML跟CSS的關鍵字,讓你避免在coding時打錯字。
這邊放上老師提供的Cheat Sheet
[Emmet Cheat Sheet](https://docs.emmet.io/cheat-sheet/)
還有使用教學(有圖文解釋超棒!)
[[技術分享]Emmet簡易教學-快速上手包](https://pjchender.blogspot.com/2016/07/emmet.html)
## 容器?不放書,放元素
一個網頁中,有頁首,有選單,有中間主要的文章內容。如果打開網頁的程式碼,會每個區塊都發現有一個標籤 div 包住一堆HTML標籤,這個包住一推標籤的div就是收納程式碼的容器(Container)。沒錯,跟書櫃一樣,HTML的內容也是要分門別類的拉!
除了分類外,也是為了在日後套用CSS和應用Javascript時可以順利將效果鎖定特定區塊!
[HTML "div" 區塊容器元素](https://www.fooish.com/html/div-tag.html)
## 甚麼元素?這不是化學課!
在容器的部分說到div標籤以及他要包容的程式碼。就一個網頁來說,div包含他其中的所有程式碼都是構成一個網頁的元素。
一個元素(Element)=起始標籤+內容+結束標籤
EX:
```
<p>
Hello World
</p>
```
[HTML 標籤 (Tag)](https://www.fooish.com/html/tag.html)
## 1px不差,要求零誤差
要畫面好看,大小跟距離都很重要!雖然我不懂設計,但我也知道只要大小差一點點,整個畫面都會差很多。
所以在寫程式時,要做到和設計稿1px不差,除了剛剛的容器外,了解網頁中的每個元素也很重要。
而元素依其特性又分為「區塊元素 block」和「行內元素 inline」
#### 區塊 block 特性:
自己佔據一行,而且會左右拓寬,誓死(並沒有)占滿左右兩邊,填好填滿,但是可以設置寬度width限制他的發展。
簡單來說,是一個很好操控的人!(誤)
除了寬度,也可以限制他的高度 height,行高 line-height等數據。
也可以使用margin還有padding來讓他和外面的容器或和裡面的內容之間有間距。
這麼好操控的區塊元素(誤)有這些:
div, p, h1~h6, ul, ol, li...等
#### 行內 inline 特性:
喜歡人擠人,會和其他元素待在一行裡面,直到擠不下才會依依不捨的換行。雖然喜歡人擠人,但卻是個自由靈魂(誤),無法在他身上設置寬高來限制發展。
有著自由靈魂又是群居動物(誤)的行內元素有這些:
span, br, a, img...等
[區塊元素 行內元素 空元素特點?分別有哪些?](https://medium.com/@small2883/%E5%8D%80%E5%A1%8A%E5%85%83%E7%B4%A0-%E8%A1%8C%E5%85%A7%E5%85%83%E7%B4%A0-%E7%A9%BA%E5%85%83%E7%B4%A0%E7%89%B9%E9%BB%9E%E5%88%86%E5%88%A5%E6%9C%89%E5%93%AA%E4%BA%9B-19f8c05f16f6)
補:在放置img時會發現下方有空白,也是因為inline屬性造成的。可以將img的屬性改為block,或讓他垂直置中來消除留白。
[HTML img 下方有不明空隙?!](https://tzuhui.github.io/2020/01/08/HTML/html-img-blank/)
#### 今晚,我想來點 margin/padding,留白的美靠他們
當你寫好了HTML,打開CSS為你的HTML打扮得美美的,卻發現每個區塊都像連體嬰一樣分都分不開,這時就要來點margin跟padding!
在上課之前,第一次接觸這兩個屬性時傻傻分不清楚,只覺得兩個都是拿來推擠元素,所以剛開始我都亂用(不要學我)。
後來才知道兩個是有差別的!
以border為界,margin是調整border和外面border的距離(往外延伸隱形的距離),padding則是調整border和內文之間的距離(向內默默擠壓內容)。
[border(邊框), margin(邊界), padding(邊距), ....](https://sites.google.com/site/coolteazhuanti/css/padding)
[Day11-HTML元素邊界關係!margin、padding、border](https://ithelp.ithome.com.tw/articles/10205322)
#### line-height!決定區塊高度的不是字的大小,而是行高!
老師在課程說,很多人都以為是文字在推擠區塊大小,但是你以為真的有這麼簡單嗎?
其實操控區塊大小的是line-height!只是line-height預設值為1,也就是字型大小的1倍,所以才會讓人認為是由文字推擠高度!
#### 練習題:.box的高度
在上完課程之後,老師跟助教們有出小組任務的題目(還有每日任務),其中一題就是讓大家複習元素特性跟行高的概念。
問:.box的高度?
HTML
```
<div class="box">
<h1>標題</h1>
<p>段落</p>
<p>段落</p>
<img alt="" src="logo.png" height="90" />
</div>
```
CSS
```
.box h1{
font-size: 24px;
line-height: 36px;
}
.box p{
font-size: 16px;
line-height: 1.5;
margin-bottom: 24px;
}
.box img{
display: block;
}
```
解答(小組討論答案)
>.box中包含了h1一個, p兩個, imgx一個
> 文字部分是以行高而非文字本身計算,故h1高度為36px;一個p段落為16X1.5再加上margin-bottom的高度24px,也就是一個p為48px,而.box中有兩個p,所以是96px;img在這裡則是改變為屬性block,因此預設的留白高度也不存在,所以這裡的img為html設定的90px。
> 而將三者的高度加起來就是.box的高度,故36+96+90=222px,**.box的高度為222px**。