显示弹性盒子居中但对齐项左对齐,类似于文本左对齐。

10
我正在尝试设置这些div居中显示,但保持它们的项目向左显示,就像text-align:left所做的那样。
这是我的示例:https://jsfiddle.net/gr5Lmos1/

#donateList {
  display: flex;
  justify-content: center;
  align-items: center;
  align-self: center;
  flex-direction: column;
  flex-wrap: wrap;
}

.donateItem {
  flex: 0 1 auto;
  align-items: flex-start;
  justify-content: flex-start;
  align-self: center;
}

.donateItem * {
  display: inline-block;
}

.donateItem p {
  vertical-align: bottom;
}

.donateItem img {
  height: 64px;
  width: 64px;
}
<div id="donateList">
  <div class="donateItem">
    <img src="/images/icons/bitcoin.png">
    <p>Bitcoin:</p>
    <p>fkewjhf;eiwhf;iewfhwehfewifhew</p>
  </div>
  <div class="donateItem">
    <img src="/images/icons/paypal.png">
    <p>Paypal:</p>
    <p>eijfhewfwifhefefewf</p>
  </div>
</div>

我正在尝试让所有donateItem的内容左对齐,但保持所有donateItem的div居中,就像它们现在的样子。
4个回答

16
如果您愿意在标记中包含另一个包装器,那么它很容易:使用 align-items: flex-start(或让其采用默认的 stretch 值)来为 #donateList 设置样式。而且垂直和水平居中新的包装 div。请查看以下演示(还删除了一些冗余的样式):

main { /* ADDED */
  display: flex;
  align-items: center;
  justify-content: center;
}
#donateList {
  display: flex;
  justify-content: center;
  align-items: flex-start; /* CHANGED */
  /*align-self: center;*/
  flex-direction: column;
  flex-wrap: wrap;
}

.donateItem {
  flex: 0 1 auto;
  /*align-items: flex-start;
  justify-content: flex-start;
  align-self: center;*/
}

.donateItem * {
  display: inline-block;
}

.donateItem p {
  vertical-align: bottom;
}

.donateItem img{
  height: 64px;
  width: 64px;
}
<main>
  <div id="donateList">
    <div class="donateItem">
      <img src="http://placehold.it/100x100">
      <p>Bitcoin:</p>
      <p>fkewjhf;eiwhf;iewfhwehfewifhew</p>
    </div>
    <div class="donateItem">
      <img src="http://placehold.it/100x100">
      <p>Paypal:</p>
      <p>eijfhewfwifhefefewf</p>
    </div>
  </div>
</main>


1
这很好,没想到会尝试那样做。我只是创建了一个新的包装器/容器来替换主函数。 - Erdss4

2
你只需要这样做:

#donateList
{ 
    margin: 0px auto;
    width: 50%;
    padding: 20px;
}

.donateItem.donateItem p中添加display:flex;#

#donateList

{
    margin: 0px auto;
    width: 50%;
    padding: 20px;
    
}

.donateItem
{
  flex: 0 1 auto;
  align-items: flex-start;
  justify-content: flex-start;
  align-self: center;
  display:flex;
}

.donateItem p
{
  vertical-align: bottom;
 display:flex;
}


.donateItem *
{
  display: inline-block;
}

.donateItem img
{
  height: 64px;
  width: 64px;
}
<div id="donateList">

<div class="donateItem">

  <img src="http://icons.iconarchive.com/icons/froyoshark/enkel/96/Bitcoin-icon.png">

  <p>Bitcoin:</p>

  <p>fkewjhf;eiwhf;iewfhwehfewifhew</p>

</div>

<div class="donateItem">

  <img src="http://axisj.com/assets/images/donate-how-paypal.png">

  <p>Paypal:</p>

  <p>eijfhewfwifhefefewf</p>

</div>


1

对于现代浏览器,通过将项目对齐方式更改为flex-start并使用width: max-content使容器宽度等于最长的项目,可以使用常规的margin:auto将其居中:

#donateList {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  flex-direction: column;
  width: max-content;
  margin: auto;
}

.donateItem {
  flex: 0 1 auto;
  align-items: flex-start;
  justify-content: flex-start;
}

.donateItem * {
  display: inline-block;
}

.donateItem p {
  vertical-align: bottom;
}

.donateItem img {
  height: 64px;
  width: 64px;
}
<div id="donateList">
  <div class="donateItem">
    <img src="/images/icons/bitcoin.png">
    <p>Bitcoin:</p>
    <p>fkewjhf;eiwhf;iewfhwehfewifhew</p>
  </div>
  <div class="donateItem">
    <img src="/images/icons/paypal.png">
    <p>Paypal:</p>
    <p>eijfhewfwifhefefewf</p>
  </div>
</div>

不幸的是,max-content 的浏览器支持远非理想, 所以 @kukkuz 带有额外包装器的解决方案可能更实用(除非容器的左对齐是您可以接受的优雅降级)。


1
这里有一个解决方案,但它有些不正规,容器的宽度需要根据具体情况进行调整。容器会获得以下设置以在页面中居中显示:
width: 50%;
margin: 0 auto;
overflow: visible;
white-space: nowrap;

...并且 flex 项目使用 align-self: flex-start; 实现在容器内左对齐:

#donateList {
  display: flex;
  justify-content: center;
  align-items: center;
  align-self: center;
  flex-direction: column;
  flex-wrap: wrap;
  width: 50%;
  margin: 0 auto;
  overflow: visible;
  white-space: nowrap;
}

.donateItem {
  flex: 0 1 auto;
  align-items: flex-start;
  justify-content: flex-start;
  align-self: flex-start;
}

.donateItem * {
  display: inline-block;
}

.donateItem p {
  vertical-align: bottom;
}

.donateItem img {
  height: 64px;
  width: 64px;
}
<div id="donateList">
  <div class="donateItem">
    <img src="/images/icons/bitcoin.png">
    <p>Bitcoin:</p>
    <p>fkewjhf;eiwhf;iewfhwehfewifhew</p>
  </div>
  <div class="donateItem">
    <img src="/images/icons/paypal.png">
    <p>Paypal:</p>
    <p>eijfhewfwifhefefewf</p>
  </div>
</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接