1、class的命名

1-1class 命名禁止事項

(1) 開頭不能為數字 -> ex. 1good
(2) 不要用編號 -> ex. btn1、btn2、btn3
(3) 不要用左跟右 -> ex. btnleft、btnright
(4) 不要用奇怪符號 -> ex. $、%

1-2、class 命名風格

不管是蛇式,還是駝峰式都有機會用到,沒有特定要使用的命名方式,看不同場合有不同適合的寫法

> .news-list
> .news_list
> 
> .newsList
> .NewsList
> 
> .news_list_disable
> .news-list_disable

1-3、BEM命名方式

(1) Block -> ex. header、container、menu、checkbox、input
(2) Element -> ex. menu item、list item、header title
(3) Modifier(狀態) -> ex. disabled、checked、fixed、size big

在做class命名的時候,也有很多人會依照此順序來做命名,假設今天有一個header,裡面有title,title的狀態式disabled,就會像這樣依序的命名下去,不過這樣命名有個缺點,就是class會變得很長

2、inline vs. block

(1) inline 類型不能設定寬跟高
(2) block 類型可以設定寬跟高

inline可以把物件全部縮到同一行,但有時候縮到同一行,又因為不能控制他的寬,導致使用上常常覺得卡卡的,這時候就要用flex來搞定,後面會介紹到

3、inline vs block vs inline-block

||inline|block|inline-block| |:-:|:-:|:-:|:-:| |width|X|O|O| |height|X|O|O| |padding上下|X|O|O| |padding左右|O|O|O| |margin上下|X|O|O| |margin左右|O|O|O| |預設排列方向|橫向|直向|橫向| |vertical-align|O|X|O| |transform|X|O|O| |物件間的空白|O|X|O| |預設寬度|內容寬|父層content寬|內容寬|

Ps. 物件間的空白意思是,換行產生的空白(換行產生的空白字元),新手常常用inline-block排版,但是忘記這些空白字元,導致壞掉

3-1、修改物件間的空白

如果今天像下面這樣設定,換行的時後就會有一點點的空白字元

> ---HTML----
> 
> <div class="group">
>     <span>span</span>
>     <span>span</span>
>     <span>span</span>
>     <span>span</span>
> </div>
> 
> 
> ----css----
> 
> .group {
>     width: 500px;
>     height: 100px;
>     background-color: black;
> }
> 
> span {
>     background-color: white;
> }

3-2、空白間隔解法

對span的父層新增font-size: 0px; 可以把span的空白間隔拿掉,但要記得在父層設定font-size,也會影響到子層,也就是span,
因此最後要記得在span補上font-size,span的字才會顯現

.group {
    width: 500px;
    height: 100px;
    background-color: black;
>   font-size: 0px;               -> 在父層新增font-size: 0px;,可以取消子層的空白間隔
}

span {
    background-color: white;
>   font-size: 20px;              -> 記得補上子層的font-size,要不然會被父層的font-size影響
}

3-3、inline-block 介紹

inline block = inline + block


inline-flex => 橫向排列的flex
inline-grid => 橫向排列的gird
如果有一天發現有區塊的寬高設定不了,記得查看是不是inline物件

4、初試切版

切版注意事項:
實際佔據空間 - 寬 + padding + margin + border
可見佔據空間 - 寬 + padding + border


<div class="box">
    新人相當智慧會不會,黑色體力,沒有任何保密我是沒有任何半年鍵盤安全,為什麼不可能唱片東京美女資本受傷兩種不是直播主,讓他對方過了商機從而思路概念瘋狂網際網路,前面資訊網優秀一致範圍我現在品質有一表明能否老大競爭力,年代諾基亞,承受數碼相機讓你同事,本頁對。
</div>


* {
    margin: 0px;
    padding: 0px;
}
.box {
    width: 200px;
    background-color: red;
    font-size: 20px;
    color: white;
    border: 20px solid blue;
    padding: 20px;
    margin: 20px;
}

4-1、情境題-切版練習

> 題目: 父層 寬1000
>       子層 有四個區塊 margin: 15 padding: 10 border: 1px 

> <div class="first">
>     <div class="second">123</div>
>     <div class="second">123</div>
>     <div class="second">123</div>
>     <div class="second">123</div>
> </div>

> .first {
>     width: 1000px;
>     background-color: beige;
>     display: flex;
>     flex-wrap: wrap;
> }
> .second {
>     width: 198px;
>     border: 1px solid black;
>     padding: 10px;
>     margin: 15px;
> }

5、box-sizing 一個物件由四個盒子組成

(1) content-box -> 文字區域(寬跟高作用的地方)
(2) padding-box -> 文字區域 + padding
(3) border-box -> 文字區域 + padding + border
(4) margin-box -> 文字區域 + padding + border + margin

box-sizing -> 這個屬性是把寬高作用在另外一個上面 (預設是作用在content-box上)

> .box {
>     width: 200px;
>     padding: 20px;
>     border: 1px solid red;
>     box-sizing: border-box        -> 寬高設定作用在border-box上
>                                      *整個顯示就是 width + padding + border = 200
> }

6、flex 介紹

6-1、flex的特性 - 子物件可以設定寬度

(1) 當把一個父層設定成flex,會對子層產生作用(只有第一層),簡單說,對一個父層設定flex,他的子層會有block特性,並且會縮到同一行
(2) 父層自己設定為flex,自己也可以設定寬跟高

下面的是flex對子物件的影響

> <div class="flex">
>     <div class="item">1</div>
>     <div class="item">2</div>
>     <div class="item">3</div>
> </div>
.flex {
    display: flex;
    width: 500px;
    height: 300px;
    background-color: red;
}

.item {
    width: 50px;
    height: 50px;
    margin: 2px;
    background-color: grey;
}

6-2、子層不設定高度的情況下,會跟父層等高

> <div class="flex">
>     <div class="item">1 教學對付選項認定世紀刺激影視意見</div>
>     <div class="item">2</div>
>     <div class="item">3</div>
> </div>

> <style>
>     .flex {
>         width: 600px;
>         height: 600px;
>         background-color: grey;
>         display: flex;
>     }
> 
>     .item {
>         width: 120px;
>         background-color: red;
>         margin: 2px;
>     }
> </style>

6-3、加上flex-wrap: wrap; -> 如果沒有算好寬度,會折行

> <div class="flex">
>     <div class="item">1 教學對付選項認定世紀刺激影視意見</div>
>     <div class="item">2</div>
>     <div class="item">3</div>
> </div>

<style>
    .flex {
        width: 600px;
        height: 600px;
        background-color: grey;
        display: flex;
>       flex-wrap: wrap;           -> 如果設定,寬度沒算好會折行
    }

    .item {
        width: 200px;
        background-color: red;
        margin: 2px;
    }
</style>

6-4、flex的軸向

flex的軸向 - 調整flex前都要先看軸向,再調整

    | 
----|-----> 主軸 (main axis)
    |
    V
  交叉軸 (cross axis)

6-5、justify-content

控制子物件中在主軸上的對齊

6-6、align-items

控制子物件中在交叉軸上的對齊

6-7、flex-direction - 可以改變item排列方向

在使用 flex-direction: row 的時候,不一定是由右至左,如果今天改變了書寫方向
ex. direction or writing-mode,都會改變row的方向(要看當下row的定義是什麼)

> flex-direction: row (此為預設值)
> flex-direction: column
> flex-direction: row-reverse
> flex-direction: column-reverse

6-8、flex-wrap

當你不希望 flex items 溢出 container 時,你可以使用 flex-wrap 來「包裝」內容,也就是讓他們遇到邊界就「自動換行」
這在設計 RWD 時會非常地有用

> flex-wrap: nowrap (此為預設值)
> flex-wrap: wrap
> flex-wrap: wrap-reverse -> 非常少用到


wrap其實是在控制交叉軸的方向
要特別注意的是,如果 flex items 設定了 min-width,items 不會縮小反而會溢出 flex container –

6-9、flex-flow

flex-direction 和 flex-wrap 這兩個屬性可以合併成 flex-flow 屬性。flex-flow 接受兩個值,第一個是給 flex-direction 第二個是給 flex-wrap

.flex-box {
    flex-flow: row wrap;
}

6-10、對齊flex內容物

由於 flex 是單一維度的,你可以用 flex-direction 來切換主軸 (main axis)與交叉軸 (cross axis),然後再用以下兩個屬性控制對齊

> justify-content - 用於 main axis
> align-items - 用於 cross axis

6-11、justify-content 可接受6個值

> justify-content: flex-start (default)  
> justify-content: flex-end  
> justify-content: center  
> justify-content: space-between; -> 左右貼齊外框線,中間空格平均  
> justify-content: space-around;  -> 最旁邊兩個物件的空格寬,是中間所有空格的一半  
> justify-content: space-evenly;  -> 所有物件左右平均  

7、實戰練習 - 用flex來做nav選單

<div class="nav-bar">
    <div class="logo">logo</div>
    <div class="ul-list">
        <ul>
            <li><a href="">首頁</a></li>
            <li><a href="">關於我們</a></li>
            <li>聯絡我們</li>
            <li>首頁</li>
            <li>關於我們</li>
            
        </ul>
    </div>
</div>
* {
    margin: 0px;
    padding: 0px;
}

.nav-bar{
    width: 1000px;
    background-color: beige;
    display: flex;
    flex-direction: row;
    justify-content: space-between;
    height: 200px;
    align-items: center;           -> 在選單父層設定,交叉軸置中
}

.logo {
    width: 200px;
    background-color: aqua;
    /* vertical-align: top; */     -> 讓圖片對齊TOP線,可以解決圖片下面會留一點小空間
    display: block;                -> 或者直接把圖片改成不是inline屬性
}

.ul-list {
    width: 600px;
    background-color: brown;

}


.ul-list ul {                      -> 在 ul 設定flex 可以把li變橫排
    display: flex;
    flex-direction: row;
    justify-content: space-evenly; -> 平分 li 空間 
}
.ul-list li {
    list-style: none;              -> 把 li 的點點刪掉
}

.ul-list a {
    padding: 20px;                 -> 把 超連結 的寬度撐開,更容易點擊
    display: block;                -> 記得要把此區塊設定成 block ,才可以設定padding
}

7-1、注意事項

7-1-1、圖片本身是inline物件

.logo {
    vertical-align: top;        -> 讓圖片對齊TOP線
    display: block;             -> 或者直接把圖片改成不是inline屬性
}

7-1-2、如果今天要讓選單的li撐開高度,可以用padding

.ul-list li {
    list-style: none;
    padding: 20px;

}

7-1-2、不過如果今天有超連結,想要讓超連結連動寬度的話,padding就要設定在 a 上面

.ul-list a {
    padding: 20px;
    display: block;      -> 記得要讓 a 變block,超連結才能更動寬高,要不然因為前面設定flex
                            他還是inline狀態
}

8、製作五倍官網的前往課程區塊

<section>
    <div class="container">
        <div class="img">img</div>
        <div class="text">
            <h1>線上課程</h1>
            <p>你的不在數碼,盯着推進重視,氣氛神經無比需求接口你沒有允許印刷傳說,並且上一頁黑暗減肥都在美麗水晶</p>
            <a href="">前往課程</a>
        </div>
    </div>

    <div class="container">
        <div class="img">img</div>
        <div class="text">
            <h1>線上課程</h1>
            <p>你的不在數碼,盯着推進重視,氣氛神經無比需求接口你沒有允許印刷傳說,並且上一頁黑暗減肥都在美麗水晶</p>
            <a href="">前往課程</a>
        </div>
    </div>

</section>
<style>
    section {
        width: 960px;
        background-color: azure;
        display: flex;
        flex-direction: row;
        justify-content: space-around;

    }

    .img {
        width: 450px;
        height: 200px;
        background-color: grey;
    }

    .container {
        width: 450px;
        background-color: bisque;
        padding-bottom: 10px;
    }        

    h1, p {
        padding: 10px;
    }

    a {
        padding: 10px;
        display: inline-block;
    }

</style>

9、block區塊置中 - margin: auto

(1) margin: auto - 只適用block物件
(2) 如果使用auto,左 or 右可以 取得剩餘空間 (剩餘空間分配)

.div {
    margin: 0px auto;       -> 左右都取剩餘空間,區塊會置中 (常見div置中用法)
}