Существует гораздо лучшая альтернатива обоим:
{width:auto;}
... на дочернем элементе.
Для вашего примера, с {width: 100%} или {width: 300px}, если вы решили затем применить отступ или границу к дочернему элементу (h1), он будет переполнен за пределами своего контейнера. Если вы используете ширину пикселя, вам нужно будет вычесть сумму (padding-left + padding-right + border-left + border-right) из ширины дочернего элемента, чтобы он просто поместился внутри, аккуратно. В случае ширины в процентах вам нужно будет выполнить более сжатый расчет, чтобы получить правильный процент (и, вероятно, все еще немного).
Но {width: auto} будет автоматически учитывать отступы и границы, а его вычисленная ширина будет на соответствующую величину меньше, чем контейнер, так что внешний край границы на H1 остается в пределах области содержимого вашего div .