iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Modern Web

下一代 CSS 解決方案:Master CSS 具增強語法的虛擬 CSS 語言系列 第 11

Master CSS 的區塊(Block)、彈性盒子(Flexible Box)和網格格線(Grid)切版使用方式

  • 分享至 

  • xImage
  •  

使用 CSS 開始排版切版的時候,我個人習慣使用 div 來開始,不管是要切導覽列、控制面板的,透過排列 div,嵌套 div,最終使用 CSS 來進行排列調整,還記得以前要解決垂直置中、水平致中是件多煩人的事情,從使用 Table 一直到 Flexible BoxGrid 網格佈局,如今我們在設計網頁已經有很方便又直觀的排版方式。

Display

佈局的基本,通常你會使用 display 來決定每個元素的顯示方式,包含了區塊(Block)、彈性盒子(Flexible Box)或網格格線(Grid)等,這些也將間接影響元素與子元素的特性。

在使用上,除了使用 display:blockdisplay:flexdisplay:inline-flexdisplay:grid,你也可以直接透過 blockflexinline-flexgrid 等語意簡寫來描述每個元素的顯示方式進行排版。

Block & Inline

試試看 block 搭配 inline-block

<div class="block ...">
    <div class="inline-block p:20">
        <code class="...">inline-block</code>
    </div>
    <div class="inline-block p:20">
        <code class="...">inline-block</code>
    </div>
    <div class="inline-block p:20">
        <code class="...">inline-block</code>
    </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242vVqE42How0.png

更多 Display 與 Block 的語法可以參考官網

Flex & Inline

彈性盒子排版,已經是現今好用的排版方式之一,能用來應付多數場景,以前剛學習時,還會先去玩一款 FlexBox 的小青蛙遊戲,熟悉好之後很快就能上手 flex 的使用。

<div class="flex...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

彈性盒子排版,已經是現今好用的排版方式之一,能用來應付多數場景,以前剛學習時,還會先去玩一款 FlexBox 的小青蛙遊戲,熟悉好之後很快就能上手 flex 的使用。

<div class="flex...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

Inline-Flex,讓 flex 可以穿插在文字行內進行排版。

<div class="flex flex:wrap justify-content:center">
    Ladies and gentlemen, the first Virtual CSS came to the world. It will crush all CSS and UI libraries,
    and subvert your understanding of traditional CSS technology.
    <div class="inline-flex align-items:center py:10 px:15">
        <img src="/images/foods/sushi.jpg" class="w:30 h:30 object:cover round mx:10">
        <p>Sushi</p>
    </div>
    <div class="inline-flex align-items:center py:10 px:15">
        <img src="/images/foods/sushi.jpg" class="w:30 h:30 object:cover round mx:10">
        <p>Sushi</p>
    </div>
    <div class="inline-flex align-items:center py:10 px:15">
        <img src="/images/foods/sushi.jpg" class="w:30 h:30 object:cover round mx:10">
        <p>Sushi</p>
    </div>
    Keep up with the latest technological trends,
    he will greatly improve Web interaction and execution efficiency.
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/201632423ueNLZytvm.png

彈性盒子的方向 row

<div class="flex flex-direction:row ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242EokcqTRc1r.png

彈性盒子的方向 column

<div class="flex flex-direction:column ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242Sw2xs27FYq.png

主軸(main axis)與切軸(cross axis)的對齊方式,所謂的主軸即是 flex-direction 所設定的方向為主軸,例如 flex-direction 為 row,就是為水平的 X 軸為主軸切軸即是與主軸垂直的 Y 軸。

justify-content 用來定義目前的主軸如何擺放,align-items 則是定義切軸如何擺放。

水平置中對齊,因為方向為 row 所以主軸為水平的,我們直接使用 justify-content 就可以設定水平主軸的對齊方式。

<div class="flex flex-direction:row justify-content:center ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242PQsbOFcQwA.png

垂直置中對齊,因為方向為 row 所以主軸為水平的,我們直接使用 justify-content 就可以設定水平主軸的對齊方式。

<div class="flex flex-direction:row align-items:center ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242vtfLRGDHba.png

當然也可以一起使用,就可以方便的完成水平對齊平均空白處與垂直的置中對齊。

<div class="flex flex-direction:row justify-content:space-evenly align-items:center ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242HZaDNGTocA.png

如果你的 flex 對齊方向是 column,那麼你的主軸將會變成直立的 Y 軸,所以想將內容進行水平置中對齊,就要使用切軸的來控制排列方式。

<div class="flex flex-direction:column align-items:center ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242y16SKxeq2R.png

更多 Flex 的語法可以參考官網

Grid

網格佈局是一種比較新的 CSS 佈局方式,因為採取了格線系統,可以很輕易的處理二維的佈局。

<div class="grid grid-cols:3 ...">
    <div class="..."> 1 </div>
    <div class="..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
    <div class="..."> 6 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242c0OUIXCXye.png

你也可以很輕易的跨網格排列。

<div class="grid grid-cols:3 ...">
    <div class="..."> 1 </div>
    <div class="grid-column-span:2 ..."> 2 </div>
    <div class="..."> 3 </div>
    <div class="..."> 4 </div>
    <div class="..."> 5 </div>
    <div class="grid-column-span:3 ..."> 6 </div>
</div>

https://ithelp.ithome.com.tw/upload/images/20230926/20163242nUNqQD9FEe.png

更多 Grid 的語法可以參考官網


上一篇
Master CSS 樣式宣告縮短還要好記 - 樣式類別的速記簡寫
下一篇
Master CSS 設定內距(Padding)與外距(Margin)
系列文
下一代 CSS 解決方案:Master CSS 具增強語法的虛擬 CSS 語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言