The cause of error like you are describing are because different browsers have different means of interpreting CSS.
Firefox and Safari (while have a few minor differences) are standards based - meaning they comply with w3c rules. IE, on the other hand, has been horrible about following anything standards based. However, IE8 has made great strides and is, now, much closer to the aforementioned Firefox and Safari.
But, there was a huge discrepancy in how IE6 handled elements and compared to IE7 through IE8. IE7 was a like a leap forward for Microsoft in that their browser finally at least appeared much closer to the standards based browsers but still wasn't quite there. IE 6 had not only the issue of lacking standards based interpretation, it was always riddled with bugs. So not only were alterations ti CSS required, downright hacks have to be used to get it to truly display correctly on some elements.
So, now on any site I create, I first attach my main css file. Then begin to check for differences in each browser. I usually have to create a an IE conditional statement for IE 7 and attach an a style sheet that will just contain alterations to styles that were previously listed in my main style sheet to fix and small inconsistencies with IE 7. And then finally, I always have to add a conditional IE 6 statement with CSS just for IE 6. Sometimes, with IE 6, I have to make drastic changes to the CSS to get it to look right.