Since <h1> is a block element, it will take up 100% of the available width. In this case, it's 600 pixels since its parent limits it to that width. You could manually code the width but then you would have to change it every time as you said.
Two options you have are:
1. Give it display: inline. If you do this you won't be able to give it a height anymore though. It will behave like <a> or <span>. I don't think you want this.
2. Give it display: inline-block. This gives you the best of both worlds. It will take up only as much width as the text is, and you can still give it a height, width, and other styling you could only apply to block elements. You might still need a line break after it though, because it is not taking up all the available width. This is your best option, although this will not work in IE6 or IE7, which accept inline-block only on naturally inline elements like anchor, image, and span.