1. 程式人生 > >關於伸縮盒模型 Flexible Box 的佈局

關於伸縮盒模型 Flexible Box 的佈局

這就是傳說中的伸縮盒模型:Flexible Box:display:flex或者display:inline-flex,對於相容IE:加-ms-字首,對於相容Safari:加-webkit-字首。

等下要演示的相關屬性有:flex,flex-basis,flex-direction,flex-wrap,flex-grow,flex-shrink,flex-flow,order,align-items,align-self,justify-content,好了,下面就是見證奇蹟的時刻!

網上找來的瀏覽器對於伸縮盒模型的相容圖:


看上去相容性好像很不錯的樣子是不是?^_^

下面是各種demo的展示環節:

1.flex屬性,其值一般設為數字。

下面是一個demo1:

<!doctype html>
<html>
<head>
<style type="text/css">
*{margin: 0;padding: 0;}
.container{
	display: flex;
	width: 1000px;
	height: 500px;
	background-color: #9fc2e9;
	margin:0 auto;
}
.item1{
	flex:1;
	background-color: #678cf4;
}
.item2{
	flex:1;
	background-color: #3969f3;
}
.item3{
	flex:1;
	background-color: #1145d9;
}
.item4{
	flex:1;
	background-color: #265af0;
}
.item5{
	flex:1;
	background-color: #0a3ac5;
}
.item6{
	flex:1;
	background-color: #0531ac;
}
</style>
</head>
<body>
<div class="container">
	<div class="item item1"></div>
	<div class="item item2"></div>
	<div class="item item3"></div>
	<div class="item item4"></div>
	<div class="item item5"></div>
	<div class="item item6"></div>
</div>
</body>
</html>
效果:



當然,大多時候我們不一定會希望它們均勻地分佈,那麼怎麼將它們的各自所佔有的空間自定義呢?這就是flex的一大好處:我們直接在數字上修改就好了:

我們將demo1中的.item1和.item2樣式改為:

.item1{
	flex:3;
	background-color: #678cf4;
}
.item2{
	flex:2;
	background-color: #3969f3;
}
其他item的flex仍為1:然後下面是演示的效果:


有時候我們需要整個container充滿螢幕,那麼只要把.container的樣式改為:

.container{
	display: flex;
	width: 100%;
	height: 500px;
	background-color: #9fc2e9;
	margin:0 auto;
}
下面是演示的效果:


2.flex-basis屬性,其值一般為一個長度單位或者一個百分比,規定靈活專案的初始長度

我們將demo1中的.item1的樣式改為:

.item1{
	flex-basis:100px;
	background-color: #678cf4;
}
其他部分的樣式不變,這樣我們得到的效果就是item1的寬度不是和其他item一樣按比例分配的,而是按照flex-basis規定的給它100px,任憑瀏覽器的解析度如何變化,任憑.container的固定寬度的1000px還是按百分比的100%,.item1一直忠誠地保持著100px的寬度直到海枯石爛。(PS:因為效果圖看不出什麼所以我就不放了^_^)

3.flex-direction屬性,其值為row(預設值。靈活的專案將水平顯示)|row-reverse(與 row 相同水平顯示,但是以相反的順序)|column(靈活的專案將垂直顯示)|column-reverse(與 column 相同垂直顯示,但是以相反的順序)

3.1. flex-direction:row效果與demo1相同,這裡就不累述了。

3.2. flex-direction:row-reverse(我們把這個叫做demo2好了,以區分上面的demo1程式碼段):

<!doctype html>
<html>
<head>
<style type="text/css">
*{margin: 0;padding: 0;}
.container{
	display: flex;
	flex-direction: row-reverse;
	width: 1000px;
	height: 500px;
	background-color: #9fc2e9;
	margin:0 auto;
}
.item1{
	flex:1;
	background-color: #678cf4;
}
.item2{
	flex:1;
	background-color: #3969f3;
}
.item3{
	flex:1;
	background-color: #1145d9;
}
.item4{
	flex:1;
	background-color: #265af0;
}
.item5{
	flex:1;
	background-color: #0a3ac5;
}
.item6{
	flex:1;
	background-color: #0531ac;
}
</style>
</head>
<body>
<div class="container">
	<div class="item item1">1</div>
	<div class="item item2">2</div>
	<div class="item item3">3</div>
	<div class="item item4">4</div>
	<div class="item item5">5</div>
	<div class="item item6">6</div>
</div>
</body>
</html>
注意我們是把flex-direction屬性加在.container裡面,不是加在.item裡面

下面是演示的效果(注意數字是6,5,4,3,2,1):


3.3. flex-direction:column

下面是演示的效果(注意數字):


3.4. flex-direction:column-reverse

下面是演示的效果(注意數字6,5,4,3,2,1):


4.flex-wrap屬性,其值為nowrap預設值。規定靈活的專案不拆行或不拆列)|wrap(規定靈活的專案在必要的時候拆行或拆列)|wrap-reverse(靈規定靈活的專案在必要的時候拆行或拆列,但是以相反的順序)

4.1. flex-wrap:nowrap(這裡我們新建一個demo3,width設為400px,height設為200px,每個item設為100px):

<!doctype html>
<html>
<head>
<style type="text/css">
*{margin: 0;padding: 0;}
.container{
	display: flex;
	width: 400px;
	height: 200px;
	background-color: #9fc2e9;
	margin:0 auto;
}
.item1{
	width:100px;
	background-color: #678cf4;
}
.item2{
	width:100px;
	background-color: #3969f3;
}
.item3{
	width:100px;
	background-color: #1145d9;
}
.item4{
	width:100px;
	background-color: #265af0;
}
.item5{
	width:100px;
	background-color: #0a3ac5;
}
.item6{
	width:100px;
	background-color: #0531ac;
}
</style>
</head>
<body>
<div class="container">
	<div class="item item1">1</div>
	<div class="item item2">2</div>
	<div class="item item3">3</div>
	<div class="item item4">4</div>
	<div class="item item5">5</div>
	<div class="item item6">6</div>
</div>
</body>
</html>

下面是演示的效果:


Oh,my LadyGaga!我們發現雖然每個item是100px,但是在 flex-wrap:nowrap屬性強大的作用下,item的大小自適應了

4.2. flex-wrap:wrap:我們只需要給dmeo3的.container加上flex-wrap:wrap屬性即可

下面是顯示的效果:


4.3. flex-wrap:wrap-reverse就是排序相反,這裡不累述了。

5.flex-grow屬性:規定專案將相對於其他靈活的專案進行擴充套件的量。如其他item的flex:1除了.item2的flex-grow:3,則.item2是其他的item的3倍大。

6.flex-shrink屬性:規定專案將相對於其他靈活的專案進行收縮的量。如其他item的flex:1除了.item2的flex-shrink:3,則.item2是其他的item的1/3倍大。

7.flex-flow屬性:是 flex-direction 和 flex-wrap 屬性的速記屬性。如:flex-flow:row-reserve wrap的效果與flex-direction:row-reserve;flex-wrap:wrap的效果相同。

8.order屬性:規定一個靈活的專案相對於同一容器內其他靈活專案的順序,其值一般為數字

這是一個demo4,注意裡面的每個item都規定了自己的排列順序:

<!doctype html>
<html>
<head>
<style type="text/css">
*{margin: 0;padding: 0;}
.container{
	display: flex;
	width: 1000px;
	height: 500px;
	background-color: #9fc2e9;
	margin:0 auto;
}
.item1{
	flex:1;
	order: 3;
	background-color: #678cf4;
}
.item2{
	flex:1;
	order: 2;
	background-color: #3969f3;
}
.item3{
	flex:1;
	order: 6;
	background-color: #1145d9;
}
.item4{
	flex:1;
	order: 1;
	background-color: #265af0;
}
.item5{
	flex:1;
	order: 5;
	background-color: #0a3ac5;
}
.item6{
	flex:1;
	order: 4;
	background-color: #0531ac;
}
</style>
</head>
<body>
<div class="container">
	<div class="item item1">1</div>
	<div class="item item2">2</div>
	<div class="item item3">3</div>
	<div class="item item4">4</div>
	<div class="item item5">5</div>
	<div class="item item6">6</div>
</div>
</body>
</html>
下面是演示的效果(注意圖中的每個item的排練順序):


9.aligin-items屬性:規定靈活容器內的各項的預設對齊方式,其值可以為:stretch(預設值。專案被拉伸以適應容器)|center(專案位於容器的中心)|flex-start(專案位於容器的開頭)|flex-end(專案位於容器的結尾)|baseline(專案位於容器的基線上

我們在demo4的基礎上給.container加上屬性:align-items:center;那麼效果會怎麼樣呢?

下面是演示的效果(我們發現專案居中了,而且專案的高度是隨裡面的內容自適應高度的):


9.aligin-self屬性:規定靈活容器內被選中專案的對齊方式,其值可以為:auto(預設值。元素繼承了它的父容器的 align-items 屬性。如果沒有父容器則為 "stretch")|stretch(元素被拉伸以適應容器)|center(元素位於容器的中心)|flex-start(元素位於容器的開頭)|flex-end(元素位於容器的結尾)|baseline(元素位於容器的基線上)

我們在demo4的基礎上給.item2加上屬性align-self: center;給.item5加上屬性align-self: flex-start;

下面是演示的效果:


10.justify-content屬性:在當靈活容器內的各項沒有佔用主軸上所有可用的空間時對齊容器內的各項(水平),其值可以為:flex-start(預設值。專案位於容器的開頭)|flex-end(目位於容器的結尾)|center(專案位於容器的中心)|space-between(專案位於各行之間留有空白的容器內)|space-around(專案位於各行之前、之間、之後都留有空白的容器內

注意:justify-content屬性有效果的前提是,所有的item的加起來的總寬度小於.container的寬度,這樣才算是有可用的空間

下面是一個demo5(我們以justify-content:space-around為例):

<!doctype html>
<html>
<head>
<style type="text/css">
*{margin: 0;padding: 0;}
.container{
	display: flex;
	justify-content: space-around;
	width: 1000px;
	height: 500px;
	background-color: #9fc2e9;
	margin:0 auto;
}
.item1{
	width: 100px;
	background-color: #678cf4;
}
.item2{
	width: 100px;
	background-color: #3969f3;
}
.item3{
	width: 100px;
	background-color: #1145d9;
}
.item4{
	width: 100px;
	background-color: #265af0;
}
.item5{
	width: 100px;
	background-color: #0a3ac5;
}
.item6{
	width: 100px;
	background-color: #0531ac;
}
</style>
</head>
<body>
<div class="container">
	<div class="item item1">1</div>
	<div class="item item2">2</div>
	<div class="item item3">3</div>
	<div class="item item4">4</div>
	<div class="item item5">5</div>
	<div class="item item6">6</div>
</div>
</body>
</html>
下面是演示的效果:



好了,Flexible Box的一部分常用的屬性就介紹到這裡,還有一些屬性我們不常用到,有興趣的童鞋可以查閱資料更加深入地學習哦~

相關推薦

關於伸縮模型 Flexible Box佈局

這就是傳說中的伸縮盒模型:Flexible Box:display:flex或者display:inline-flex,對於相容IE:加-ms-字首,對於相容Safari:加-webkit-字首。 等下要演示的相關屬性有:flex,flex-basis,flex-direc

CSS3引入了一種新的布局模式——Flexbox布局,即伸縮布局Flexible Box模型

多余 content clas container default 案例 size -s 分享圖片 CSS2定義了四種布局:塊布局、行內布局、表格布局盒定位布局。 CSS3引入了一種新的布局模式——Flexbox布局,即伸縮布局盒(Flexible Box)模型,此布局對於

css display flew 伸縮模型

-a 模型 pat 垂直居中 direct play spa tween 底部 父級容器屬 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8">

真正的模型-border-box

長期以來,w3c的盒模型都是很噁心的,我們設定了一個盒子的width和height,如果我們要再去給其設定padding,border,那麼它的真實大小是width/height+padding+border,如下: width: 200px; heigh

flexible box佈局微部落格戶端發現頁面練習

大致效果圖如下,原視訊練習在https://www.bilibili.com/video/av17842686?,有附帶原始碼和相關圖片檔案~大家也可以拿來練練手 這次寫的是移動端頁面,需要加上以下程式碼適配screen: <meta name="viewport" content="device-

想要清晰的明白(二)CSS 模型Block box與Line box

Block Box (圖自《css權威指南》) display : block 、 list-item 以及 table 會讓一個元素成為塊級元素。 在Block Box中,會被水平格式化,垂直格式化,那我們就分垂直和水平來講講 水平格式化 如何計算其寬度 正常流中,塊級元素框的水平部分 = 其

CSS彈性模型(flex box)

any 布局 -h idt 交叉 響應式 容器 彈性盒 ase 本文介紹的是 CSS3 規範中引入的新布局模型:彈性盒模型(flex box)。隨著響應式用戶界面的流行,Web 應用一般都要求適配不同的設備尺寸和瀏覽器分辨率。 瀏覽器支持: 彈性盒布局

CSS3伸縮Flexible Box

git 情況 ear 更多 group android 計算 zab 基礎 這是一種全新的布局,在移動端非常實用,IE對此布局的相關的兼容不是很好,Firefox、Chrome、Safrai等需要加瀏覽器前綴。 先說說這種布局的特點: 1)移動端由於屏幕寬度都不一樣,在布局

css3伸縮佈局模型

CSS3 伸縮佈局盒模型 CSS3引入的佈局模式Flexbox佈局,主要思想是讓容器有能力讓其子專案能夠改變其寬度,高度,以最佳方式填充可用空間。Flex容器使用Flex專案可以自動放大與收縮,用來填補可用的空閒空間。   更重要的是,Flexbox佈局方向不可預知,不像

第10章 佈局樣式相關-伸縮佈局Flexible Box

伸縮佈局(一) CSS3引入了一種新的佈局模式——Flexbox佈局,即伸縮佈局盒模型(Flexible Box),用來提供一個更加有效的方式制定、調整和分佈一個容器裡專案佈局,即使它們的大小是未知或者動態的,這裡簡稱為Flex。 Flexbox佈局常用於設計比較複雜的頁面,可以輕鬆的實現螢幕和瀏覽器視窗

CSS3 Flex佈局伸縮佈局模型

轉自:http://www.xifengxx.com/web-front-end/1408.html   Flex伸縮佈局 CSS2定義了四種佈局:塊佈局、行內佈局、表格佈局盒定位佈局。 CSS3引入了一種新的佈局模式——Flexbox佈局,即伸縮佈局盒(Flexible

彈性模型伸縮布局)

技術 baseline 不換行 它的 gray lock gin ack 設置高度 一、彈性盒模型(伸縮布局) flxible box 前言: 彈性布局,用來為盒子提供靈活性。就像是當把瀏覽器縮小的的時候,不會像float屬性會依然往下掉,靈活性不好。而且當布局盒裝模型

css3基礎 box-sizing 設置模型(邊線與padding不改盒子的大小)

鍛煉 author har con ast 學習 tca padding set 禮悟:   公恒學思合行悟,尊師重道存感恩。葉見尋根三返一,江河湖海同一體。 虛懷若谷良心主,願行無悔給最苦。讀書鍛煉養身心,誠勸且行且珍惜。   

CSS - 模型佈局 - margin 陷阱(父子、兄弟)

目錄 margin 陷阱:內聯塊中對於相鄰快的影響 margin陷阱 - 兄弟佈局 margin陷阱 - 父子佈局 父子 - 解決方法一:固定父親(border-top) 父子 - 解決方法二:使用padding margin 陷阱:內聯塊中對於相鄰

模型佈局相關-基礎與語法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 21.0px; font: 18.0px "Yuanti SC"; color: #000000; background-color: #ffffff } span.s1 { } 佈局相關屬性 p.p

【筆記】學習CSS佈局05——模型

在我們討論寬度的時候,我們應該講下與它相關的另外一個重點知識:盒模型。當你設定了元素的寬度,實際展現的元素卻超出你的設定:這是因為元素的邊框和內邊距會撐開元素。看下面的例子,兩個相同寬度的元素顯示的實際寬度卻不一樣。 .simple { width: 500px; margin: 20p

頁面佈局和css模型

1.頁面佈局練習 高度已知,寫出三欄佈局,其中左欄、右欄寬度各為300px 中間自適應 浮動 缺點:需要處理清除浮動 絕對定位 缺點:佈局脫離文件流 flex 缺點:相容性 表格佈局 缺點:一欄超出高度,其他跟著超出 網格佈局:相容性 高度未知的情況

CSS-兩種模型 box-sizing

CSS-兩種盒模型 box-sizing: content-box (W3C盒子)| border-box (IE盒子); 區別: 設定為 border-box 後,width包含padding,border,整個盒子大小為 margin + wi

邊界圓角 模型佈局 圖片背景 精靈圖

常用標籤的使用: 直接舉例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>常用標籤

第六章2:比CSS模型更方便的Flex 佈局語法

佈局的傳統解決方案,基於盒狀模型,依賴 display屬性 + position屬性 + float屬性。它對於那些特殊佈局非常不方便,Flex佈局將成為未來佈局的首選方案,我看了三遍的Flex 佈局教