【问题标题】:Make fixed width flexbox items wrap correctly使固定宽度的 flexbox 项目正确包装
【发布时间】:2015-07-16 09:45:42
【问题描述】:

如果弹性项目在 Google Chrome 中的宽度是固定的,我将无法正确包装它们。但是,当使用基于百分比的宽度时,一切都会正确换行。

如何使用固定宽度的项目进行这项工作?

参见示例: http://codepen.io/anon/pen/wajWLz

* {
  box-sizing: border-box;
  font-family: Arial;
}
.wrapper {
  width: 300px;
  background: #eee;
  border: solid #ddd 1px;
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -moz-box-wrap: wrap;
  -webkit-box-wrap: wrap;
  -webkit-flex-wrap: wrap;
  -ms-flexbox-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.item {
  background: #ddd;
  border: solid 1px #aaa;
  width: 100px;
  /* Doesn't wrap correctly */
}
.wrapper-second .item {
  width: 33.333333%
  /* Wraps correctly */
}
<p>The wrapper is 300px wide, each item is <strong>100px</strong> wide</p>

<div class="wrapper">
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
</div>

<p>you should see 3 items per row,
  <br />Chrome however wraps after the 2nd item (wraps too soon).</p>

<p>when you change the item width to <strong>33.333333%</strong>, it however wraps correctly.</p>

<div class="wrapper wrapper-second">
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
  <div class="item">item</div>
</div>

<p><strong>Question:</strong> how can I make flexbox wrap fixed width items correctly?</p>

【问题讨论】:

    标签: css flexbox word-wrap fixed-width


    【解决方案1】:

    您的问题是您已将所有元素设置为box-sizing: border-box;。这意味着.wrapperwidth 将包括边框宽度。

    修复任一:

    • box-sizing: content-box; 添加到.wrapper
    • .wrapper 上将width: 300px; 更改为width: 302px;

    * {
      box-sizing: border-box;
      font-family: Arial;
    }
    .wrapper {
      box-sizing: content-box;
      width: 300px;
      background: #eee;
      border: solid #ddd 1px;
      display: -webkit-box;
      display: -moz-box;
      display: -ms-flexbox;
      display: -webkit-flex;
      display: flex;
      -moz-box-wrap: wrap;
      -webkit-box-wrap: wrap;
      -webkit-flex-wrap: wrap;
      -ms-flexbox-wrap: wrap;
      -ms-flex-wrap: wrap;
      flex-wrap: wrap;
    }
    .item {
      background: #ddd;
      border: solid 1px #aaa;
      width: 100px;
      /* Doesn't wrap correctly */
    }
    .wrapper-second .item {
      width: 33.333333%
      /* Wraps correctly */
    }
    <p>The wrapper is 300px wide, each item is <strong>100px</strong> wide</p>
    
    <div class="wrapper">
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
    </div>
    
    <p>you should see 3 items per row,
      <br />Chrome however wraps after the 2nd item (wraps too soon).</p>
    
    <p>when you change the item width to <strong>33.333333%</strong>, it however wraps correctly.</p>
    
    <div class="wrapper wrapper-second">
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
      <div class="item">item</div>
    </div>
    
    <p><strong>Question:</strong> how can I make flexbox wrap fixed width items correctly?</p>

    【讨论】:

      【解决方案2】:

      border-box 语句似乎有问题。

      如果您将其从通用选择器中删除并专门应用于子项,它似乎可以工作。

      .wrapper {
        width: 300px;
        background: #eee;
        border: solid #ddd 1px;
      
        display: -webkit-box;
        display: -moz-box;
        display: -ms-flexbox;
        display: -webkit-flex;
        display: flex;
      
        -moz-box-wrap: wrap;
        -webkit-box-wrap: wrap;
        -webkit-flex-wrap: wrap;
        -ms-flexbox-wrap: wrap;
        -ms-flex-wrap: wrap;
        flex-wrap: wrap;
      
      }
      
      .item {
        background: #ddd;
        border: solid 1px #aaa;
      
        box-sizing: border-box;
      
        width: 100px;
      
      
      
      }
      <div class="wrapper">
        <div class="item">item</div>
        <div class="item">item</div>
        <div class="item">item</div>
        <div class="item">item</div>
        <div class="item">item</div>
        <div class="item">item</div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-13
        • 1970-01-01
        • 2018-05-26
        • 2015-08-09
        • 2020-11-16
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多