Flexbox 列:将多个项目对齐到顶部和底部? [复制]

Posted

技术标签:

【中文标题】Flexbox 列:将多个项目对齐到顶部和底部? [复制]【英文标题】:Flexbox column: align multiple items to both top and bottom? [duplicate] 【发布时间】:2015-09-15 23:03:06 【问题描述】:

我想将一组元素对齐到 flexbox 列的顶部,并将另一组元素对齐到 flexbox 列的底部——这两组元素之间只有空格。

尝试 #1

http://codepen.io/anon/pen/eNyKdg

HTML

<html>
  <body>
    <div class="page-flex-container">
      <div class="sidebar">
        <h2>sidebar</h2>
        <div class="circular"></div>
        <div class="circular"></div>
         <div class="circular"></div>

        <div class="bottom">
          align-bottom
        </div>

      </div>
      <div class="main-wrapper">
        <div class="header">header</div>
        <div class="content">content</div>
      </div>
    </div>
  </body>
</html>

SASS

html, body
  height: 100%
  width: 100%
  margin: 0

.page-flex-container
  width: 100%
  height: 100%
  display: flex
  flex-direction: row
  justify-content: flext-start
  align-items: stretch

  .sidebar
    flex: 0 0 175px
    height: 100%
    background-color: #6A1B9A
    display: flex
    flex-direction: column
    justify-content: flext-start

    .bottom
      height: 50px
      width: 100%
      background-color: red
      align-self: flex-end

  .main-wrapper
    display: flex
    flex-direction: column
    justify-content: flex-start
    height: 100%
    width: 100%

    .header
      flex: 0 0 100px
      background-color: #1E88E5

    .content
      background-color: #E1BEE7
      height: 100%


.circular
  width: 75px
  height: 75px
  border-radius: 50%
  overflow: hidden
  margin: 15px auto
  flex: none
  background-color: white

  img
    display: block
    max-width: 100%

尝试 #2

http://codepen.io/anon/pen/mJpKRv

HTML

<html>
  <body>
    <div class="page-flex-container">
      <div class="sidebar">
        <h2>sidebar</h2>
        <div class="circular"></div>
        <div class="circular"></div>
         <div class="circular"></div>

        <div class="bottom-wrapper">
          <div class="item">align-bottom</div>
        </div>      
      </div>
      <div class="main-wrapper">
        <div class="header">header</div>
        <div class="content">content</div>
      </div>
    </div>
  </body>
</html>

SASS

html, body
  height: 100%
  width: 100%
  margin: 0

.page-flex-container
  width: 100%
  height: 100%
  display: flex
  flex-direction: row
  justify-content: flext-start
  align-items: stretch

  .sidebar
    flex: 0 0 175px
    height: 100%
    background-color: #6A1B9A
    display: flex
    flex-direction: column
    justify-content: flext-start

    .bottom-wrapper
      height: 100%
      width: 100%
      display: flex
      flex-direction: row
      background-color: #BA68C8
      align-items: flex-end

      .item
        background-color: red
        height: 50px
        width: 100%

  .main-wrapper
    display: flex
    flex-direction: column
    justify-content: flex-start
    height: 100%
    width: 100%

    .header
      flex: 0 0 100px
      background-color: #1E88E5

    .content
      background-color: #E1BEE7
      height: 100%


.circular
  width: 75px
  height: 75px
  border-radius: 50%
  overflow: hidden
  margin: 15px auto
  flex: none
  background-color: white

问题

在尝试 #1 中,div“align-bottom”未与列的末尾对齐。

在尝试 #2 中,div“align-bottom”与底部对齐,但是当浏览器调整大小时,div“bottom-wrapper”可以覆盖其上方“圆形”div 的一半。我希望“底部包装” div 在调整大小时不与任何其他 div 重叠(即,它应该被推离屏幕)。

请告诉我如何在调整浏览器大小时将底部 div 对齐到列的末尾,并且不与其他 div 重叠。

【问题讨论】:

【参考方案1】:

您需要将margin-top: auto; 附加到您的.bottom 类。 这是您的分叉演示:http://codepen.io/anon/pen/aOEKga

这里有一些很好的文章:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes#Flex_item_considerations

相邻弹性项目的边距不会折叠。使用自动边距 吸收垂直或水平方向的额外空间,并且可以 用于对齐或分隔相邻的弹性项目。见对齐 W3C Flexible Box Layout Model specification 中的“自动”边距 了解更多详情。

【讨论】:

那个“margin-top:auto”每次都让我着迷。

以上是关于Flexbox 列:将多个项目对齐到顶部和底部? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

GIT rebase 提交到顶部和底部

将flex-end元素与其容器的底部和左侧对齐

ScrollView监听滑动到顶部和底部的方法

Videojs requestPictureInPicture() 在滚动到顶部和底部时只工作一次

最简单的用jquery实现动画的跳到顶部和底部

Js判断H5上下滑动方向及滑动到顶部和底部判断