フレックスボックスで作成された2列のレイアウトがあります。
右側の列には2つの行があり、最初の行にはヘッダーが含まれ、2番目の行にはページコンテンツが含まれています。
ヘッダー内には、3つの列、ボタン、いくつかのテキスト、およびボタンがあります。
ボタンを列の左右に配置して、テキストが追加のスペースを占めるようにします。
最後に、テキストにwhite-space:nowrap
およびtext-overflow:Ellipsis
プロパティを使用して、長いタイトルを切り捨てます。
私の問題はこれです:flexbox that isnested in another flexbox 、このフィドルに示すように:
http://jsfiddle.net/maxmumford/rb4sk3mz/3/
.container {
display: flex;
height: 100vh;
}
.left {
width: 200px;
background-color: yellow;
}
.right {
flex: 1;
background-color: blue;
color: white;
}
.header {
background: red;
color: white;
display: flex;
flex-direction: row;
}
.header .content {
white-space: nowrap;
flex: 0 1 auto;
text-overflow: Ellipsis;
overflow: hidden;
min-width: 0;
}
.header .buttons {
background: green;
flex: 1 0 auto;
}
.header .content:hover {
white-space: normal;
}
<div class="container">
<div class="left">
content left
</div>
<div class="right">
<div class="header">
<div class="buttons">buttons</div>
<div class="content">
This content is really long and should wrap with ellipses, but for some reason it doesn't work when it's nested in a container with display: flex
</div>
<div class="buttons">buttons</div>
</div>
content right
</div>
</div>
ただし、ヘッダーがフレックスボックス内にネストされていない場合も、まったく同じコードが機能します。
http://jsfiddle.net/maxmumford/p7115f2v/1/
.header {
background: red;
color: white;
display: flex;
flex-direction: row;
}
.header .content {
white-space: nowrap;
flex: 0 1 auto;
text-overflow: Ellipsis;
overflow: hidden;
min-width: 0;
}
.header .buttons {
background: green;
flex: 1 0 auto;
}
<div class="header">
<div class="buttons">buttons</div>
<div class="content">
This content is really long and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long
and is wrapped correctly... This content is really long and is wrapped correctly... This content is really long and is wrapped correctly...
</div>
<div class="buttons">buttons</div>
</div>
最初のフィドルで欲しいものをどのように達成できますか?
ありがとう
コードに2つの問題があり、省略記号が機能しません。
div.right
にはdiv.header
が含まれ、ボタンとテキストが含まれます。
div.right
は、メインコンテナー(.container
)内のフレックスアイテムです。
デフォルトでは、 フレックスアイテムは、そのコンテンツのサイズ より小さくすることはできません。フレックスアイテムの初期設定はmin-width: auto
です。
これは、折り返しではないテキストの長さが、親フレックスアイテムの最小サイズを設定することを意味します。フレックスアイテムがコンテンツを超えて縮小できるようにする1つの方法は、フレックスアイテムをmin-width: 0
に設定することです。
これは.content
フレックスアイテムに対して既に行っていますが、.right
アイテムにも設定する必要があります。
.content
要素をflex: 0 1 auto
に設定しました。
これは、コンテンツのサイズ(flex-basis: auto
)を使用するようにflexアイテムに指示します。テキストはサイズを設定します。
代わりに、幅を0に設定し、必要に応じてフレックスコンテナーにスペースを分散させます。 これはflex: 1 1 0
で実行できます。これはflex: 1
と同じです。
.container {
display: flex;
height: 100vh;
}
.left {
width: 200px;
background-color: yellow;
}
.right {
flex: 1;
background-color: blue;
color: white;
min-width: 0; /* NEW */
}
.header {
background: red;
color: white;
display: flex;
flex-direction: row;
}
.header .content {
white-space: nowrap;
flex: 1; /* ADJUSTMENT */
text-overflow: Ellipsis;
overflow: hidden;
min-width: 0;
}
.header .buttons {
background: green;
flex: 1 0 auto;
}
.header .content:hover {
white-space: normal;
}
<div class="container">
<div class="left">
content left
</div>
<div class="right">
<div class="header">
<div class="buttons">buttons</div>
<div class="content">
This content is really long and should wrap with ellipses, but for some reason it doesn't work when it's nested in a container with display: flex
</div>
<div class="buttons">buttons</div>
</div>
content right
</div>
</div>
の値:
white-space: nowrap;
text-overflow: Ellipsis;
overflow: hidden;
要素のコンテンツがその幅を超えている場合にのみ機能します。
.header .content
の幅を設定できます:
.header .content {
width: 50%;
}
そしてそれはあなたが期待するように機能します:
http://jsfiddle.net/t82pqks4/