What you are experiencing is a margin collapse. Not sure why this happens but its in the html/css specs to do just that. Putting a 1px padding on the <div> adds a barrier stopping the margin collapse, but not always desirable. If overflow: hidden; works as Ben suggests go with that. Fortuantely I havent experienced a margin collapse for some time BUT when it happens it can be confusing unless you are aware of it.
You could also add 5% top padding to the outer <div> to give you the result you require.