2016-11-08 79 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

我做了列,而不是行,這就是爲什麼:) –