Yes that’s basically it. Only an absolute element can use top and bottom at the same time to describe its height. The absolute element holds no content but is just a background that will fit over the content. The actual content is kept in place with the padding on .inner.
If you don’t need to support IE7 then you could use:after to place the absolute element without any extraneous mark up.
last question. Why can’t .inner and .bg1 be the same div to both hold content and hold the margin illusion? in other words, why can’t those 2 divs be reduced to 1?
Because .inner doesn’t start part of the way down the page or finish part of the way up from the bottom. The .inner element is only as tall as the content it holds. It is not possible to make a static element start xxpx from the top and go to xxpx from the bottom.
The absolute element however can keep track with the page content as absolute elements can use top and bottom. The abs1 element keeps track with #outer which is the main container and has position:relative set as a stacking context. However you cannot use abs1 to hold content otherwise #outer would never grow and the content would overflow because absolute elements are removed from the flow. All we are doing is creating an overlay that hugs a position within #outer. It is #outer that grows. .inner just supplies some top and bottom padding to keep the text within the boundaries of the absolute overlay.