This is because you are floating the divs. Changing margin-top
moves the element which creates room underneath it.
What you need is this:
div.product{
position:relative;
}
div.product:hover{
top:-5px;
}
position:relative
basically takes up the original space but lets the div to be rendered elsewhere.