CSS float浮動、inline&block、box-sizing
介紹Float、inline&block、box-sizing
Float
CSS float 用來定義區塊的浮動,可以設定為靠左浮動或靠右浮動,常見用法像是文字繞圖片的特效或是 DIV 區塊排版上使用。
參考自:CSS float 浮動元素
設定文繞圖
設定float,前後畫面示範如下:
設定前:
設定後:
原因在於,以文字來說明我們可理解為3D視角上下層-下層A層、上層B層的概念,而此時區塊(可為div、p 等等)為下層A層,包裹的假文內容為上層B層,而另外設定的圖片(不受區塊包裹)為下層A層,再設定圖片float後,圖片相當於浮起來一層(概念像是由下層A層上浮至上層B層),因此與同在B層的假文文字同層,所以畫面顯現如上文字在圖片旁邊。
設定圖片橫排
原始碼如下:
1 | <body> |
設定float:left
前:
設定後:
快速理解法:float浮動,原css排版是依照布局流(Normal flow)排列,像向下的水流一般,而設定flaot,就像在水裡浮了起來,所以以排頭(圖中的A cloumn)為首依序浮起。
參考資料:Normal flow、float、定位(Position)、z-index
float浮動產生的影響
原始碼如下:
1 | <style> |
設定float前:
設定float後:
原包裹圖層或文字的div(所稱父層,圖中鵝黃色的部分),在圖層或文字div(子層)設定float之後,因父層原本是受子層內容而撐開,但因設定float浮動起來之後,父層感應不到子層,因此會縮為0(即畫面上看不見)
clear的效果
clear為散開浮動物件的意思,我們會在float圖層或文字後在設定一個div,通常取名clearfix或其他名字皆可,因此設定clear後,clearfix這個div即散開到float圖層或文字之下,而剛剛感應不到的背景父層div感應到此子層散開後,會隨之拉開,畫面上極似被float子層撐開(實則不是,是因clearfix這個子層),如以下列範例圖為例,clearfix此div若有height,就類似下圖中的螢光黃色塊,clearfix的div受clear散開float,而父層受散開後的clearfix的子div而跟著散開(父層依然包裹著clearfix子層)
範例圖:
clear用法:
參考自:CSS clear 属性
欸!不要這麼浮動好不好
block & inline & inline-block
每一個html標籤元素都會有一個預設的display屬性,標籤基本上大部分可分為兩種顯示模式,**一種是行內元素(inline),另一種為區塊元素(block)**,我們可以在CSS內加入display來賦予新的屬性,以改變其原本特性,利用它來呈現我們想要的排版。(引用自:CSS教學-關於display:inline、block、inline-block的差別 )
基礎語法:
1 | display: block; |
什麼是block
block為區塊元素,常見的區塊元素標籤為:
div、ul li、p、h1
block理解為面積,可以設定寬與高,會占滿一整行
什麼是inline
inline為行內元素,常見的行內元素標籤為:
span、a、imput、img
inline可以理解為線,無法設定寬與高,內容的寬高尤其內容撐開,元素在同一行內呈現。
block&inline示意圖
1 | <body> |
呈現如下:
可以看出設定div的三個內文abc,直接占滿一行,而span標籤的兩個假文(以不同顏色區分),可以看出是接續,在同一行呈現。
inline-block行內區塊
- inline的方式呈現,但同時擁有block的屬性
- 可設定元素的寬高/margin/padding
- 可水平與其他元素排列
- 經常用於導覽列
好用的盒模型:box-sizing
box-sizing: content-box
內容物文字的長度符合寬度值。
假設設定300px:
box-sizing: border-box
方塊長度符合寬度值,此設定為讓畫面長度符合width設定之長,不必再因margin、padding而去扣除原始width長度。
假設width=300px,設定box-sizing:border-box
之後,即顯示寬度300。
- 說明範例成品:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.wrap{
width: 960px;
/*只有左右有作用,
* 設定auto表示讓此區塊置中,左右都auto的意思*/
margin: auto;
background-color: #ffa;
}
/*3.設定clear: both,可參考上方clear設定*/
.clearfix{
width: 100%;
clear: both;
}
.item{
width: 300px;
margin: 10px;
padding: 10px;
/*此次要點*/
/* 4.設定box-sizing自動調節寬度,
* 讓padding&margin不會讓畫面爆掉超過300, */
box-sizing: border-box;
border: 3px double #aaa;
background-color: #fff;
/*此次第二要點*/
/*1.先設定float*/
float: left;
}
</style>
</head>
<body>
<div class="wrap">
<div class="item">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minus ullam alias numquam facilis provident consequatur dolores cumque voluptatem. Aspernatur, fugiat error. Minima nulla dolore autem, nostrum corporis voluptatum praesentium ex.</div>
<div class="item">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minus ullam alias numquam facilis provident consequatur dolores cumque voluptatem. Aspernatur, fugiat error. Minima nulla dolore autem, nostrum corporis voluptatum praesentium ex.</div>
<div class="item">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minus ullam alias numquam facilis provident consequatur dolores cumque voluptatem. Aspernatur, fugiat error. Minima nulla dolore autem, nostrum corporis voluptatum praesentium ex.</div>
<!-- 2.ㄧ般來說先設定clearfix(或任何名稱的div) -->
<div class="clearfix"></div>
</div>
</body>
</html>
實戰應用
經過上方box-sizing介紹,我們可以將其應用在實際開發上,那撰寫程式的方式就可以是我們在開頭先下:
1 | *, *:after, *:before { |
意思為,該頁下所有元素皆採用 box-sizing: border-box;
,如此後面在切版就不必擔心x軸爆掉或者其他問題了。
參考自:
金魚都能懂網頁設計入門 : 換個新盒子 - 鐵人賽第十一天 | 網頁教學 | CSS教學