Flexbox Align-Items溢出文本在顶部被截断

A. *_*Lau 4 html css overflow css3 flexbox

我遇到以下情况,当文本不再适合容器时,该文本会在顶部被截断。我该如何解决?如果文本比容器小,我仍然希望文本居中,并且我不能更改容器的大小。

div {
  display: flex;
  align-items: center;
  width: 100px;
  height: 50px;
  overflow: auto;
  word-break: break-word;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  sdjhfkahsdkjfadsfhk jaskjfsj fsldflkasjklsjflakj flksjfakljflksjflkasfjklasjflfd
</div>
Run Code Online (Sandbox Code Playgroud)

Sti*_*ers 5

如果您将文本包装到另一个标签中,并设置margin: auto 0;它似乎效果很好。

div {
  display: flex;
  width: 100px;
  height: 50px;
  overflow: auto;
  word-break: break-word;
  background: pink;
  margin-bottom: 20px;
}

span {
  margin: auto 0;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <span>sdjhfkahsdkjfadsfhk jaskjfsj fsldflkasjklsjflakj flksjfakljflksjflkasfjklasjflfd</span>
</div>

<div>
  <span>sdjhfkah</span>
</div>
Run Code Online (Sandbox Code Playgroud)


LGS*_*Son 5

这里的问题是由以下事实引起的:当使用align-items(或justify-content)将flex行项目居中时,根据设计,它将在其顶部/底部(或左侧/右侧)溢出。

为了解决这个问题safe,引入了一个新关键字,尽管还没有很多浏览器支持它。


另一种选择是使用自动页边距,尽管您不能使用给定的标记,因为文本没有内部包装器(嗯,它具有匿名包装器,尽管我们无法使用CSS选择器作为目标) 。

因此,通过添加一个内部包装器(用wrapper摆弄小提琴),您可以使用自动边距,这在这里有很好的解释:


但是有时我们只是无法更改标记,而这是一个小技巧,可以使用伪元素,并在其上使用自动边距。

要使文本垂直居中,我们还需要将flex方向设为,column以便在上方/下方呈现伪内容。

堆栈片段

div {
  display: flex;
  flex-direction: column;         /*  added  */
  width: 100px;
  height: 50px;
  overflow: auto;
  word-break: break-word;
  border: 1px solid gray;
}

div::before, div::after {
  content: '';
}
div::before {
  margin-top: auto;               /*  added  */
}
div::after {
  margin-bottom: auto;            /*  added  */
}
Run Code Online (Sandbox Code Playgroud)
<div>
  sdjhfkahsdkjfadsfhk jaskjfsj fsldflkasjklsjflakj flksjfakljflksjflkasfjklasjflfd
</div>

<div>
  sdjhf
</div>
Run Code Online (Sandbox Code Playgroud)