什麼是彈性(Flex)佈局 ? 15分鐘弄懂Flex佈局
在網頁佈局的學習中,我們常常會遇到彈性(Flex)佈局,那麼彈性(Flex)佈局究竟是什麼樣子的呢?相信你學完了這篇文章就會明白Flex(彈性)佈局的真正的意思了。
建議手冊:CSS線上手冊
#什麼是Flexbox ?
Flexbox 是 flexible box 的簡稱(註:意思是「靈活的盒子容器」),是 CSS3 引入的新的佈局模式。它決定了元素如何在頁面上排列,使它們能在不同的螢幕尺寸和裝置下可預測地展現出來。
它之所以被稱為 Flexbox ,是因為它能夠擴展和收縮 flex 容器內的元素,以最大限度地填充可用空間。與先前佈局方式(如table 佈局和浮動元素內嵌塊元素)相比,Flexbox 是更強大的方式:
1、在不同方向排列元素
#2、重新排列元素的顯示順序
3、更改元素的對齊方式
4、動態地將元素裝入容器
影片教學推薦:
flex佈局影片教學推薦:2020最新5個flex彈性佈局影片教學
什麼情況不建議使用Flexbox ?
雖然Flexbox 非常適合縮放,對齊和重新排序元素,但以下情況應該盡量避免使用Flexbox 佈局:
1、整體頁面佈局
2、完全支援舊瀏覽器的網站
瀏覽器支援Flexbox 的情況:
舊版瀏覽器,如IE 11或更低版本,不支援或僅部分支援Flexbox 。如果你想要安全的使用頁面正常呈現,你應該退回到其他的 CSS 佈局方式,例如結合float 的 display: inline-block 或 display: table 等。但是,如果您只針對現代瀏覽器,那麼 Flexbox 絕對值得一試。
術語
在Flexbox 模型中,有三個核心概念:
– flex 項(愚人碼頭注:也稱為flex 子元素),需要佈局的元素
– flex 容器,其包含flex 項
– 排列方向(direction),這決定了flex 項的佈局方向(註:更多的文章叫做主軸)
最好的學習方式是從經驗和例子中學習,所以讓我們開始吧!
Level 1 — 基礎
1)建立一個flex 容器
CSS 程式碼:
.flex-container {display: flex;}
程式碼如下:
HTML:
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> </div>
CSS:
.flex-container { display: flex; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
要建立一個flex 容器,您只需要將一個display: flex 屬性加入到一個元素上。預設情況下,所有的直接子元素都被認為是 flex 項,並從左到右依序排列在一行中。如果 flex 項的寬度總和大於容器,那麼 flex 項將按比例縮小,直到它們適應 flex 容器寬度。
2)將flex 項排成一列
CSS 程式碼:
.flex-container {display: flex;flex-direction: column;}
程式碼如下:
# #HTML:<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> </div>
.flex-container { display: flex; flex-direction: column; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
讓 flex 項以相反的順序排列。
CSS 程式碼:.flex-container {display: flex;flex-direction: column-reverse;}
程式碼如下:
HTML:<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> </div>
CSS:
.flex-container { display: flex; flex-direction: column-reverse; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
##Level 2 — 新手
1)向右對齊的flex 項
.flex-container {display: flex;justify-content: flex-end;}
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> </div>
.flex-container { display: flex; justify-content: flex-end; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
相关文章推荐:
1.flex多列布局有哪些?flex四种多列布局的介绍
2.弹性盒子布局flex是什么
3.flex布局实现网易云播放器界面的布局
相关视频推荐:
1.CSS视频教程-玉女心经版
2)居中对齐的 flex 项
CSS 代码:
.flex-container {display: flex;justify-content: center;}
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> </div>
CSS:
.flex-container { display: flex; justify-content: center; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
3)铺开的 flex 项
您可以通过使用以下 justify-content 属性的三个间距值之一来指定容器中 flex 项之间应显示多少空间:
space-evenly : flex 容器起始边缘和第一个 flex 项之间的间距和每个相邻 flex 项之间的间距是相等。(愚人码头注:该属性以前很少看到,原因是以前浏览器不支持,chrome 也是 60 版本之后才支持。延伸一下,align-content: space-evenly 也是这个逻辑,建议在 chrome 60 下查看 这个demo 。 )
space-between : 任何两个相邻 flex 项之间的间距是相同的,但不一定等于第一个/最后一个 flex 项与 flex 容器边缘之间的间距;起始边缘和第一个项目之间的间距和末端边缘和最后一个项目之间的间距是相等的。
space-around : flex 容器中的每个 flex 项的每一侧间距都是相等的。请注意,这意味着两个相邻 flex 项之间的空间将是第一个/最后一个 flex 项与其最近边缘之间的空间的两倍。
注:网上找了一张图片能更好的解释 justify-content 属性值的表现,如图:
4)flex 项在交叉轴上的对齐
CSS 代码:
.flex-container {display: flex;justify-content: center;align-items: center;}
通常,我们想沿着 flex 方向(主轴)排列 flex 项,还可以在垂直于它的方向(交叉轴)上对齐 flex 项。通过设置 justify-content:center和align-items:center,可以使 flex 项水平和垂直放置在 flex 容器的中心。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2 <br />2<br />2</div> <div class="flex-item">3 <br />3<br /> 3<br /> 3<br /> 3</div> </div>
CSS:
.flex-container { display: flex; justify-content: center; align-items: center; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
5)对齐某个特定的 flex 项
CSS 代码:
.flex-container {display: flex;align-items: center;} .flex-bottom {align-self: flex-end;}
可以在某个特定的 flex 项上使用 align-self CSS 属性,来使该特定的 flex 项与容器中的其他 flex 项进行对齐。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item flex-bottom">1</div> <div class="flex-item">2 <br />2<br />2</div> <div class="flex-item">3 <br />3<br /> 3<br /> 3<br /> 3</div> </div>
CSS:
.flex-container { display: flex; justify-content: center; align-items: center; } .flex-bottom { align-self: flex-end; } /* 以下为辅助样式 */ .flex-container{ background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
Level 3 — 中级
1)允许 flex 项多行/列排列
CSS 代码:
.flex-container {display: flex;flex-wrap: wrap;}
默认情况下, flex 项不允许多行/列排列,如果 flex 容器尺寸对于所有 flex 项来说不够大,那么flex 项将被调整大小以适应单行或列排列。
通过添加 flex-wrap: wrap ,可以将溢出容器的 flex 项将被排列到另一行/列中。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> <div class="flex-item">3</div> <div class="flex-item">4</div> <div class="flex-item">5</div> <div class="flex-item">6</div> <div class="flex-item">7</div> <div class="flex-item">8</div> </div>
CSS:
.flex-container { display: flex; justify-content: space-evenly; flex-wrap: wrap; } /* 以下为辅助样式 */ .flex-container{ width:270px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
2)flex 项反向多行/列排列
CSS 代码:
.flex-container {display: flex;flex-wrap: wrap-reverse;}
flex-wrap:wrap-reverse 仍然使 flex 项以多行/列排列,但是它们从 flex 容器的末尾开始排列的。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> <div class="flex-item">3</div> <div class="flex-item">4</div> <div class="flex-item">5</div> <div class="flex-item">6</div> <div class="flex-item">7</div> <div class="flex-item">8</div> </div>
CSS:
.flex-container { display: flex; flex-wrap: wrap-reverse; } /* 以下为辅助样式 */ .flex-container{ width:270px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
3)多行/列排列的 flex 项在交叉轴上的对齐方式
CSS 代码:
.flex-container {display: flex;flex-wrap: wrap;align-content: flex-start;}
默认情况下,当 flex 容器的交叉轴(cross axis)上存在多余空间时,您可以在 flex 容器上设置 align-content,以控制 flex 项在交叉轴(cross axis)上的对齐方式。可能的值是 flex-start,flex-end,center,space-between,space-around ,space-evenly 和 stretch(默认)。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item">1</div> <div class="flex-item">2</div> <div class="flex-item">3</div> <div class="flex-item">4</div> <div class="flex-item">5</div> <div class="flex-item">6</div> <div class="flex-item">7</div> <div class="flex-item">8</div> </div>
CSS:
.flex-container { display: flex; flex-wrap: wrap; justify-content: space-evenly; align-content: space-evenly; } /* 以下为辅助样式 */ .flex-container{ width:270px; height:200px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px; height:20px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
Level 4 — 高级
1)拉伸 flex 项
CSS 代码:
.flex-container {display: flex;} .flex-item.nth-of-type(1){flex-grow: 1;} .flex-item.nth-of-type(2) {flex-grow: 2;}
flex-grow 只有在 flex 容器中有剩余空间时才会生效。flex 项的 flex-grow 属性指定该 flex 项相对于其他 flex 项将拉伸多少,以填充 flex 容器。默认值为1。当设置为 0 时,该 flex 项将不会被拉伸去填补剩余空间。在这个例子中,两个项的比例是 1:2,意思是在被拉伸时,第一个 flex 项将占用 1/3,而第二个 flex 项将占据余下的空间。
注:这里特别要注意的是 flex-grow 控制的是 flex 项的拉伸比例,而不是占据 flex 容器的空间比例。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item flex-item1">1</div> <div class="flex-item flex-item2">2</div> <div class="flex-item flex-item3">3</div> </div> <button class="w90">容器宽度设置为初始宽度90px</button> <button class="w180">容器宽度设置为:180px</button> <button class="w270">容器宽度设置为:270px</button>
CSS:
.flex-container { display: flex; } .flex-item1{flex-grow: 0;} .flex-item2{flex-grow: 1;} .flex-item3{flex-grow: 2;} /* 以下为辅助样式 */ .flex-container{ width:90px; padding:10px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px 0; text-align: center; width:30px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
JS:
var $flexContainer=$(".flex-container") $(".w90").on("click",function(){ $flexContainer.width("90px") }) $(".w180").on("click",function(){ $flexContainer.width("180px") }) $(".w270").on("click",function(){ $flexContainer.width("270px") })
效果如下:
2)收缩元素
CSS 代码:
.flex-container {display: flex;} .flex-item:nth-of-type(1) {flex-shrink: 1;} .flex-item:nth-of-type(2) {flex-shrink: 2;}
flex-shrink 只有在 flex 容器空间不足时才会生效。它指定 flex 项相对于其他 flex 项将缩小多少,以使 flex 项不会溢出 flex 容器。 默认值为 1。当设置为0时,该 flex 项将不会被收缩。在这个例子中,比例是1:2,意思是在收缩时,第一项将收缩 1/3 ,而第二个项目将被收缩 2/3 。
注: flex-shrink 和 flex-grow 正好相反
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item flex-item1">1</div> <div class="flex-item flex-item2">2</div> <div class="flex-item flex-item3">3</div> </div> <button class="w90">容器宽度设置为:90px</button> <button class="w180">容器宽度设置为:180px</button> <button class="w270">容器宽度设置为初始宽度270px</button>
CSS:
.flex-container { display: flex; } .flex-item1{flex-shrink: 0;} .flex-item2{flex-shrink: 1;} .flex-item3{flex-shrink: 2;} /* 以下为辅助样式 */ .flex-container{ width:270px; padding:10px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px 0; text-align: center; width:90px; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
JS:
var $flexContainer=$(".flex-container") $(".w90").on("click",function(){ $flexContainer.width("90px") }) $(".w180").on("click",function(){ $flexContainer.width("180px") }) $(".w270").on("click",function(){ $flexContainer.width("270px") })
效果如下:
3)设置元素的大小
CSS 代码:
.flex-container {display: flex;} .flex-item.nth-of-type(1) {flex-basis: 200px;} .flex-item.nth-of-type(2) {flex-basis: 10%;}
您可以使用 flex-basis 定制 flex 项尺寸来代替元素的初始大小。默认情况下,其值为 flex-basis: auto,这意味该尺寸着从非 Flexbox CSS规则计算的。您还可以将其设置为某个绝对值或相对于 flex 容器百分比的值;例如 flex-basis:200px 和flex-basis:10%。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item flex-item1">1</div> <div class="flex-item flex-item2">2</div> </div>
CSS:
.flex-container { display: flex; } .flex-item1{flex: 1 0 90px;} .flex-item2{flex: 2 0 10%;} /* 以下为辅助样式 */ .flex-container{ width:200px; padding:10px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px 0; text-align: center; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
4)将 flex-grow, flex-shrink, 和 flex-basis 放在一起
CSS 代码:
.flex-container {display: flex;} .flex-item:nth-of-type(1) {flex: 1 0 100px;} .flex-item:nth-of-type(2) {flex: 2 0 10%;}
flex 是 flex-grow,flex-shrink 和 flex-based 的缩写。在这个例子中,第一个 flex 项设置为flex-grow: 1,flex-shrink: 0,flex-basis: 100px,第二个 flex 项设置为flex-grow: 2,flex-shrink: 0,flex-basis: 10%。
代码如下:
HTML:
<div class="flex-container"> <div class="flex-item flex-item1">1</div> <div class="flex-item flex-item2">2</div> </div>
CSS:
.flex-container { display: flex; } .flex-item1{flex: 1 0 90px;} .flex-item2{flex: 2 0 10%;} /* 以下为辅助样式 */ .flex-container{ width:200px; padding:10px; background-color: #F0f0f0; } .flex-container .flex-item{ padding:20px 0; text-align: center; background-color: #B1FF84; } .flex-container .flex-item:first-child{ background-color: #F5DE25; } .flex-container .flex-item:last-child{ background-color: #90D9F7; }
效果如下:
分析一下上面的这个例子,由于在 flex 容器(200px)中存在剩余空间 (90px),只有 flex-grow 才能起作用,flew-shrink 被忽略。第一个 flex 项的flex-grow 为 1,第2个 flex 项的flex-grow 为 2,所以第1个 flex 项拉伸 30px,第2个 flex 项拉伸 60px。
相关视频教程:
flex布局视频教程推荐:2018最新5个flex弹性布局视频教程
以上是什麼是彈性(Flex)佈局 ? 15分鐘弄懂Flex佈局的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

WordPress網頁錯位現象解決攻略在WordPress網站開發中,有時候我們會遇到網頁元素錯位的情況,這可能是由於不同裝置上的螢幕尺寸、瀏覽器相容性或CSS樣式設定不當所致。要解決這種錯位現象,我們需要仔細分析問題、找出可能的原因,並逐步進行除錯和修復。本文將分享一些常見的WordPress網頁錯位問題以及對應的解決攻略,同時提供具體的程式碼範例,幫助開

Vue是一款非常優秀的前端開發框架,它採用MVVM模式,透過資料的雙向綁定實現了非常好的響應式佈局。在我們的前端開發中,響應式佈局是非常重要的一部分,因為它能夠讓我們的頁面針對不同的設備,顯示出最佳的效果,從而提高用戶體驗。在本文中,我們將會介紹如何使用Vue實作響應式佈局,並提供具體的程式碼實例。一、使用Bootstrap實作響應式佈局Bootstrap是一

flex版面的常用屬性有哪些,需要具體程式碼範例Flex佈局是一種用於設計響應式網頁版面的強大工具。它透過使用一組靈活的屬性,可以輕鬆控制網頁中元素的排列方式和尺寸。在本文中,我將介紹Flex佈局的常用屬性,並提供具體的程式碼範例。 display:設定元素的顯示方式為Flex。 .container{display:flex;}flex-directi

如何透過CSSFlex彈性佈局實現兩欄佈局CSSFlex彈性佈局是一種現代的佈局技術,它能夠簡化網頁佈局的過程,使得設計與開發者們能夠輕鬆創建出靈活且適應各種螢幕尺寸的佈局。其中,實現兩欄佈局是Flex佈局中的常見需求之一。在這篇文章中,我們將會介紹如何使用CSSFlex彈性佈局來實現一個簡單的兩欄佈局,並提供具體的程式碼範例。使用Flex容器和項目在使

Vue是一種流行的JavaScript框架,廣泛應用於前端開發。它的靈活性和強大的功能使得開發人員可以輕鬆建立互動豐富的網路應用程式。在Vue開發中,flex佈局幾乎是無所不在的。然而,使用flex佈局時,有時會遇到一些樣式問題。本文將介紹一些解決flex佈局所造成的樣式問題的方法。首先,讓我們來了解flex佈局的基本概念。 Flex佈局提供了彈性盒子模型

如何透過CSSFlex彈性佈局實現不規則的網格佈局在網頁設計中,常常需要使用網格佈局來實現頁面的分割和排版,通常的網格佈局都是規則的,每個網格大小相同,而有時候我們可能需要實作一些不規則的網格佈局。 CSSFlex彈性佈局是一種強大的佈局方式,它可以輕鬆實現各種網格佈局,包括不規則的網格佈局。以下我們將介紹如何利用CSSFlex彈性佈局來實現不

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

優化WordPress佈局,消除錯位困擾在使用WordPress建立網站的過程中,佈局錯位是一個常見的問題,給用戶瀏覽網站帶來了困擾。正確的佈局是網站設計中至關重要的一環,它直接影響使用者體驗和頁面展示效果。因此,為了消除錯位困擾,我們需要對WordPress佈局進行最佳化,並透過具體的程式碼範例來實現。以下是一些常見的佈局問題和對應的解決方案:響應式佈局問題:
