2017-12-13 6 views
1

私はCSSのフレキシボックスを使用して、この正確なUIを実現したい:フレックスボックスアイテムを複数行にすることはできますか?

enter image description here

私のDOMは次のようになります。その他の項目は短いながら、いくつかの項目が複数行であることが十分な長さであることを

<container> 
    <item>The</item> 
    <item>Quick</item> 
    <item>brown fox jumps over the lazy</item> 
    <item>dog</item> 
</container> 

をお知らせ彼らは同じ行にすべきである。

あり、このUIを達成するために、私が知っている唯一の方法だと、それは項目間の空白を除去することである:

<container> 
    <item>The</item><item>Quick</item><item>brown fox jumps over the lazy</item><item>dog</item> 
</container> 

<style> 
container { 
    max-width: 150px; 
    display: block; 
} 

item { 
    color: white; 
    padding: 7px; 
    line-height: 2.0; 
    display: inline; 
} 

item:nth-child(1) { 
    background: red; 
} 

item:nth-child(2) { 
    background: green; 
} 

item:nth-child(3) { 
    background: orange; 
} 

item:nth-child(4) { 
    background: blue; 
} 
</style> 

これは、2つのアカウントに望まれることに何かを残し:

  1. すべての項目を強制的に1行にすると、特に複雑なシナリオでは、DOMを読みにくくなります。
  2. 希望の高さになるには線の高さを変更する必要があります。

代わりにCSS Flexboxを使用してこの正確なUIを達成したいと思いますが、Flexboxにこのような複数の行を折り返す方法を見つけることができません。出来ますか?

+0

いいえ、それだけではフレキシボックスでは不可能ですが、スクリプトを追加する場合、スクリプトは各単語をラップすることができ、どこで、それを達成することができます。 – LGSon

答えて

0

あなたがflexboxを使って尋ねたことを達成し、同じhtml構造を維持するのは複雑な方法ですが、まったく可能ではありません。あなたは異なる行のcan't just break a flex-item to wrapです。ラップしたい場合は、最初にbe a seperate itemにする必要があります。

これを達成するためにどのように使用できるかを示すためにhtmlを変更しました。

container { 
 
    display: flex; 
 
    flex-wrap: wrap; 
 
} 
 

 
break { 
 
    flex-basis: 100%; 
 
    width: 0px; 
 
    height: 0px; 
 
    overflow: hidden; 
 
    display: inline-block; 
 
} 
 

 
item:nth-child(n+1) { 
 
    background: red; 
 
} 
 

 
item:nth-child(n+2) { 
 
    background: green; 
 
} 
 

 
item:nth-child(n+3){ 
 
    background: yellow; 
 
} 
 
item:nth-child(n+8){ 
 
    background: blue; 
 
}
<container> 
 
    <item>The</item> 
 
    <item>Quick</item> 
 
    <item>brown</item> 
 
    <break></break> 
 
    <item>fox jumps over the </item> 
 
    <break></break> 
 
    <item>lazy</item> 
 
    <item>dog</item> 
 
</container>

+0

"Brown"と "lazy"という言葉は、 "fox jump over the"と同じ要素の一部である必要があるので、この解決策は満足のいくものではないでしょうか。実際の生活では、内容はデータベースから来ています。 –

+0

@MartynChamberlin私が言ったように、あなたはflexboxを使ってアイテムを壊すことはできません。この方法ではうまくいかなかったが、必要に応じて回避する方法を示した。フレックスボックスはこの場合には理想的なものではない。 –

+0

意味があります。計量してくれてありがとう! –

関連する問題