At the risk of repeating myself:
The issue with margin:0 auto; was legacy browsers like ie5.5 and below.
ie6 and above supports auto margins. This requires a block element with a width set to less than 100%. (Otherwise block elements expand full width and there is no "centering" effect.)
text-align:center set on the parent element is a technique for older browsers who would apply this to child elements as well as text. That includes ie5.5 and below, and is required for ie6 if the coder chooses to code in "quirks mode".
Once text-align:center has been set on a parent element the alignment must be re-set (usually to text-align:left) on relevant child elements because alignment should be (and is) cascaded/inherited by conforming browsers.
These are not hacks.
Avoiding quirks/almost standards is achievd via doctype selection. FAQ: Choosing the best doctype for your site [webmasterworld.com] in the forum library and the first two links in the "reference" section explain how to choose. Maybe also check out the companion Why most of us should NOT use XHTML [webmasterworld.com]
If you're not familiar with the characteristics of block/inline elements (easy and really helps) check out w3.org, and maybe g* blooberry (old but still accurate).