Skip to content

flex 扩展

flex & margin

flex 布局容器下的项目使用 margin 属性,有些情况会得到 flex 布局中项目属性的同等效果

margin: auto

  • 块元素在确定宽度元素下,使用 margin:auto 可以实现水平居中,无法实现垂直居中,CSS 规定 margin-top, margin-bottom 默认为 0,margin-left, margin-right 为 auto
  • flex 布局容器下的项目属性,margin:auto 可以实现水平垂直居中(flex 布局下的元素 margin-top, margin-bottom, margin-left, margin-right 属性值默认为 auto)

justify-content/align-items

html
<div class="container">
  <div class="item"></div>
</div>
<!-- 水平垂直居中 -->
<style>
  .container {
    display: flex;
  }
  .item {
    margin: auto;
  }
</style>
<div class="container">
  <div class="item"></div>
</div>
<!-- 水平垂直居中 -->
<style>
  .container {
    display: flex;
  }
  .item {
    margin: auto;
  }
</style>

space-between

html
<div class="container">
  <div class="item1"></div>
  <div class="item2"></div>
  <div class="item3"></div>
</div>
<!-- 使用 margin 代替 space-between -->
<style>
  .container {
    display: flex;
  }
  .item1 {
    margin-left: 0;
  }
  .item2 {
    margin: auto;
  }
  .item3 {
    margin-right: 0;
  }
</style>
<div class="container">
  <div class="item1"></div>
  <div class="item2"></div>
  <div class="item3"></div>
</div>
<!-- 使用 margin 代替 space-between -->
<style>
  .container {
    display: flex;
  }
  .item1 {
    margin-left: 0;
  }
  .item2 {
    margin: auto;
  }
  .item3 {
    margin-right: 0;
  }
</style>

space-around

html
<div class="container">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>
<!-- 使用 margin 代替 space-around -->
<style>
  .container {
    display: flex;
  }
  .item {
    margin: auto;
  }
</style>
<div class="container">
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
</div>
<!-- 使用 margin 代替 space-around -->
<style>
  .container {
    display: flex;
  }
  .item {
    margin: auto;
  }
</style>

align-self: flex-start/flex-end/center

html
<div class="container">
  <div class="item1">1</div>
  <div class="item2">2</div>
  <div class="item3">3</div>
</div>
<!-- 水平方向 item1 居左 item2 item3 居右依次布局 -->
<style>
  .container {
    display: flex;
    flex-direction: row;
  }
  .item2 {
    margin-left: auto;
  }
</style>

<div class="container">
  <div class="item1">1</div>
  <div class="item2">2</div>
  <div class="item3">3</div>
  <div class="item4">4</div>
</div>
<!-- 垂直方向 item2 item3 占满剩余空间  -->
<style>
  .container {
    display: flex;
    flex-direction: column;
  }
  .item2 {
    margin-top: auto;
  }
  .item3 {
    margin-bottom: auto;
  }
</style>
<div class="container">
  <div class="item1">1</div>
  <div class="item2">2</div>
  <div class="item3">3</div>
</div>
<!-- 水平方向 item1 居左 item2 item3 居右依次布局 -->
<style>
  .container {
    display: flex;
    flex-direction: row;
  }
  .item2 {
    margin-left: auto;
  }
</style>

<div class="container">
  <div class="item1">1</div>
  <div class="item2">2</div>
  <div class="item3">3</div>
  <div class="item4">4</div>
</div>
<!-- 垂直方向 item2 item3 占满剩余空间  -->
<style>
  .container {
    display: flex;
    flex-direction: column;
  }
  .item2 {
    margin-top: auto;
  }
  .item3 {
    margin-bottom: auto;
  }
</style>

粘性布局

html
<div class="container">
  <div class="content"></div>
  <div class="footer"></div>
</div>
<!-- content 高度不超出可视区域时 footer 位于底部 -->
<style>
  .container {
    display: flex;
    flex-direction: column;
    height: 100vh;
  }
  .footer {
    margin-top: auto;
  }
</style>
<div class="container">
  <div class="content"></div>
  <div class="footer"></div>
</div>
<!-- content 高度不超出可视区域时 footer 位于底部 -->
<style>
  .container {
    display: flex;
    flex-direction: column;
    height: 100vh;
  }
  .footer {
    margin-top: auto;
  }
</style>

Released under the MIT License.