【问题标题】:Setting a max-width for flex items?为弹性项目设置最大宽度?
【发布时间】:2018-05-22 18:52:26
【问题描述】:

我正在尝试在我的网站上创建一个过滤器部分,内容都是动态生成的(所以我不能向它添加额外的父级),我们的样式指南使用弹性项目创建它们。我想在很大程度上保留这个功能。

我希望我的 3 个弹性项目有一个 max-width 并向左浮动,让我的非弹性项目向右浮动,在设置为最大宽度为 1080px 的整个容器中类似于这样:

Option 1    Option 2    Option 3                                    Non-flex Item

我尝试设置 flex-align 值并关注this answer,但这似乎不起作用。

截至目前,这是我正在使用的代码:

HTML

<ul class="container">
  <li class="child">One</li>
  <li class="child">Three</li>
  <li class="child">Three</li>
  <div class="non-flex">
   I'm not a flex item
  </div>
</ul>

CSS

.container{
      display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-orient: horizontal;
        -webkit-box-direction: normal;
        -ms-flex-direction: row;
        flex-direction: row;
        -webkit-box-pack: justify;
        -ms-flex-pack: justify;
        justify-content: space-between;
        position: relative;
            max-width: 1080px;
        margin: 0 auto;
        padding: 0 20px;
        box-sizing: content-box;
    }

    .child{
          display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-orient: horizontal;
        -webkit-box-direction: normal;
        -ms-flex-direction: row;
        flex-direction: row;
        -webkit-box-pack: justify;
        -ms-flex-pack: justify;
        justify-content: space-between;
        position: relative;
    }

我还制作了Fiddle 供大家玩耍。

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    在列表对象之间添加一个弹性跨度有很大帮助。 https://jsfiddle.net/cd9car5k/1/

    所以

    <ul class="container">
      <li class="child">One</li>
      <li class="child">Three</li>
      <li class="child">Three</li>
      <span class="example-spacer"></span>
      <div class="non-flex">
       I'm not a flex item
      </div>
    </ul>
    

    地点:

    .example-spacer {
        flex: 1 1 auto;
      }
    

    【讨论】:

      【解决方案2】:

      我会将widthmin-width 应用于.child 项目(或在它们之间创建距离的左/右填充)并将margin-left: auto 应用于最后一个项目,这将其向右移动,独立于其他:

      https://jsfiddle.net/6vwny6bz/2/

      .container {
        display: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        -webkit-box-orient: horizontal;
        -webkit-box-direction: normal;
        -ms-flex-direction: row;
        flex-direction: row;
        -webkit-box-pack: justify;
        -ms-flex-pack: justify;
        justify-content: space-between;
        position: relative;
        max-width: 1080px;
        margin: 0 auto;
        padding: 0 20px;
        box-sizing: content-box;
      }
      
      .child {
        list-style: none;
        min-width: 80px;
        padding: 10px 0;
      }
      
      .non-flex {
        margin-left: auto;
        padding: 10px 0;
      }
      <ul class="container">
        <li class="child">One</li>
        <li class="child">Three</li>
        <li class="child">Three</li>
        <div class="non-flex">
          I'm not a flex item
        </div>
      </ul>

      【讨论】:

      • 稍作调整,但效果很好,感谢您的帮助!
      • 不客气!顺便说一句:.child 中的所有 flex 设置都不需要,所以我从上面的 sn-p 中删除了它们。它们是 flex items 自动(通过将它们的容器定义为 flex 容器)
      • 是的,这些来自我们的全球风格指南,所以我无法真正删除它们,但感谢您的洞察力。在我们开始这个项目之前,我从来没有真正使用过弹性项目,所以它们有点令人困惑!
      【解决方案3】:

      你可以使用:

      .non-flex{
        margin-left: 50%;
      }
      

      在前 3 个元素和非 flex 元素之间创建更多空间

      【讨论】:

        【解决方案4】:

        一个简单的解决办法是设置margin-right: auto:

        margin-right: auto;
        

        【讨论】:

          猜你喜欢
          • 2017-09-28
          • 2018-07-03
          • 2019-03-15
          • 1970-01-01
          • 2016-07-04
          • 2011-04-11
          • 1970-01-01
          • 2017-06-30
          • 1970-01-01
          相关资源
          最近更新 更多