programacion attribute html css table

html - attribute - ¿Cómo obtengo la columna de la derecha para llenar el espacio restante?



title html (3)

Establezca el ancho de su mesa al 100%. Establezca los anchos en todas las columnas menos en la derecha. La columna más a la derecha se expandirá para llenar el espacio disponible.

Supongamos que tengo una mesa con solo tres columnas pequeñas. Parece desordenado y desequilibrado tener una mesa estrecha y alta que abrace el lado izquierdo de mi pantalla ( example ), así que me gustaría que la mesa cubra el ancho de la página. Sin embargo, cuando establezco el ancho de la tabla al 100%, todas las columnas se alargan también, por lo que ahora mis datos se distribuyen uniformemente por la pantalla, lo que también parece desordenado ( example ).

Lo que estoy buscando es una solución en la que todas las columnas tengan el mismo tamaño que si la width: auto la tabla width: auto , pero la columna final llena el espacio restante en la pantalla. Esto es lo que hace Spotify, por ejemplo:

La columna "Usuario" cubrirá el ancho restante, no importa qué. ¿Hay una forma relativamente simple de lograr esto con tablas HTML y CSS?


He encontrado una solución simple:

table td:last-child { width: 100%; }

Resultado:

body { font: 12px "Sans serif"; } table { width: 100%; background-color: #222222; color: white; border-collapse: collapse; } table th { padding: 10px; text-align: left; } table td { padding: 2px 10px; } table td:last-child { width: 100%; } table td:nth-child(odd), table th:nth-child(odd) { background-color: rgba(255, 255, 255, 0.05); } table tr:nth-child(even) { background-color: rgba(255, 255, 255, 0.05); } table tr:last-child td { padding-bottom: 10px; }

<table> <tr> <th>Product</th> <th>Cardinality</th> <th>Price per item</th> </tr> <tr> <td>Apple</td> <td>5</td> <td>$2</td> </tr> <tr> <td>Pear</td> <td>3</td> <td>$3</td> </tr> <tr> <td>Sausage</td> <td>10</td> <td>$0.5</td> </tr> <tr> <td>Pineapple</td> <td>2</td> <td>$8</td> </tr> <tr> <td>Tomato</td> <td>5</td> <td>$1</td> </tr> <tr> <td>Lightsaber</td> <td>2</td> <td>$99 999</td> </tr> </table>

Esto parece funcionar en mi escenario actual, pero parece algo que puede causar efectos secundarios no deseados en otras situaciones. Si me tropiezo con alguno, voy a editar esta respuesta.

Posibles efectos secundarios

  • Las celdas de la tabla de palabras múltiples se envolverán en varias líneas para mantener la columna lo más estrecha posible. Una solución es usar white-space: nowrap en las celdas de la tabla, pero eso impedirá que las celdas con mucho texto se envuelvan cuando deberían.

Si esto es lo que quería decir: image entonces puedo lograr eso usando una estructura de tabla html estándar con el siguiente CSS:

table { width:auto; } td { white-space:nowrap; } td:last-child { width:100%; }

--EDIT: trabaja con tu jsfiddle