【发布时间】:2014-04-20 17:38:16
【问题描述】:
请看看这个小提琴 - http://jsfiddle.net/Z27hC/
var container = document.createElement('span');
container.style.display = 'inline-block';
container.style.marginTop = '10px';
container.style.marginLeft = '50px';
container.style.background = 'lightblue';
document.body.appendChild(container);
var cell = document.createElement('span');
cell.style.display = 'inline-block';
cell.style.border = ' 2px solid black';
cell.style.width = '200px';
cell.style.height = '16px';
cell.style.overflow = 'hidden';
container.appendChild(cell);
var text_node = document.createTextNode('hallo');
cell.appendChild(text_node);
我有一个容器,包含一个单元格,包含一个文本节点。单元格具有固定宽度。
如果传递给文本节点的文本超过宽度,我希望它被截断,所以我将单元格设置为“溢出:隐藏”。
它可以工作,但它会导致单元格的高度增加 3px。单元格有边框,但增加的高度显示在边框下方,而不是在边框内。
因为我有很多电子表格样式的单元格,所以布局混乱。
我在 IE8 和 Chrome 上测试过,结果相同。
以下任何一种解决方案都可以 -
- 防止发生高度增加
- 将增加的高度保持在边框内
- 另一种截断文本的方法
根据要求,这是一个显示更完整示例的新小提琴。
http://jsfiddle.net/frankmillman/fA3wy/
我希望它是不言自明的。如果您需要更详细的解释,请告诉我。
这是(希望)我最后的小提琴 -
http://jsfiddle.net/frankmillman/RZQQ8/
它融合了所有响应者的想法,现在可以按我的意愿工作。
有两个主要变化。
第一个灵感来自 Mathias 的餐桌解决方案。现在,我在顶级容器中只有交替的空白行和数据行,而不是包含一个空白行和一个数据行的中间容器,其中一个被隐藏,一个被显示。我不认为它影响了我的布局问题,但它剪掉了一层并简化了代码。
所有响应者建议的第二个更改实际上解决了问题。我现在使用 'div' 并仔细混合 'float left' 和 'float right' 来实现我想要的布局,而不是使用带有 display 'inline-block' 的 'span' 类型的元素。
非常感谢大家。
【问题讨论】:
-
感谢 Mathias 和 Niles 的回复。您的建议适用于我的简单示例,但我的实际程序还有更多层,它们在那里无法完美运行。我将继续调查并报告。
-
你能举一个例子来说明你的完整布局有什么问题吗?只是 HTML 和 CSS。
-
不确定这里的正确礼仪,但我已经编辑了我的原始帖子并添加了一个新的小提琴,其中包含一个更完整的示例。
-
您考虑过使用桌子吗?好像您正在创建一个表jsfiddle.net/borglinm/fA3wy/3
-
谢谢,马蒂亚斯。我很感激你花时间和麻烦来想出那个。我最终没有使用它,但它为我指明了正确的方向。我附上了一个新的小提琴,现在可以按我想要的方式工作。
标签: javascript css overflow hidden