文本脱离 flexbox 容器

Mdd*_*Mdd 4 css flexbox

我一直在学习用于布局的 flexbox,但一直无法弄清楚为什么文本没有包裹在 flex-item 内。文本像这样从容器中脱离出来:

损坏的布局的图像

html,
body {
  height: 100%;
}

.main {
  max-width: 10em;
  margin: 1em auto;
}

.flex-row {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 12em;
  border: 1px solid red;
}

.flex-column {
  display: flex;
  flex-direction: column;
}

.flex-item {
  padding: 5px;
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div class="main">
  <div class="flex-row">
    <div class="flex-column">
      <div class="flex-item">
        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
      </div>
      <div class="flex-item">
        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      </div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l_B 8

您的文本之间没有空格。

word-break属性的默认值为normal,这意味着连续的文本行没有换行符。

由于这些原因,您的文本不会包裹和溢出容器。

添加word-break: break-all.flex-item.

html,
body {
  height: 100%;
}

.main {
  max-width: 10em;
  margin: 1em auto;
}

.flex-row {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 12em;
  border: 1px solid red;
}

.flex-column {
  display: flex;
  flex-direction: column;
}

.flex-item {
  padding: 5px;
  border: 1px solid black;
  word-break: break-all; /* new */
}
Run Code Online (Sandbox Code Playgroud)
<div class="main">
  <div class="flex-row">
    <div class="flex-column">
      <div class="flex-item">
        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
      </div>
      <div class="flex-item">
        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      </div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

来自 MDN:

word-break

word-breakCSS属性指定浏览器是否应插入换行符无论文本,否则溢出其内容框。

相反,overflow-wrap,word-break将在文本溢出其容器的确切位置创建一个中断(即使将整个单词放在自己的行上会否定中断的需要)。


价值观

normal

使用默认的换行规则。

break-all

为防止溢出,应在任意两个字符之间插入分词(不包括中文/日文/韩文文本)。

keep-all

中文/日文/韩文 (CJK) 文本不应使用分词符。非 CJK 文本行为与正常相同。


实际上还有另一个原因——弹性盒特定的——弹性项目溢出容器的原因。这是解释:

要包含的项(无需文本换行),你可以申请min-width: 0overflow: hiddenoverflow: auto.flex-column

html,
body {
  height: 100%;
}

.main {
  max-width: 10em;
  margin: 1em auto;
}

.flex-row {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 12em;
  border: 1px solid red;
}

.flex-column {
  display: flex;
  flex-direction: column;
  overflow: hidden; /* new */
  /* overflow: auto; */
  /* min-width: 0; */
}

.flex-item {
  padding: 5px;
  border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div class="main">
  <div class="flex-row">
    <div class="flex-column">
      <div class="flex-item">
        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
      </div>
      <div class="flex-item">
        bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
      </div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)