Без JS (установка первой ширины td в длину содержимого) вам потребуется установить ширину первого td с помощью CSS.
Что-то вроде:
<html>
<head>
<style>
.my-table, .my-table td {
border: 1px solid black; //border set to easily see spacing
}
.my-table{
width: 500px; // initially set table width
}
.my-table tr td:first-child{
width: 20px; //select first td of every row and set width
}
</style>
</head>
<body>
<table class="my-table">
<tr><td>A</td><td>B</td></tr>
</table>
</body>
</html>
Достигну того, чего ты добиваешься. A будет установленной шириной, а B будет естественным образом заполнять все остальное.