2013-07-10 2 views
0

У меня есть таблица с двумя рядами. Вторая строка состоит из длинного текста в colspan = "2". Как этот текст можно обернуть, чтобы таблица была не более широкой, чем две ячейки первой строки? Я не могу установить фиксированную ширину для таблицы, потому что первые две ячейки являются динамическими.Как обернуть длинную ячейку HTML-таблицы

http://jsfiddle.net/qLpuq/1/

<table> 
    <tr> 
     <td>Cell 1</td> 
     <td>Cell 2</td> 
    </tr> 
    <tr> 
     <td colspan="2" style="width: 0" >Very long cell that should just be as long as the first two cells and wrap, but not take all the screen width.</td> 
    </tr> 
</table> 

я ошибочно предположил, что style="width: 0" будет работать на этой ячейке.

+0

какую версию html вы используете? –

+0

HTML5 в современных браузерах. – aschoenebeck

ответ

3

я боюсь нет прямого решения. Вы можете играть с JavaScript, создавая копию таблицы, содержащей только первую строку, получите ее ширину, отбросьте копию и используйте ширину, чтобы установить ширину вашей реальной таблицы. В сочетании с настройкой table-layout: fixed это должно справиться с ситуацией. Вы можете упростить подход, чтобы не создавать копию таблицы, а вместо этого удалять вторую строку, а затем добавлять ее обратно. Это становится довольно некрасиво:

<!doctype html> 
<title>Hack</title> 
<style> 
table { table-layout: fixed } 
tr:first-child td { white-space: nowrap } 
</style> 
<table id=tbl> 
<tbody id=tbody> 
    <tr> 
     <td id=cell1>Cell 1</td> 
     <td id=cell2>Cell 2</td> 
    </tr> 
    <tr id=row2><td colspan=2> 
     Very long cell that should just be as long as the first two cells and 
     wrap, but not take all the screen width. 
</table> 
<script> 
var tbl = document.getElementById('tbl'); 
var tbody = document.getElementById('tbody'); 
var row2 = document.getElementById('row2'); 
var cell1 = document.getElementById('cell1'); 
var cell2 = document.getElementById('cell2'); 
tbody.removeChild(row2); 
var width = tbl.clientWidth; 
var width1 = cell1.clientWidth; 
var width2 = cell2.clientWidth; 
tbody.appendChild(row2); 
cell1.style.width = width1 + 'px'; 
cell2.style.width = width2 + 'px'; 
tbl.style.width = width + 'px'; 
</script> 

Совсем другая идея заключается в том, чтобы использовать обходной путь, где длинный текст не находится в клетке, но в caption элемент, размещенный в нижней части таблицы:

<table> 
    <caption align=bottom style="text-align: left"> 
     Very long cell that should just be as long as the first two cells and 
     wrap, but not take all the screen width. 
    <tr> 
     <td>Cell 1</td> 
     <td>Cell 2</td> 
    </tr> 
</table> 
+1

Ничего себе, простое решение работает отлично. Обновлена ​​скрипка здесь: http://jsfiddle.net/qLpuq/2/ – aschoenebeck

0

Это может быть полезно для вас ..

<table style="width:300px;" border="1"> 
     <tr> 
      <td>Cell 1</td> 
      <td>Cell 2</td> 
     </tr> 
     <tr> 
      <td colspan="2" style="width: 70%;" >Very long cell that should just be as long as the first two cells and wrap, but not take all the screen width.</td> 
     </tr> 
    </table> 

Update после обновления вопроса

<table style="width:100%;" border="1"> 
     <tr> 
      <td style="width: 50%;">Cell 1</td> 
      <td style="width: 50%;">Cell 2</td> 
     </tr> 
     <tr> 
      <td colspan="2" style="width: 70%;" >Very long cell that should just be as long as the first two cells and wrap, but not take all the screen width.</td> 
     </tr> 
    </table> 
+0

Спасибо, но я не могу установить фиксированную ширину для таблицы, потому что первые две ячейки являются динамическими. Обновленный исходный вопрос. – aschoenebeck

+0

Я также обновил naswer :) –

+0

Вам просто нужно изменить

на низкое, как 70% –

0

Используйте не более ширины с% от colspan2

    <table style="width:100%;" border="1"> 
    <tr> 
     <td style="width: 50%;">Cell 1</td> 
     <td style="width: 50%;">Cell 2</td> 
    </tr> 
    <tr> 
     <td colspan="2" style="max-width: ??%;" >Very long cell that should just be as long as the first two cells and wrap, but not take all the screen width.</td> 
    </tr> 
</table> 
Смежные вопросы