2012-04-23 57 views
11

Estoy tratando de dividir un TD (celda de tabla) para que parezca dos celdas. El problema es que cuando la celda crece en altura, no puedo hacer que los dos div se encuentren dentro para ocupar toda la altura disponible. Como estas células pueden crecer dinámicamente, tampoco puedo establecer una altura fija (eso podría resolver el problema).Split td en dos

Aquí está mi código:

<!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> 

Esto es como se ve:

current table view

no quiero ver a esos espacios en blanco en la columna 3.

Alguna idea de cómo resolver esto? He estado peleando con CSS por un tiempo sin suerte hasta ahora ...

¡Gracias !.

+0

Y de hecho la división de la TDS no es una opción? Entonces el "3" en la parte superior podría estar en una td con 'colspan =" 2 "'. –

+0

¿Quiere decir, usando colspan y/o rowspan? Si ese es el caso, entonces no, esa no es una opción. Aunque podía poner lo que quisiera dentro de las celdas (sin modificar el número de columnas/filas) –

Respuesta

12

que debe ser fijado la altura td height = 100%, y .span1 configurar la altura = 100%, entonces intenta esto se puede obtener la respuesta ..

<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

De hecho. Esto funciona! ¡Muchas gracias! –

2

establecer

display:inline-block 

puede o no también es necesario aumentar la altura del 100%, así intento.

¿No hay manera de que simplemente pueda agregar 2 td en lugar de intentar imitar a 2?

+0

Tampoco funciona ... –

0

puedes poner una tabla dentro de esa celda de tabla, luego esa tabla interna puedes hacer lo que quieras, como td colspan="2" para la fila superior y td td para la fila inferior (esto me recuerda los días feos del diseño de tabla , pero lo que funcione para usted!)

+0

Creo que tiene que haber una mejor manera de hacerlo ... pero, gracias por su sugerencia –

+1

no, él tiene razón, lo más probable es que necesite eliminar todos los rellenos/márgenes en la tabla que se encuentra dentro, pero sí, esto suena bien. regla general en html = las tablas son malas y nunca haga lo que usted quiere, evítelas si es posible. Tome cualquier solución que alguien le dé que funcione –

0

También he estado buscando una manera de dividir un TD (Table Data Cell). Después de leer muchos mensajes y después de varios intentos fallidos, finalmente lo he descifrado. Muchas gracias a todos los que han publicado anteriormente, ya que es para su crédito que pude conectar los puntos.

Hay dos cosas que debe tener en cuenta, Afectar fila de encabezado y Fila de datos resultante. Lo que quiero decir con esto es que las celdas en la fila superior [Afectar fila de encabezado] que usan 'colspan' afectan directamente a las celdas en la fila debajo de ellas [Fila de datos resultante]. Entonces, por ejemplo, si mi fila resultante (2nd Row) debe contener TDs divididos, entonces se verá afectada por la fila de arriba que usa 'colspan' en sus TDs (1ra. Fila). Pero si la fila siguiente (3ª fila) no debe verse afectada por el 'colspan' de la 1ª fila, las celdas de la fila siguiente (3ª fila) deben tener los mismos atributos de 'colspan' que las celdas de la 1ª fila. Esto evita se dividen y los hace 'abarcar' el espacio regular.

En la imagen [haga clic en el enlace para ver la imagen], tengo solo 2 columnas [2da y 4ta columnas] que están dividiendo TD debajo de ellas. En la primera fila utilizo 'colspan' para afectar las filas a continuación. Sin embargo, no quiero que la 2ª y 3ª filas se dividan, por lo que tienen los mismos "colspanos" que la 1ª fila. YO QUIERO dividir celdas en la 4ª y 5ª filas [solo en la 2ª y 4ª columnas, por supuesto], así que para lograr esto, no contienen atributos 'colspan', lo que los hace verse afectados por las filas que están sobre ellos y que sí usan ' colspan '. La 6ª fila no se ve afectada por los 'colspans' de las filas anteriores, ya que contiene los mismos atributos 'colspan' que las primeras 3 filas. La séptima y última fila contiene TD divididos porque, como las filas 4 y 5, no contiene 'colspans'.Esto puede sonar confuso, pero si mira la imagen y prueba el código fuente, creo que estará muy satisfecho. Espero que esto ayude.

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>