显示 flexbox 居中但左对齐项目像文本左对齐
Displaying flexbox centered but align items left like text align left
我正在尝试将这些 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 中心不变。
如果您愿意在标记中包含另一个 wrapper,这很容易:
对 #donateList
使用 align-items: flex-start
(或让它采用默认的 stretch
值)
垂直和水平居中对齐新包装 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>
你必须这样做:
#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>
这是一个解决方案,但它有点 hacky,需要根据特定情况调整容器宽度。容器获取这些设置以在主体内居中:
width: 50%;
margin: 0 auto;
overflow: visible;
white-space: nowrap;
...弹性项目得到 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>
对于现代浏览器,将项目对齐方式更改为 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
的浏览器支持是 far from ideal,所以@kukkuz 的带有额外包装器的解决方案可能更实用(除非容器的左对齐对你来说是可以接受的优雅降级) .
我正在尝试将这些 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 中心不变。
如果您愿意在标记中包含另一个 wrapper,这很容易:
对
#donateList
使用 垂直和水平居中对齐新包装 div。
align-items: flex-start
(或让它采用默认的 stretch
值)
请参阅下面的演示(还删除了一些 冗余 样式):
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>
你必须这样做:
#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>
这是一个解决方案,但它有点 hacky,需要根据特定情况调整容器宽度。容器获取这些设置以在主体内居中:
width: 50%;
margin: 0 auto;
overflow: visible;
white-space: nowrap;
...弹性项目得到 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>
对于现代浏览器,将项目对齐方式更改为 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
的浏览器支持是 far from ideal,所以@kukkuz 的带有额外包装器的解决方案可能更实用(除非容器的左对齐对你来说是可以接受的优雅降级) .