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

私は.wrapper2のサイズを変更するjQueryを使用して唯一の代替CSSと同じコードを使用して終了しました。

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

これは純粋なCSSで行うことができます。私の答えは@Wiliam –

4

このような何か。

フレックスコンテナは、空き領域を埋めるためにアイテムを展開します。また、オーバーフローを防ぐためにコンテナを縮小します。 flex: 1;は、2つの等しい部分

.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

最初のコメントは別の答えでした。混乱して申し訳ありませんが、私は 'text-align:right'を試してみます – William

+0

解決策は私が望んでいたものではなかったので、jQueryを使って同じ' 'justise-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'の最後に触れるはずです。それを達成する方法はありますか?私は '.wrapper1'と' flex:1'を '.wrapper2'に' flex:10 'しようとしましたが、今までと同じ方法で終了します。 – William

+0

異なる 'flex-grow'値では動作しません。代わりに 'flex-basis'を使用してみてください:https://jsfiddle.net/g1j38jph/3/ –

+1

解決策は私が望んでいたものではなかったので、jQueryを使ってすべて同じ' width'サイズを作り、 '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を変更する必要があります。複数のアイテムがある場合は、より大きなものを確認するために狂ってしまいます。そして、どういうわけか、あなたのコードは3番目の '.menu-item''いくつか'のテキストを盛り上げました。 – William

+0

私は行ではなく、colsを作っています。その理由は:) –

関連する問題