Я пытаюсь сжать поле заголовка, чтобы оно соответствовало его текстовому содержимому. Вот что у меня есть:

Вот что я ищу:

Обычные методы float, display: inline / inline-block / table все вызывают варианты следующего:

, в котором заголовок вырывается из потока и становится дочерним элементом поля таблицы.
В коде таблицы нет ничего особенного:
<table>
<caption>Legendary fictional heroes</caption>
<thead>
<tr>
<th>Name</th><th>Power</th><th>Nemesis</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dazzler</td><td>Sound-to-Light Transformation</td><td>Apocalypse</td>
</tr>
...
</tbody> </table>
Есть идеи, как добиться того, чего я хочу? Заранее спасибо.