由于填充,Flexbox 无法使文本居中

Posted

技术标签:

【中文标题】由于填充,Flexbox 无法使文本居中【英文标题】:Flexbox cannot center text because of padding 【发布时间】:2018-08-04 02:50:24 【问题描述】:

我正在尝试创建一个 flexbox 网格,当内容超过宽度时会自动换行。我正在使用 flexbox wrap 来实现这一点。问题是内容没有正确对齐,因为所有单词不包含相同数量的字符。

我正在努力实现这个设计,乍一看似乎很简单:

我最好的尝试是这样的:

我的代码是:

.bg 
  width: 990px;
  padding: 124px;
  height: auto;
  border-radius: 6px;
  background-color: #fff;
  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.5);


.flexgrid 
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  margin: 0 auto;
  word-wrap: break-word;


.wrap 
  display: flex;
  flex-direction: column;
  text-align: center;
  border-top: 1px solid black;
  padding: 33px;
  flex: 1;
  flex-basis: auto;


return (
      <div className=classes.container>
        <div className=classes.bg>
          <h1>My Flashcards</h1>
          <br />
          <div className=classes.flashcardcontainer>
            <div className=classes.flexgrid>
              decks.map((deck, index) => 
                return (
                  <FlashcardDeck
                    label=deck.label
                    lastItem=decks.length === index + 1
                    key=index
                  />
                );
              )
            </div>
          </div>
        </div>
      </div>
    );
  


const flashCardDeck = props => 
  return (
    <div className=classes.wrap>
      <img src=deckImage />
      <p>props.label</p>
    </div>
  );
;

【问题讨论】:

【参考方案1】:

将 .wrap 选择器的 flex-basis 值更改为 flex-basis: 25%

.wrap 
  display: flex;
  flex-direction: column;
  text-align: center;
  border-top: 1px solid black;
  padding: 33px;
  flex: 1;
  flex-basis: 25%;

【讨论】:

谢谢,我试试看。 它起作用了,但我不知道它为什么起作用。它反应灵敏,应有尽有。如果你有时间,你能向我解释一下它为什么有效吗? 您的布局是 4 列,这就是我们添加“flex-basis: 25%;”的原因.总弯曲宽度为 100%。我认为您最好阅读此链接,它将对您有很大帮助css-tricks.com/snippets/css/a-guide-to-flexbox 非常感谢。【参考方案2】:

你应该设置flex-basis: 0

.wrap 
  display: flex;
  flex-direction: column;
  text-align: center;
  border-top: 1px solid black;
  padding: 33px;
  flex: 1;
  flex-basis:0;

.flex-contain
display: flex;


.flex
flex: 1;
flex-basis: auto;
border: 1px solid green;

.flex-plus-basis
flex-basis: 0;
<h3>Without flex-basis:0</h3>
<div class="flex-contain">
<div class="flex">
<p>Some content in this one</p>
</div>
<div class="flex">
<p>Some content in this one</p>
</div>
<div class="flex">
<p>Some awesome and longer content in this one</p>
</div>
<div class="flex">
<p>Some more content in this one</p>
</div>
<div class="flex">
<p>Some other content in this one</p>
</div>
</div>

<h3>With flex-basis:0</h3>

<div class="flex-contain">
<div class="flex flex-plus-basis">
<p>Some content in this one</p>
</div>
<div class="flex flex-plus-basis">
<p>Some content in this one</p>
</div>
<div class="flex flex-plus-basis">
<p>Some awesome and longer content in this one</p>
</div>
<div class="flex flex-plus-basis">
<p>Some more content in this one</p>
</div>
<div class="flex flex-plus-basis">
<p>Some other content in this one</p>
</div>
</div>

【讨论】:

我将 flex-basis 更改为 0,但这会导致文本在单列中换行。 当您拥有flex: 1 时,您将自动拥有flex-basis: 0。无需重复。 ***.com/q/48955596/3597276 flex-basis 实际上默认为自动:developer.mozilla.org/en-US/docs/Web/CSS/flex-basis 你是对的,因为它是 flex-basis,但是将 flex-basis 设置为 25% 就可以了。

以上是关于由于填充,Flexbox 无法使文本居中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 flexbox 使菜单居中 [关闭]

在元素的一部分上居中 Flexbox

将 PHPSpreadsheet 中的所有文本居中并使单元格扩展以填充上下文

Python3基础 字符串 center 左右填充空格,达到指定长度,使文本居中

居中:在边界到容器末端之后? [复制]

如何使用 Flexbox 使一个弹性项目居中对齐并右对齐另一个