Ce CSS devrait suffire :
td { min-width: 100px; }
Cependant, il n'est pas toujours respecté correctement (l'attribut min-width) par tous les navigateurs (par exemple, IE6 l'apprécie très peu).
Editar: En ce qui concerne une solution pour IE6 (et avant), il n'y en a pas une qui fonctionne de manière fiable dans toutes les circonstances, pour autant que je sache. L'utilisation de l'attribut HTML nowrap ne permet pas vraiment d'obtenir le résultat souhaité, car il ne fait qu'empêcher les sauts de ligne dans la cellule, au lieu de spécifier une largeur minimale.
Cependant, si nowrap est utilisé en conjonction avec une propriété de largeur de cellule normale (comme l'utilisation de width : 100px), les 100px agiront comme suit como une largeur minimale et la cellule s'étendra toujours avec le texte (en raison du nowrap). Il s'agit d'une solution moins qu'idéale, qui ne peut pas être entièrement appliquée à l'aide de CSS et qui, en tant que telle, serait fastidieuse à mettre en œuvre si vous avez de nombreux tableaux auxquels vous souhaitez l'appliquer. (Bien sûr, toute cette solution alternative tombe à l'eau si vous voulez avoir des sauts de ligne dynamiques dans vos cellules, de toute façon).