2016-11-08 118 views
2

我想要一个菜单​​,其中包含内容并且内容与其他菜单项对齐。如何对齐不同父母的div?

目前我有:

[- someth      something else] 
[- something   something else something] 
[- some     something else some] 

而且我希望它对准这样的:

[- someth   something else   ] 
[- something   something else something] 
[- some    something else some  ] 

这里是什么,我现在有代码,但我会怎么做它的方式我想要?

.menu { 
 
    width: 100%; 
 
} 
 
.menu-item { 
 
    display: flex; 
 
    justify-content: space-between; 
 
    align-items: center; 
 
} 
 
.wrapper2 { 
 
    display: flex; 
 
}
<div class="menu"> 
 

 
    <div class="menu-item"> 
 
    <div class="wrapper1">Someth</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p></p> 
 
    </div> 
 
    </div> 
 

 
    <div class="menu-item"> 
 
    <div class="wrapper1">Something</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p>something</p> 
 
    </div> 
 
    </div> 
 

 
    <div class="menu-item"> 
 
    <div class="wrapper1">Some</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p>some</p> 
 
    </div> 
 
    </div> 
 

 
</div>

JSFiddle

回答

1

我结束了使用jQuery来调整.wrapper2,并使用相同的代码,因为只有一个备用的CSS。

var size = 0; 
$('.wrapper2').each(function() { 
    if($(this).width() > size) 
    { 
     size = $(this).width(); 
    } 
}); 
$('.price-wrapper2').width(size); 
+0

它可以用纯粹的CSS来完成,看我的答案@Wiliam –

4

这样的事情。

柔性容器扩展项目以填充可用空间,或缩小它们以防止溢出。 flex: 1;将两个相等的部分

.menu { 
 
    width: 100%; 
 
} 
 
.menu-item { 
 
    display: flex; 
 
    justify-content: space-between; 
 
    align-items: center; 
 
} 
 
.wrapper2 { 
 
    display: flex; 
 
    width: 50%; 
 
} 
 
.wrapper2 > p { 
 
    flex: 1; 
 
} 
 
.wrapper2 > p:last-child { 
 
    text-align: right; 
 
}
<div class="menu"> 
 

 
    <div class="menu-item"> 
 
    <div class="wrapper1">Someth</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p></p> 
 
    </div> 
 
    </div> 
 

 
    <div class="menu-item"> 
 
    <div class="wrapper1">Something</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p>something</p> 
 
    </div> 
 
    </div> 
 

 
    <div class="menu-item"> 
 
    <div class="wrapper1">Some</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p>some</p> 
 
    </div> 
 
    </div> 
 

 
</div>

+0

感谢答案。我试过使用'width:50%'或其他值,但它不适合移动。有没有另一种方法来做到这一点? – William

+0

第一个评论是对另一个答案,抱歉关于混乱,但我会尝试'文本对齐:正确' – William

+0

解决方案不是我想要的,所以我最终使用jQuery来使所有相同的'宽度“大小,并将保留'justify-content:space-between'作为后备CSS。谢谢你! – William

3

代替主挠性容器,它的空间的柔性物品到所述容器的相对端,在柔性使用flex: 1使用justify-content: space-between的划分柔性框物品,这迫使他们平等地共享容器空间。

.menu { 
 
    width: 100%; 
 
} 
 
.menu-item { 
 
    display: flex; 
 
    /* justify-content: space-between; */ 
 
    align-items: center; 
 
} 
 
.menu-item > * { 
 
    flex: 1;      /* new */ 
 
    border: 1px dashed black; 
 
} 
 
.wrapper2 { 
 
    display: flex; 
 
    justify-content: space-between; /* optional; just for demo */ 
 
}
<div class="menu"> 
 
    <div class="menu-item"> 
 
    <div class="wrapper1">Someth</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p></p> 
 
    </div> 
 
    </div> 
 
    <div class="menu-item"> 
 
    <div class="wrapper1">Something</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p>something</p> 
 
    </div> 
 
    </div> 
 
    <div class="menu-item"> 
 
    <div class="wrapper1">Some</div> 
 
    <div class="wrapper2"> 
 
     <p>something else</p> 
 
     <p>some</p> 
 
    </div> 
 
    </div> 
 
</div>

+0

这是一个很好的答案,但较大的'.wrapper2'应该触及'.menu-item'的末尾。有没有办法完成它?我试图将'flex:10'到'.wrapper1'和'flex:1'用于'.wrapper2',但它以我现在使用的相同方式结束。 – William

+0

对。它不适用于不同的'flex-grow'值。尝试使用'flex-basis'来代替:https://jsfiddle.net/g1j38jph/3/ –

+1

解决方案不是我想要的解决方案,所以我最终使用jQuery来制作所有“宽度”大小并保持不变'justify-content:space-between'作为后备CSS。谢谢你! – William

0

你只需要使用的CSS正确的比例,这里的链接:JSFiddle

.menu, 
.menu-item:first-of-type p{ 
    width: 100%; 
} 
.menu-item { 
    width:100%; 
    display: flex; 
    justify-content: space-between; 
    align-items: center; 
} 
.wrapper2 { 
    display: flex; 
} 
.wrapper1, 
.wrapper2, 
.menu-item:nth-of-type(2) p, 
.menu-item:nth-of-type(3) p { 
    width:50%; 
} 
.menu-item:nth-of-type(2) p:nth-of-type(2), 
.menu-item:nth-of-type(3) p:nth-of-type(2) { 
    text-align:right; 
} 
0

为什么不干脆

.menu { 
 
    width: 100%; 
 
    display: flex; 
 
} 
 

 
.wrapper1, .wrapper2 { 
 
    width: 100%; 
 
    display: inline-block; 
 
} 
 

 
.menu-item:nth-child(2) { 
 
    text-align: right; 
 
    padding-right: 5px; 
 
}
<div class="menu"> 
 
    <div class="menu-item"> 
 
     <div class="wrapper1"> 
 
      Someth 
 
     </div> 
 
     <div class="wrapper2"> 
 
      <p> 
 
       something else 
 
      </p> 
 
      <p> 
 
      </p> 
 
     </div> 
 
    </div> 
 
    <div class="menu-item"> 
 
     <div class="wrapper1"> 
 
      something else 
 
     </div> 
 
     <div class="wrapper2"> 
 
      <p> 
 
       something else 
 
      </p> 
 
      <p> 
 
       something else 
 
      </p> 
 
     </div> 
 
    </div> 
 
    <div class="menu-item"> 
 
     <div class="wrapper1"> 
 
      Some 
 
     </div> 
 
     <div class="wrapper2"> 
 
      <p> 
 
       something else 
 
      </p> 
 
      <p> 
 
       some 
 
      </p> 
 
     </div> 
 
    </div> 
 
</div>

+0

感谢艾伦,但这不是一个很好的方法,如果我的第一个或最后一个'.menu-item'是较大的呢?如果我改变了文本,每次都必须更改CSS,或者如果我有几个项目,我会疯狂地检查一个更大的文件。不知何故,你的代码使第三个'.menu-item'' Some'文本向上移动。 – William

+0

我做了列,而不是行,这就是为什么:) –