我有一个div容器,有一些固定大小的“前”和“后”内容,主要内容夹在中间 - 主要内容基本上由一个标签和一个数字。这里有一个带样本的jsfiddle link(代码也在下面复制 - 我添加了仅用于可见对比度的颜色)。使用CSS动态控制两个内部div的大小
线框样机:
------------------------------------------
| A | Variable Sized Content | 123 | B |
------------------------------------------
A
和B
是前置和后置的内容;文本和数字的意思是可变大小,与想法,如果没有足够的房间,内容将缩小,并以省略号被截断:
---------------------------------
| A | Variable Siz... | 123 | B |
---------------------------------
如果有一个很大的空间,多余的空间去数量和B
之间:
-----------------------------------------------------
| A | Variable Sized Content | 123 | B |
-----------------------------------------------------
我知道了,现在工作的方法是通过在Javascript上outerDiv
一个调整大小监听器设置member-text
类的max-width
。这也管理内容div的最小尺寸,以便进一步缩小也将椭圆化数字。
我遇到的问题是在试图使这项工作不的Javascript - 有max-width
不断变化的所有元素是相当cludgy /慢(样品只显示了两个项目,但在生产中,这是一个许多项的列表),并且使得该结构不太适合用作其他小部件的子组件。我可以重构它来工作,但这需要一些时间,而且似乎“更正确”的解决方案是在可能的情况下使用CSS。
我到模拟该最接近的是为member-text
100%,max-width
为member-token
设置max-width
至85%左右,这看起来不错,周边的默认(230-290ish)的outerDiv宽度范围,但除此之外,它分解(在错误的部分中太多/很小的间距)。
编辑:与display: table
(和table-row
/table-cell
,与table-layout: fixed
根格我也尝试过,现在的div - 通过指定所有,但一列的宽度,即列可以是动态调整这将是如果只有一个具有可变大小内容(文本)的div,这很有用,但在这种情况下,有两个(泡泡文本,由模型中的数字表示),但此策略似乎不允许多个动态大小的列
这导致了我的问题 - 它甚至可以用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;
}
嗯 - 它似乎在Chrome中做的很好,但它在Firefox(大量重叠的文本)和IE9(扩展区域中没有文本)中失败得相当可怕。尽管前提看起来很有前途...... – Krease 2013-02-14 18:12:50
实际上,在更进一步的观察中,它完全依赖于固定最大宽度大约为280px的文本(在td.shrinking规则中)。链接的jsfiddle看起来只能用于单个数据值(并且仍然只在Chrome中) - 用不同的值替换该区域中的文本会导致它崩溃。 – Krease 2013-02-18 18:36:02
是的,你需要某种最大宽度的文本div。否则,我相当确定,一旦文字完整显示,就无法让它停止增长,因为我不相信css能够识别这种情况。你几乎可以肯定需要某种Javascript来做你想做的事情。我会研究其他浏览器,但我很惊讶Firefox不起作用。祝你好运,发布你的解决方案,如果你找到一个。 – IvanJoukov 2013-02-19 19:01:08