Flexbox - daniel-qa/Vue GitHub Wiki
-
核心邏輯:主軸 (Main Axis)
在 Flexbox 中,justify-content 永遠是控制 「主軸」 方向的對齊方式。
當 flex-direction: row 時(預設值):
主軸是水平方向。
justify-content: center; 就是 水平居中。
當 flex-direction: column 時:
主軸變成了垂直方向。
justify-content: center; 就變成了 垂直居中。
- align-items 定義的是 「側軸」(Cross Axis) 的對齊方式。簡單來說,如果你的主軸是水平的,那它就是控制 「垂直」 方向的對齊。
**所以定義上,就是對齊(align)主軸。
- gap
<div style="display: flex; align-items: center; gap: 20px; background: #f0f0f0; padding: 10px;">
<div style="background: #2d8cf0; color: white; padding: 10px;">項目 A</div>
<div style="background: #19be6b; color: white; padding: 10px;">項目 B</div>
</div>
gap: 20px 的效果是 水平(左右) 的間距。
「為什麼是水平?」
這是由 display: flex; 決定的:
預設方向:在 CSS 中,當你設定 display: flex; 且沒有額外寫 flex-direction 時,它的預設值是 row(橫向排列)。
排列邏輯:因為元素是橫著排成一列,所以 gap 自然就產生在左右相鄰的元素之間。
- 分別貼齊左右側
用 el-col 排版
<!-- 標題與返回連結 -->
<el-row style="width:100%; height:35px; margin-bottom:15px; display:flex; justify-content:space-between; align-items:center; padding-top:10px;">
<!-- 左側標題 -->
<el-col :span="12" style="display:flex; justify-content:flex-start; align-items:center; padding-left:20px;">
<h2 style="margin:0; color:#333; font-size:18px; font-weight:bold;">
分享學校課網
</h2>
</el-col>
<!-- 右側返回 -->
<el-col :span="12" style="display:flex; justify-content:flex-end; align-items:center; padding-right:20px;">
<a href="javascript:void(0)" @click="closeTestPage" style="color:#2d8cf0; text-decoration:none; font-size:14px; display:flex; align-tems:center;">
<Icon type="md-arrow-round-back" style="margin-right:5px; font-size:16px;" />
返回
</a>
</el-col>
</el-row>
- display:flex 預設就是水平排列
因為 flex-direction 的預設值是:
flex-direction: row;
也就是 主軸 = 水平軸,元素就會自然「從左排到右」。
占滿整行
一般作為 寬度的設定——
但更精準地說,它是 Flex item 在分配空間時的“基準大小”。
如果你的 flex 方向是:
row(預設) → flex-basis 表現得像「寬度」
column → flex-basis 表現得像「高度」
display: flex;
justify-content: center;
flex-basis: 100%;
✔ flex-basis: 100% → 元素在 flex container 裡佔整列
✔ justify-content: center → 讓裡面的東西置中
flex: auto → 1 1 auto(可伸可縮,依內容初始)
「可以伸、可以縮,但一開始請尊重我原本的寬度或內容大小。」
用 Flexbox 排版(最推薦、最現代); margin-left: auto
<div class="search-area">
<Input class="search-input light-iview-input" v-model="keyword" style="width:250px" />
<Button type="primary" @click="handleSelection" :disabled="disabled" style="margin-left: auto;">確認選擇</Button>
</div>
.search-area {
display: flex;
align-items: center;
margin-bottom: 15px;
display: flex;
align-items: center;
}
由於 .search-area 使用 display: flex 布局,margin-left: auto 會自動將按鈕推到容器的最右側
margin-left: auto 是 flex 排版中讓元素「自動推向右邊」的簡潔解法
如果元件要靠左,使用Flexbox預設即可
- 觀念
margin 的作用是「推開自己與其他元素的距離」,當你設 margin-left: auto 時,瀏覽器會自動分配剩餘空間,讓該元素被推到最右邊。
padding 的作用是「增加內容與邊框之間的內距」,它只是數值,不能自動去「吃掉剩餘空間」,所以 auto 對它沒有意義。
容器(Flex Container): 將需要使用 Flexbox 進行布局的元素設置為 Flex 容器。這可以通過將 display 屬性設置為 flex 或 inline-flex 來實現。
.flex-container {
display: flex; /* 或 inline-flex */
}
- 下是一個使用 Flexbox 的簡單示例:
<template>
<div class="flex-container">
<div class="item">項目 1</div>
<div class="item">項目 2</div>
<div class="item">項目 3</div>
</div>
</template>
<style>
.flex-container {
display: flex;
flex-direction: row; /* 水平排列 */
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
height: 200px; /* 設置容器高度 */
background-color: #f0f0f0;
}
.item {
margin: 10px;
padding: 20px;
background-color: lightblue;
}
</style>
這個例子中,所有項目會在容器中水平和垂直居中顯示,並且它們的背景顏色為淡藍色。