當寬度不同的時候保持置中排版
使用 Layout 的好處
接著上一篇在 Vue 專案使用 Slot 進行 Layout的內容,我們先加上一個置中對照組
當物件的寬度相同的時候,中間的元件保持置中
接著我們增加把右邊的寬度增加一倍
<template>
<div class="outside-box">
<div class="box">
<div class="item center normal-wide">center</div>
</div>
<Layout>
<template v-slot:left>
<div class="item left normal-wide">left</div>
</template>
<template v-slot:center>
<div class="item center normal-wide">center</div>
</template>
<template v-slot:right>
<div class="item right more-wide">right</div>
</template>
</Layout>
</div>
</template>
可以發現中間元件的位置,不再是原本正中間的位置, 而是保持兩邊相同的空白距離的中間
修改 Layout 元件
這個問題我們可以修改原本的 Layout 元件
Layout.vue
<template>
<div class="layout-box">
<div class="inner-wrapper left">
<slot name="left"></slot>
</div>
<div class="inner-wrapper center">
<slot name="center"></slot>
</div>
<div class="inner-wrapper right">
<slot name="right"></slot>
</div>
</div>
</template>
.layout-box {
display: flex;
justify-content: space-between;
}
.inner-wrapper {
display: flex;
flex: 1;
justify-content: center;
}
.left {
margin-right: auto;
}
.right {
margin-left: auto;
}
回頭看執行的結果,即使其它元件的寬度不同,也不影響中間元件置中了
再次驗證使用 Slot 的好處,就是將排版相關的程式碼與內容分離, 修改 Layout.vue 的時候,不需要修改使用的程式,即可正確呈現想要的結果。
參考資料
html - Keep the middle item centered when side items have different widths - Stack Overflow
In CSS Flexbox, why are there no “justify-items” and “justify-self” properties? - Stack Overflow
留言