【问题标题】:Word-wrap in flexbox is not respecting 100% width limit [duplicate]flexbox 中的自动换行不遵守 100% 宽度限制 [重复]
【发布时间】:2018-05-28 23:37:00
【问题描述】:

我有 2 个 flexbox 和一个里面的 flexbox。 如果文本大于父级,我希望文本分成多行。出于某种原因,如果我发送一个固定值(例如 250 像素)作为宽度,它会起作用。如果我将宽度设置为 100%,它不会分成多行。

这是我的代码:

#flexparent {
  display: flex
}

#flexchild1 {
  flex: 1;
  background-color: green;
}

#flexchild2 {
  flex: 1;
  background-color: red;
  display: flex;
  flex-flow: column
}

#flexchild3 {
  background-color: purple;
  width: 100%;
  word-wrap: break-word;
}
<div id="flexparent">
      <div id="flexchild1">
        FLEXCHILD1
      </div>
      <div id="flexchild2">
        FLEXCHILD2
        <div id="flexchild3">
 ThisisasuperlongsentenceLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtstLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtst
        </div>
      </div>
    </div>

这就是我想要的,但长句中没有空格。

#flexparent {
  display: flex
}

#flexchild1 {
  flex: 1;
  background-color: green;
}

#flexchild2 {
  flex: 1;
  background-color: red;
  display: flex;
  flex-flow: column
}

#flexchild3 {
  background-color: purple;
  word-wrap: break-word;
}
<div id="flexparent">
      <div id="flexchild1">
        FLEXCHILD1
      </div>
      <div id="flexchild2">
        FLEXCHILD2
        <div id="flexchild3">
 Thisisasuperlongsentence Loremipsum dolorsitametcon secteturadipisicingelitAsperi   resnecessitatibusneu eodioImpeditistenes ciuntescorru ptiessecumrepudia ndaequidolor umIllumtempori busquoerrorcumqu eeximpeditmagnam Lore mipsumdo lorsitam etconsecteturadipisicing elitAsperioresne cessitatibusneueodi oImpeditisten esciuntescorruptiessecumrepudia ndaequidolorumIll umtemporibusq uoerrorc umqueeximpe ditmagn amtstLoremipsu mdolorsitametcon secteturadipisici ngelitAsperio resnecessitati busn 
        </div>
      </div>
    </div>

这是我为此制作的代码笔。

【问题讨论】:

  • width: 100% 必须继续#flexparent,而不是#flexchild3,当父母被允许成长时,孩子身上没有width: 100% (flex: 1 on #flexchild2)到无穷大。
  • 您只需将min-width: 0 添加到#flexchild2,如下@LGSon 所示。这是一个完整的解释:stackoverflow.com/q/36247140/3597276
  • 将 word-break:break-all 添加到您的第一个 sn-p 之后,或者改为 word-wrap ... 并查看它是否有效。至少在FF中。 codepen.io/gc-nomade/pen/qpdVLL
  • @LGSon 不确定最小宽度是这里的一件事(并且重复):codepen.io/gc-nomade/pen/qpdVLL 它与布局有关,但也与使用的规则有关。在这里你可能只需要分词。
  • @G-Cyr word-break:break-all; 的缺点是它也破坏了不恰当的词,即 i.a.发生在 Chrome 中,因为这里的问题实际上是隐含的最小尺寸,所以最好以正确的方式解决它。

标签: html css flexbox word-wrap


【解决方案1】:

这是一个 min-width 问题,其中弹性项目不能小于其内容。

min-width 的默认值是auto,在这种情况下它发生在弹性项目#flexchild2

给它min-width: 0 它会起作用的。

另外,不需要width: 100%,因为弹性“列”项的align-items 默认为stretch,因此会自动占用其父项的全宽,并且可以删除。

堆栈sn-p

#flexparent {
  display: flex
}

#flexchild1 {
  flex: 1;
  background-color: green;
}

#flexchild2 {
  flex: 1;
  background-color: red;
  display: flex;
  flex-flow: column;
  min-width: 0;                   /*  added  */
}

#flexchild3 {
  background-color: purple;
  /*width: 100%;                      removed  */
  word-wrap: break-word;
}
<div id="flexparent">
      <div id="flexchild1">
        FLEXCHILD1
      </div>
      <div id="flexchild2">
        FLEXCHILD2
        <div id="flexchild3">
 ThisisasuperlongsentenceLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtstLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtst
        </div>
      </div>
    </div>

【讨论】:

    【解决方案2】:

    问题在于基于百分比的宽度是基于直接父级的。如果直接父级没有width,则子级无法知道任意值的100% 是什么。 flex: 1 是包含flex-grow: 1 的简写,这意味着#flex2 可以无限增长而无需设置此width 约束。

    基于百分比的宽度冒泡直到已知固定的width,因此您所要做的就是设置100%#flexchild2width 以及#flexchild3 继承#flexparent的宽度:

    这可以在下面看到:

    #flexparent {
      display: flex;
    }
    
    #flexchild1 {
      flex: 1;
      background-color: green;
    }
    
    #flexchild2 {
      flex: 1;
      background-color: red;
      display: flex;
      flex-flow: column;
      width: 100%;
    }
    
    #flexchild3 {
      background-color: purple;
      width: 100%;
      word-wrap: break-word;
    }
    <div id="flexparent">
          <div id="flexchild1">
            FLEXCHILD1
          </div>
          <div id="flexchild2">
            FLEXCHILD2
            <div id="flexchild3">
     ThisisasuperlongsentenceLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtstLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtst
            </div>
          </div>
        </div>

    但是,请注意,由于您使用了两列,您可能希望将 width 指定为 100%,并将您的两列分别设置为 20%80%。请注意,#flexchild3 仍然继承 width#flexchild2100%(即 80%width#flexparent):

    #flexparent {
      display: flex;
      width: 100%;
    }
    
    #flexchild1 {
      flex: 1;
      background-color: green;
      width: 20%;
    }
    
    #flexchild2 {
      flex: 1;
      background-color: red;
      display: flex;
      flex-flow: column;
      width: 80%;
    }
    
    #flexchild3 {
      background-color: purple;
      width: 100%;
      word-wrap: break-word;
    }
    <div id="flexparent">
          <div id="flexchild1">
            FLEXCHILD1
          </div>
          <div id="flexchild2">
            FLEXCHILD2
            <div id="flexchild3">
     ThisisasuperlongsentenceLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtstLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamLoremipsumdolorsitametconsecteturadipisicingelitAsperioresnecessitatibusneueodioImpeditistenesciuntescorruptiessecumrepudiandaequidolorumIllumtemporibusquoerrorcumqueeximpeditmagnamtst
            </div>
          </div>
        </div>

    希望这会有所帮助! :)

    【讨论】:

    • 基于百分比的宽度不会受到基于高度的相同问题的影响,正如您在这个小提琴中看到的那样 - https://jsfiddle.net/58cqrLw0/ - 例如width: 50% 工作得很好。
    • 另外值得检查的是没有设置 white-space: nowrap;
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2017-12-19
    • 2022-11-13
    • 2022-10-18
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多