¿Por qué CSS td width no funciona?


Por favor vea esto JSFIDDLE

td.rhead { width: 300px; }

¿Por qué no funciona el ancho de CSS?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

Además, ¿cuáles son los efectos de position:fixed, absolute etc tienen en los anchos de td si los hay? Estoy buscando una razón más que una solución. Espero entender cómo funciona.

td ancho no es 300px como se desea

Author: Faiz Ahmed, 2013-02-08

11 answers

Esto puede no ser lo que quieres escuchar, pero display: table-cell no respeta el ancho y se contraerá en función del ancho de toda la tabla. Puede sortear esto fácilmente con solo tener un elemento display: block dentro de la celda de la tabla cuyo ancho especifique, por ejemplo

<td><div style="width: 300px;">wide</div></td>

Esto no debería hacer mucha diferencia si el <table> en sí es position: fixed o absoluto porque la posición de las celdas son todas estáticas en relación con el tabla.

Http://jsfiddle.net/ExplosionPIlls/Mkq8L/4 /

EDITAR: No puedo tomar el crédito, pero como dicen los comentarios, puede usar min-width en lugar de width en la celda de la tabla.

 140
Author: Explosion Pills,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-08 04:58:14

Es mejor usar table-layout: fixed

Auto es el valor predeterminado y con tablas grandes puede causar un poco de retraso del lado del cliente, ya que el navegador itera a través de él para verificar que todos los tamaños se ajusten.

Fijo es mucho mejor y hace más rápido a la página. La estructura de la tabla depende del ancho total de las tablas y del ancho de cada una de las columnas.

Aquí se aplica al ejemplo original: JSFIDDLE , notará que el resto las columnas se aplastan y se superponen a su contenido. Podemos arreglar eso con un poco más de CSS (todo lo que he tenido que hacer es agregar una clase al primer TR):

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

Visto en acción aquí: JSFIDDLE

 26
Author: Hugo Yates,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-17 09:33:34

La razón por la que no funciona en el enlace que proporcionó es porque está tratando de mostrar una columna de 300px MÁS 52 columnas que abarcan 7 columnas cada una. Reducir el número de columnas y funciona. No caben tantos en la pantalla.

Si desea forzar que las columnas se ajusten, intente establecer:

body {min-width:4150px;}

Ver mi jsfiddle: http://jsfiddle.net/Mkq8L/6 / @mike Todavía no puedo comentar.

 11
Author: Matthew Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-08 05:00:22

La razón, es, porque no se especifica el ancho de la tabla, y su montón de td son desbordantes.

Esto por ejemplo , le he dado a la tabla un ancho de 5000px, que pensé que se ajustaría a sus requisitos.

table{
    width:5000px;
}

Es exactamente el mismo código que proporcionó, que simplemente agregué en el ancho de la tabla.

Creo que lo que está sucediendo, es porque sus TD's están mucho más allá del ancho de tabla predeterminado. Que usted podría ver, si usted saca cerca de 45 de su td's en cada tr, (es decir, el código que proporcionó en su pregunta, no jsfiddle) funciona exactamente bien

 7
Author: He Hui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-08 05:03:16

Intenta que esto funcione.

<table>
<thead>
<tr>
<td width="300">need 300px</td>
 5
Author: amirali shahinpour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-08 04:46:46

Intenta usar

table {
  table-layout: auto;
}

Si usa Bootstrap, la clase table tiene table-layout: fixed; por defecto.

 5
Author: sambrmg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-02 18:49:48

Mi solución loca.)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});
 3
Author: mathewsun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-18 13:39:13

Use la propiedad table-layout y el valor "fixed" en su tabla.

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

Después de configurar todo el ancho de la tabla, ahora puede configurar el ancho en % de los td.

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

Puede obtener más información en este enlace: http://www.w3schools.com/cssref/pr_tab_table-layout.asp

 3
Author: Cyan Baltazar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-28 05:52:30

Si el ancho de la tabla es, por ejemplo, 100%, intente usar un ancho porcentual en td como 20%.

 2
Author: Dally S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-07 09:30:18

Envolver el contenido de la primera celda en div, por ejemplo, así:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

Aquí hay un jsfiddle.

 2
Author: simhumileco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-05 12:17:49

También puedes usar:

.rhead {
    width:300px;
}

Pero esto solo con con algunos navegadores, si no recuerdo mal IE8 no permite esto. Sobre todo, es más seguro poner el atributo width="" en el propio <td>.

 1
Author: michaelcurry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 08:01:52