Пожалуйста, взгляните на эту скрипту - 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);
У меня есть контейнер, содержащий ячейку, содержащую текст node. Ячейка имеет фиксированную ширину.
Если текст, переданный в текст node, превышает ширину, я хочу, чтобы он был усечен, поэтому я установил ячейку в "overflow: hidden".
Он работает, но увеличивает высоту ячейки на 3 пикселя. Ячейка имеет границу, но увеличенная высота появляется ниже границы, а не внутри.
Поскольку у меня много ячеек в стиле таблицы, это испортит макет.
Я тестировал это на IE8 и Chrome с тем же результатом.
Любое из следующих решений будет в порядке -
- предотвратить увеличение высоты.
- сохранить увеличенную высоту внутри границы.
- другой способ усечения текста
В соответствии с запросом, вот новая скрипка, которая показывает более полный пример.
http://jsfiddle.net/frankmillman/fA3wy/
Я надеюсь, что это самоочевидно. Дайте мне знать, если вам нужно что-то объяснимое более подробно.
Вот (надеюсь) моя заключительная скрипка -
http://jsfiddle.net/frankmillman/RZQQ8/
Он включает идеи от всех респондентов, и теперь он работает так, как я хочу.
Есть два основных изменения.
Первый вдохновил табличное решение Матиаса. Вместо промежуточного контейнера, содержащего пустую строку и строку данных, одна из которых была скрыта, а одна из них показана, теперь у меня теперь есть переменные пустые строки и строки данных в контейнере верхнего уровня. Я не думаю, что это повлияло на мою проблему с макетами, но она вырезала слой и упростила код.
Второе изменение, предложенное всеми респондентами, фактически устранило проблему. Вместо того, чтобы иметь элементы типа "span" с отображением "inline-block", теперь я использую "div" и тщательное сочетание "float left" и "float right" для достижения желаемого макета.
Большое спасибо всем.