【问题标题】:Horizontal centering of 3 flexbox items of the same width3个相同宽度的flexbox项目的水平居中
【发布时间】:2015-12-29 17:37:52
【问题描述】:

我一直在尝试使用 flexbox 将这 3 个项目水平居中,但没有成功。它们都需要具有相同的宽度。 HTML:

 <div id="contact_flex_container">
    <div id="fb">
        <img src="img/contact/fb.png" class="contact_img">
        <h3>Title1</h3>
    </div>

    <div id="yt">
        <img src="img/contact/yt.png" class="contact_img">
        <h3>Title2</h3>
    </div>

    <div id="mail">
        <img src="img/contact/mail.png" class="contact_img">
        <h3>Title3</h3>
    </div>
</div>

CSS:

#contact_flex_container {
    display: flex;
    flex-flow: row wrap;
    text-align: center;
    background-color: red;
    width: auto;
    justify-content: space-around;
}

.contact_img {
    width: 40px;
    height: 40px;
}

#fb {
    flex-basis: 0;
    flex-grow: 1;
}

#yt {
    flex-basis: 0;
    flex-grow: 1;
}

#mail {
    flex-basis: 0;
    flex-grow: 1;
}

我还尝试将每个孩子的 margin-left 和 right 设置为 auto,将容器的 justify-content 设置为居中,甚至结合容器的固定宽度(以像素为单位),但似乎没有任何效果。更具体地说, justify-content 似乎在这里根本不起作用,无论我在那里设置什么值。我错过了什么或做错了什么?

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    您分配给弹性项目的弹性属性使它们尽可能大(在本例中为容器的 33%)。

    只需删除它们,然后将父级更改为justify-content:center

    #contact_flex_container {
      display: flex;
      flex-flow: row wrap;
      text-align: center;
      background-color: red;
      width: auto;
      justify-content: center
    }
    .contact_img {
      width: 40px;
      height: 40px;
    }
    #fb {} #yt {} #mail {}
    <div id="contact_flex_container">
      <div id="fb">
        <img src="http://lorempixel.com/image_output/abstract-q-c-50-50-5.jpg" class="contact_img">
        <h3>Title1</h3>
      </div>
    
      <div id="yt">
        <img src="http://lorempixel.com/image_output/abstract-q-c-50-50-5.jpg" class="contact_img">
        <h3>Title2</h3>
      </div>
    
      <div id="mail">
        <img src="http://lorempixel.com/image_output/abstract-q-c-50-50-5.jpg" class="contact_img">
        <h3>Title3</h3>
      </div>
    </div>

    备选方案,基于扩展要求。

    需要一个额外的包装器,应该是inline-flex

    #contact_flex_container {
      display: flex;
      flex-flow: row wrap;
      text-align: center;
      background-color: red;
      width: auto;
      justify-content: center
    }
    .wrap {
      display: inline-flex;
    }
    .wrap > div {
      flex: 1;
      border: 1px solid grey;
    }
    .contact_img {
      width: 40px;
      height: 40px;
    }
    <div id="contact_flex_container">
      <div class="wrap">
    
        <div id="fb">
          <img src="http://lorempixel.com/image_output/abstract-q-c-50-50-5.jpg" class="contact_img">
          <h3>Lorem ipsum dolor sit.</h3>
        </div>
    
        <div id="yt">
          <img src="http://lorempixel.com/image_output/abstract-q-c-50-50-5.jpg" class="contact_img">
          <h3>Lorem ipsum.</h3>
        </div>
    
        <div id="mail">
          <img src="http://lorempixel.com/image_output/abstract-q-c-50-50-5.jpg" class="contact_img">
          <h3>Lorem</h3>
        </div>
      </div>

    【讨论】:

    • 这样做的问题是这些弹性项目的内容将具有不同的大小,保持它们宽度相同的唯一方法是使用 flex-basis 和 flex-grow。然后, justify-content 不起作用。还是我错了?
    • 嗯,这是问题的扩展......不,你不能使用这些属性保持项目的大小相同......不是那样......它是不是 flex-grow 是如何工作的。我怀疑你需要的是另一个包装器。让我想想。
    猜你喜欢
    • 2013-12-24
    • 2017-05-29
    • 2019-07-02
    • 2011-10-08
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2021-07-11
    相关资源
    最近更新 更多