If I define a heading like , its width is set to 100% by default.
Is there a way to make sure its width is set to the smallest value possible
It's a block level element, so it follows the rules of display:block. You can set display:inline, which may do what you need or not, depending on the context.
You can give it display: inline. This will make it behave like any text element - the default for <h1> is display: block.
There are other ways: float: left for example, but I find this the simplest and the one with the fewest side effects.
Note that you will then probably have to add a <br> to ensure a line break after the <h1>.
Is there a way to make sure its width is set to the smallest value possible?
I think that width: fit-content; is better.
https://jsfiddle.net/fqk1a2v6/
Instead of display: inline, give it display: inline-block. This will retain the block-like qualities of the h1 tag, except for the 100% width.