いくつかの固定サイズの「前」および「後」コンテンツを持つ div コンテナーがあり、メイン コンテンツが中央に挟まれています。メイン コンテンツは基本的にラベルと番号で構成されています。これはサンプル付きのjsfiddleリンクです(コードも下にコピーされています-目に見えるコントラストのために色を追加しました)。
ワイヤーフレームのモックアップ:
------------------------------------------
| A | Variable Sized Content | 123 | B |
------------------------------------------
A
およびB
は前後のコンテンツです。テキストと数値は、十分なスペースがない場合、コンテンツが縮小され、省略記号で切り捨てられるという考えで、可変サイズであることを意図しています。
---------------------------------
| A | Variable Siz... | 123 | B |
---------------------------------
十分なスペースがある場合、余分なスペースは数字と の間に入りB
ます:
-----------------------------------------------------
| A | Variable Sized Content | 123 | B |
-----------------------------------------------------
私が今それを機能させている方法は、クラスouterDiv
の を設定する Javascript でサイズ変更リスナーをオンにすることです。これはコンテンツ div の最小サイズも管理するため、さらに縮小すると数値も省略されます。 max-width
member-text
私が抱えている問題は、Javascript を使用せずmax-width
にこれを機能させようとすることです。すべての要素を常に変更するのはかなりぎこちない/遅いです (サンプルでは 2 つのアイテムしか表示されませんが、本番環境ではこれは多くのアイテムのリストにあります)。これにより、他のウィジェットのサブコンポーネントとして使用するための構造の移植性が低下します。機能するようにリファクタリングできますが、それには時間がかかります。「より正しい」解決策は、可能な場合は CSS を使用することです。
これをシミュレートするのに最も近かったのは、100% と約85% に設定max-width
することでした。これは、outerDiv の幅の範囲がデフォルト (230 ~ 290ish) に適しているように見えますが、それを超えるとうまくいきません (間隔が多すぎる/小さすぎる)。間違った部分で)。member-text
max-width
member-token
編集:display: table
また、ルート div で(およびtable-row
/table-cell
を使用table-layout: fixed
して divを試しました。サイズ変更されたコンテンツ (テキスト) ですが、この場合は 2 つ (モックアップの数字で表されるバブル テキスト) がありますが、この戦略では動的にサイズ変更された複数の列は許可されていないようです。
これが私の質問につながります-CSSだけでこの種のことを行うことさえ可能ですか? もしそうなら、どのように? 問題を単純化するために数値が固定幅であると仮定しても、これはJavascriptなしでは不可能のようです...
コードサンプルは次のとおりです(問題をデモするための単純化された例)
HTML:
<div class="outerDiv">
<div class="post-mark"></div>
<div class="pre-mark"></div>
<div class="member">
<div class="member-token">
<label class="member-text">Very Long Text Purple Monkey Dishwasher</label>
</div>
<div class="member-bubble">
<span class="member-bubble-text">500</span>
</div>
</div>
</div>
<div class="outerDiv">
<div class="post-mark"></div>
<div class="pre-mark"></div>
<div class="member">
<div class="member-token">
<label class="member-text">Purple Monkey Dishwasher</label>
</div>
<div class="member-bubble">
<span class="member-bubble-text">500</span>
</div>
</div>
</div>
CSS:
.outerDiv {
width: 280px;
height: 100px;
background-color: lightgrey;
}
.post-mark {
display: inline-block;
height: 100%;
margin-right: 8px;
position: relative;
width: 18px;
float: right;
background-color: cyan;
}
.pre-mark {
height: 100%;
margin-left: 4px;
position: relative;
width: 18px;
float: left;
background-color: pink;
}
.member {
margin-left: 22px;
height: 22px;
overflow: hidden;
position: relative;
white-space: nowrap;
background-color: cadetblue;
}
.member-token {
float: left;
height: 20px;
margin-left: 2px;
padding: 0 3px;
background-color: darksalmon
}
.member-text {
display: inline-block;
line-height: 20px;
max-width: 193px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
background-color: goldenrod;
}
.member-bubble {
display: block;
height: 100%;
overflow: hidden;
padding: 0 4px;
position: relative;
background-color: burlywood
}
.member-bubble-text {
top: 4px;
-moz-box-sizing: border-box;
background-color: #F2F2F2;
border-radius: 3px 3px 3px 3px;
display: inline-block;
line-height: 14px;
max-width: 100%;
padding 0 4px;
position: relative;
vertical-align: top;
color: #666666;
font-size: 11px;
font-weight: bold;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}