2011-04-13 17 views
13

Tengo TD con texto largo en ella. Me gustaría que fuera ellipsado, pero no quiero definir el ancho absoluto de esta columna; quiero que se calcule dinámicamente por su tabla padre. ¿Es posible? Aquí es un código, por ejemplo:Desbordamiento de control del elemento TD

<table width="100%" border="3"> 
<tr> 
<td ><span style="white-space: nowrap; overflow: hidden; 
text-overflow: ellipsis;" > 
Here should be very long text: 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
</span></td> 
</table> 

¿Hay alguna manera de forzar el navegador Internet Explorer para mostrar puntos suspensivos aún sin definir el elemento 'lapso' con ancho absoluto por ejemplo: width = 300px?

+0

¿Estás dispuesto a utilizar JavaScript? –

+0

BTW - en el ejemplo anterior, incluso cuando se cambia el ancho de la tabla para ser absoluto (por ejemplo ancho = 900px) no cambiará nada y el tamaño de la tabla excederá el tamaño de pantalla debido a la longitud del texto de la celda – Spiderman

+0

con respecto a javascript - si tiene alguna sugerencia, adelante, pero básicamente prefiero una solución que se base en las definiciones de diseño de CSS y HTML – Spiderman

Respuesta

34

La mejor respuesta que he encontrado: envolver el largo contenido de la TD en la tabla con la definición:
'table-layout: fijo' Esto mágicamente resolver este problema.

Véase, por sí mismo -

<table width="100%" border="3"> 
<tr> <td> 
<TABLE width=100% cellpadding=0 cellspacing=0 style='table-layout:fixed'><TR> 
<TD style='text-overflow: ellipsis; overflow: hidden; white-space: nowrap;'> 
Here should be very long text: 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
</TD></TR></TABLE> 
</td> 
</table> 
+2

se ve bien, se puede ver en un jsfiddle aquí: http://jsfiddle.net/w9mDC/ –

0

Solución usando jQuery ...

Nota: "text-overflow: puntos suspensivos" no parece estar trabajando en FF4.

Demostración: http://jsfiddle.net/vgfDd/1/

$w = $('.setWidth').attr('width'); 
$('.setWidth').find('span').width($w); 

CSS ...

table { 
    border: 3px solid black; 
} 

span { 
    display: block; 
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis; 
} 

HTML ...

<table width="100px" class="setWidth"> 
    <tr> 
     <td> 
      <span> 
       Here should be very long text: 
       bla bla bla bla bla bla bla 
      </span> 
     </td> 
     <td> 
      <span> 
       Here should be very long text: 
       bla bla bla bla bla bla bla 
      </span> 
     </td> 
    </tr> 
</table> 
1

No! IE no permite cambiar la forma en que se muestra la tabla, por lo que si no usa un elemento como un tramo, el texto no se recortará. Si necesita poner puntos suspensivos para recortar el texto, debe usar un elemento como un tramo o div con ancho absoluto.

Para activarlo automáticamente puede usar JavaScript o cambiar de tabla a div. Espero que esto te ayude.

+0

Eso es ridículo, ya que si elimino el atributo 'white-space: nowrap', sé que debe considerar el ancho de la tabla y ajustar el texto en consecuencia. Entonces, ¿por qué no puede hacer lo mismo en caso de que el texto deba recortarse? Pero puede que tengas razón - IE se comporta de manera extraña a veces – Spiderman

1

he encontrado otra forma en que funciona sin table-layout: fijo.

Deja tus contexto en un td mediante la entrada Valor o marcador de posición atributo.

Luego, Style la entrada Como un contexto normal, no se puede editar.

Esto funcionará con un verdadero ancho de tabla flexible td.

<table> 
    <tr> 
    <td> 
     <input type="text" value="TitleTitleTitleTitle" /> 
    </td> 
    <td> 
     <input type="text" placeholder="ValueValueValueValue" /> 
    </td> 
    <td> 
     <input type="text" value="NumberNumberNumberNumber" /> 
    </td> 
    </tr> 
</table> 
<style> 
table{ 
    width: 100%; 
} 
td{ 
    input{ 
    display: block; 
    width: 100%; 
    text-overflow: ellipsis; 
    overflow: hidden; 
    -webkit-user-select: none; 
    cursor: default; 
    } 
} 
</style> 
-4

Debe utilizar <table width="inherit"> para que pueda heredar su anchura del elemento padre.

+0

¡Ajá! Gracias ilmari; en el futuro, @Inyavic, rodee cualquier etiqueta HTML con barras (') para que aparezcan en el texto. Sin eso, todo el contexto faltaba. –

Cuestiones relacionadas