2012-04-23 3 views
11

Я пытаюсь разбить TD (ячейку таблицы), чтобы выглядеть так, как если бы это были две ячейки. Проблема в том, что когда клетка растет в Height, я не могу заставить два div внутри занять всю доступную высоту. Поскольку эти ячейки могут расти динамически, я также не могу установить фиксированную высоту (что могло бы решить проблему).Split td in two

Вот мой код:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
<!--[if IE]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 
<style> 
    article, aside, figure, footer, header, hgroup, 
    menu, nav, section { display: block; } 
    td { border: 1px solid black; width: 50px; text-align: center; margin:0; padding:0 } 
    #span1 { background-color: #DDD; width: 25px; float: right; } 
    #span2 { background-color: #EEE; width: 24px; float: left; } 
    .t { border-top: 1px solid black; } 
    .r { border-right: 1px solid black; height: 100%; } 
</style> 
</head> 
<body> 
    <table> 
    <tbody> 
     <tr> 
     <td>1</td><td>2</td><td>3<div><div id="span1" class="t">1</div><div id="span2" class="t r">1</div></div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2</td><td><div id="span1">3</div><div id="span2" class="r">3</div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2 2 2 2 2 22 2 </td><td><div id="span1">3</div><div id="span2" class="r">3</div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2</td><td><div id="span1">3</div><div id="span2" class="r">3</div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2 2 2 2 2 2 2 2 </td><td><span style="line-height:2"><div id="span1">3</div><div id="span2" class="r">3</div></span></td><td>4</td> 
     </tr> 
    </tbody> 
    </table> 
</body> 
</html> 

Вот как это выглядит:

current table view

Я не хочу видеть эти белые пробелы в колонке 3.

Любые идеи, как это решить? Я боролся с CSS на время, пока не повезло ...

Спасибо !.

+0

И фактически разделив ТДС не вариант? Тогда «3» сверху может быть в td с 'colspan =" 2 "'. –

+0

Вы имеете в виду, используя colspan и/или rowspan? Если это так, тогда нет, это не вариант. Хотя я мог бы поместить все, что захочу внутри ячеек (без изменения количества столбцов/строк) –

ответ

12

вы должны установить высоту TD высота = 100%, а .span1 установить высоту = 100%, то попробуйте это вы можете получить ответ ..

<html> 
<head> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
<!--[if IE]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 
<style> 
    article, aside, figure, footer, header, hgroup, 
    menu, nav, section { display: block; } 
    td { border: 1px solid black; width: 50px; text-align: center; margin:0; padding:0; height:100%; } 
    #span1 { background-color: #DDD; width: 25px; float: right; height:100%; } 
    #span2 { background-color: #EEE; width: 24px; float: left; } 
    .t { border-top: 1px solid black; } 
    .r { border-right: 1px solid black; height: 100%; } 
</style> 
</head> 
<body> 
    <table> 
    <tbody> 
     <tr> 
     <td>1</td><td>2</td><td>3<div><div id="span1" class="t">1</div><div id="span2" class="t r">1</div></div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2</td><td><div id="span1">3</div><div id="span2" class="r">3</div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2 2 2 2 2 22 2 </td><td><div id="span1">3</div><div id="span2" class="r">3</div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2</td><td><div id="span1">3</div><div id="span2" class="r">3</div></td><td>4</td> 
     </tr> 
     <tr> 
     <td>1</td><td>2 2 2 2 2 2 2 2 </td><td><span style="line-height:2"><div id="span1">3</div><div id="span2" class="r">3</div></span></td><td>4</td> 
     </tr> 
    </tbody> 
    </table> 
</body> 
</html> 
+0

Действительно. Это работает !. Большое спасибо! –

2

Try установка

display:inline-block 

может или не может также потребоваться добавить высоту 100%, а также.

Также нет способа, которым вы могли бы просто добавить 2 td, а не пытаться имитировать 2 ??

+0

Это тоже не работает ... –

0

вы можете поместить таблицу внутри этой ячейки таблицы, а затем эту внутреннюю таблицу вы можете делать, как хотите, например td colspan="2" для верхней строки, а td td для нижней строки (это напоминает мне уродливые дни макета таблицы , но все, что работает для вас!)

+0

Я считаю, что должен быть лучший способ сделать это ... но, спасибо за ваше предложение –

+1

Нет, он прав, вам, скорее всего, нужно будет удалить все дополнения/поля в таблице, которая входит внутрь, но да, это звучит правильно. общее эмпирическое правило в html = table - это зло, и вы никогда не делаете то, что хотите, избегайте, если это возможно. Возьмите любое решение, которое кто-то даст вам, который будет работать. –

0

Я также искал способ разделить TD (Cell Data Cell). Прочитав много сообщений и после нескольких неудачных попыток, я, наконец, взломал его. Огромное спасибо всем, кто выложил ранее, так же как и ваш кредит, что я смог подключить точки.

Существует две вещи, которые необходимо иметь в виду, влияющие на строку заголовка и итоговую строку данных. Я имею в виду, что ячейки в верхней строке [Affecting Header Row], которые используют «colspan», непосредственно влияют на ячейки в строке под ними [Resulting Data Row]. Например, если моя результирующая строка (2-я строка) должна содержать разделенные TD, то на нее влияет строка, которая использует «colspan» в своих TDs (1st Row). Но если следующая строка (3-я строка) не должна быть затронута «colspan» из 1-го ряда, ячейки в следующей строке (3-я строка) должны иметь те же атрибуты «colspan», что и ячейки в 1-й строке, это предотвращает их от раздробления и заставляет их «пробегать» регулярный промежуток.

На изображении [щелкните ссылку, чтобы увидеть изображение], у меня есть только 2 столбца [2-я и 4-я колонки], которые разбивают TDs под ними. В 1-й строке я использую «colspan», чтобы повлиять на строки ниже. Тем не менее, я не хочу разделять 2-й и 3-й строки, поэтому они имеют одинаковые «колпаны» в качестве первой строки. Я хочу разделить ячейки в 4-й и 5-й строках [во 2-м и 4-м столбцах, конечно,], поэтому для этого они не содержат атрибутов «colspan», что делает их затронутыми строками над ними, которые используют ' Объединение столбцов. 6-я строка не затрагивается «colspans» из предыдущих строк, потому что она содержит те же атрибуты «colspan», что и первые 3 строки. 7-я и последняя строка содержит разделенные TD, потому что они, как и строки 4 и 5, не содержат «colspans».Это может показаться запутанным, но если вы посмотрите на изображение и попробуете исходный код, я думаю, вы будете очень довольны. Надеюсь, это поможет.

https://www.flickr.com/photos/[email protected]/sets/72157651047314439/

<table border="1px solid" cellspacing="5" bordercolor="#000000" width="959" cellpadding="5"> 
    <tr align="justify" valign="top"> 
    <td valign="middle" bgcolor="#FFFFFF" width="210"><h4 style="color:#000000" align="center">Nothing Special Here</h4></td> 
    <td colspan="2" valign="middle" bgcolor="#6E7F8B"><h4 style="color:#FFFFFF" align="center">Colspan=&quot;2&quot;</h4></td> 
    <td valign="middle" bgcolor="#6E7F8B" width="191"><h4 style="color:#FFFFFF" align="center">No Colspan Here</h4></td> 
    <td colspan="2" valign="middle" bgcolor="#6E7F8B"><h4 style="color:#FFFFFF" align="center">Colspan=&quot;2&quot;</h4></td> 
    </tr> 
    <tr class="gray1" valign="top" align="justify"> 
    <td valign="middle"><p align="justify">Nothing Special Here</p></td> 
    <td colspan="2" valign="middle"><p align="center">Colspan=&quot;2&quot;</p></td> 
    <td width="191" valign="middle"><p align="center">No Colspan Here</p></td> 
    <td colspan="2" valign="middle"><p align="center">Colspan=&quot;2&quot;</p></td> 
    </tr> 
    <tr class="gray1" valign="top" align="justify"> 
    <td valign="middle"><p align="justify">Nothing Special Here</p></td> 
    <td colspan="2" valign="middle"><p align="center">Colspan=&quot;2&quot;</p></td> 
    <td width="191" valign="middle"><p align="center">No Colspan Here</p></td> 
    <td colspan="2" valign="middle"><p align="center">Colspan=&quot;2&quot;</p></td> 
    </tr> 
    <tr class="gray1" valign="top" align="justify"> 
    <td valign="middle"><p align="justify">Nothing Special Here</p></td> 
    <td width="129" valign="middle"><p align="center">Nothing Special</p></td> 
    <td width="120" valign="middle"><p align="center">Nothing Special</p></td> 
    <td width="191" valign="middle"><p align="center">Nothing Special</p></td> 
    <td width="99" valign="middle"><p align="center">Nothing Special</p></td> 
    <td width="101" valign="middle"><p align="center">Nothing Special</p></td> 
    </tr> 
    <tr class="gray1" valign="top" align="justify"> 
    <td valign="middle"><p align="justify">Nothing Special Here</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td width="101" valign="middle"><p align="center">Nothing Special</p></td> 
    </tr> 
    <tr class="gray1" valign="top" align="justify"> 
    <td valign="middle"><p align="justify">Nothing Special Here</p></td> 
    <td colspan="2" valign="middle"><p align="center">Colspan=&quot;2&quot;</p></td> 
    <td valign="middle"><p align="center">No Colspan Here</p></td> 
    <td colspan="2" valign="middle"><p align="center">Colspan=&quot;2&quot;</p></td> 
    </tr> 
    <tr class="gray1" valign="top" align="justify"> 
    <td valign="middle"><p align="justify">Nothing Special Here</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td> 
    <td valign="middle"><p align="center">Nothing Special</p></td>   
    </tr> 
</table>