web-3

Eating

  • 藍翊庭
  • 網頁 & Python
  • 班聯

講師

好多

  • Margin & Padding 
  • CSS 單位
  • Display 
  • Position
  • Transform
  • Flexbox
  • 反正主要是教布局
  • Can I Use

目錄

MARGIN

&

PADDING

圖片說明

元素寬度

語法說明

margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;

padding-top: 5px;
padding-right: 10px;
...

margin: 10px;                /* 四邊都 10px */
margin: 10px 20px;           /* 上下 10px,左右 20px */
margin: 10px 20px 30px 40px; /* 上右下左 順時針方向 */
/* padding也可以 */

語法說明

margin: 16px 18px;
padding: 8px 12px;
border: 4px solid black;
width: 320px; /*錯的!!*/
/* width 是包含了 content 和 border 的寬度*/

小技巧

margin: 10px auto;   

可以置中東西

(父元素寬度確定時)

CSS Units

單位 說明 適用情況
px 最常用的東東反正就是一個像素 大小不會隨著別的東西改變:邊框粗細、線條粗細…
vw /vh  相對網頁視窗口的寬/高度,100 vw 代表跟網頁視窗口寬度相同 我要讓他填滿整個螢幕?
rem 相對 html 元素中定義的字體大小,預設 1 rem =  16 px 現代網頁最常用且推薦的單位:字體大小、區塊寬度...
% 相對父元素,像是 width:50%; 代表寬度是父元素寬度的一半 排版布局的時候常用:內外邊距、區域大小

常用四單位(我覺得常用啦

範例

100px

100%

100vw

400px

據說 px 以前是真的一像素,你用 ctrl+滾輪放大網頁他也沒用(只會放大字體)。但反正現在 px 也會跟著網頁放大了所以她跟 rem 的差別沒那麼明顯?除了某些奇怪的時刻。

範例

height: 160px;

height: 10rem;

Display 

Display 決定元素「如何呈現以及「如何與其他元素排列

種類 說明
block  獨佔一行,可設定寬高、邊距,最常見? div、p、h1~h6 等等標籤預設會是這個。
none 完全消失完全不影響其他人
inline & inline-block 類似文字的排列?會與同一層的文字一起排列。span、a、img 等等標籤預設是這個。inline-block 則是在 inline 基礎上讓你可以用 Margin 這種 block 專有的屬性?
flex 好東西但有點難等下會講。

常用display(我覺得常用

範例

H1 和 p 都是 block 各占一行 / p 中的文字都是 inline 排列

全都改成 inline (所以標題的邊距失效了

範例

改成 inline-block,h1 的邊距又回來了

改成 none 就直接沒了

語法說明

display: flex;
display: none;
display: inline;
display: inline-block;
display: block;

Position

position 控制元素「如何定位」,也就是元素在頁面或父容器中的位置行為。

單位 說明
static 預設值,元素正常排列,top/right/bottom/left 無效,反正就是一個一個往下排。
relative 相對定位,可以用 top/right/bottom/left 偏移(相對自身),跟 static 類似,但若指定 left:10px; 他會往右邊移 10px 
absolute 絕對定位,相對最近的已定位父元素 ( relative、fixed ) 定位,不會影響其他元素。
fixed 相對視窗口定位。

常用position (我覺得常用

範例

    position: absolute;
    left: 40px;
    top: 40px;
    position: relative;
    left: 20px;

relative 的元素仍佔位,但 absolute 的元素會浮起來

Transform

transform 對元素進行「視覺層面的變形不改變布局不影響其他元素,效能較好用於製作動畫,其操作包含:

  • 平移(translate)
  • 縮放(scale)
  • 旋轉(rotate)
  • 傾斜(skew)

範例

transform: translate(50px, 20px) rotate(30deg) scale(0.75);

向右移動50px向下20px旋轉30deg縮放0.75倍

實作

好多

  • 打開 google 翻譯網站
  • 開始仿造他
  • 先不要管 icon
  • 記得 css 要分檔案寫
  • 盡量用 rem 但不用也沒差啦
  • 從上面那一個欄位開始
  • 不要省著不用 div
  • 然後發現做不出來

目標

範例

範例

語法說明

<div class=" nato">
	<a>
		google 翻譯
	</a>
	<div class="te"></div>
	<div>
		<button>設定</button>
		<button>帳號</button>
	</div>
</div>
<div class=" ma">
	<div class=" tp-btn">
		<button>文字</button>
		<button>圖片</button>
		<button>文件</button>
		<button>網站</button>
	</div>
	<div class=" text-are">
		<div class=" la">
			<div>
                <span>偵測語言</span>
                <span>中文</span>
                <span>英文</span>
				<span>日文</span>
			</div>
			<div>
				<span>英文</span>
				<span>中文</span>
				<span>日文</span>
			</div>
		</div>
	</div>
</div>
...

Flexbox

Flexible Box Layout 用來排列、對齊和分配容器內的元素,尤其適合一維布局。

範例

你可能發現了根本不知道要讓按鈕跑到最右邊?

因為目前讓元素水平放的方法只有 display:inline; 他就只會照順序往右邊排(ㄜ你如果直接用絕對定位那另當別論啦)

反正用 inline 的話只要網頁變小他就換行了?

而且要讓右邊的按鈕垂直置中也很麻煩,要一直調整 margin 或 padding

所以要來學新東西!

Flex 是以一個「軸向為基礎

去決定「子元素」在那個軸上面的分布

語法說明-direction

display: flex
/* 啟用 flex 布局  */
flex-direction: row | row-reverse | column | column-reverse
/* 決定軸向 +x -x +y -y */

軸向設定

F12 後有這個介面可以點(但我是沒用過啦)

範例-direction

開 f12 後有這個介面可以用(但我是沒用過啦)

row +x

row-reverse -x

column +y

column-reverse -y

語法說明-justify-content

justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly

他是針對「軸向」的分布

所以如果軸是垂直(column)

justify 就是調整垂直的分布

去按按看就好了很好理解

範例-justify-content

justify-content: space-between;

justify-content: flex-end;

語法說明-align-items

flex-wrap: nowrap ;
 /* 設定不換行 */
align-items : flex-start / flex-end / center / baseline / stretch 

搭配 flex-wrap: nowrap ; 用,要給父子元素都設個固定高度他是設定「沿著軸向的分布

center

end

start

center

end

start

範例-align-items

flex-direction: row;  align-items: flex-end;

center

end

start

語法說明-align-content

flex-wrap: wrap ;
 /* 設定換行 */
align-content : flex-start / flex-end / center / space-between / space-around / stretch

搭配 flex-wrap: wrap ; 用,wrap 就是沿著軸排過去之後超出範圍會自動換行,align-content 是設定不同行的對齊。

wrap

範例-align-content

space-around / space-between

範例

回去寫 google 翻譯

div .header

a

div

.header {
  background-color: #fefefe;
  height: 4rem;
  border-bottom: 1px solid black;
  position: fixed;
  width: 100%;

  display: flex;
  justify-content: space-between;
  align-items: center;
}

button

.header > a {
  font-size: 2rem;
  margin-left: 1rem;
}

.header > div {
  margin-right: 1rem;
}

.header > div > button {
  margin: 0px 10px;
  height: 3rem;
  padding: 0.2rem 1rem;
  font-size: 1.2rem;
}

Flexbox

Flex 的功能不只這些,他還有一個重要的性質叫做「彈性」(好我其實不知道她叫啥我隨便講的)

它可以讓子元素放大或縮小?

範例

像是下面這個例子,假設我想要讓「確認」這個按鈕寬度固定佔 5rem,旁邊的 input 則使用剩下的空間,這種需求就可以用 flex 實現

這需要用到 flex-grow 這個屬性,這是一個設定在「子元素」上的屬性,用來設定這個子元素是否要在有剩餘空間時變大填滿(同時設定要以多大的比例去放大),預設為 0

display: flex;
height: 4rem;
gap: 1rem;
flex-grow: 1;
width: 5rem;

div

input

button

範例

如果同時設定很多個子元素的 flex-grow 他們就會按照設定的比例「分配空白區域

如果分別設定:flex-grow: 1;/flex-grow: 1;/flex-grow: 2;

1000px

200px

200px

200px

400px

他們三個會依照 1:1:2 的比例分配剩餘的 400px

也就是第一個分到 400*1/4=100px

第二個一樣分到 100px

第三個分到 400*2/4=200px 最後三個就剛好填滿 1000px

300px

300px

300px

400px

總之 flex-grow 就是設定當螢幕比較大時,不同元素要分到的比例?(設成0就是不放大嘛)

另外有一個東西叫 flex-shrink 是設定當空間不夠時要按照多少的比例縮小以符合父元素空間。

flex-shrink 預設是 1 代表會縮小同等尺寸。

另外我們可以用 flex-basis 設定預設寬度,不過我個人通常是會直接設定 width 屬性,他是一樣的意思。

像是設定 flex-basis:300px 就代表預設是 300px

width:300px 可以得到一樣的效果。

下周

  • 理論上會是實作
  • 要做第一堂說的那個
  • 就是讓大家一直問問題
  • 然後會講 github page
  • 讓大家把自己的網站丟上去

沒了!

很棒

參考

來寒訓

對齁

web-3

By 翊庭jx06 T