visibility: hidden is used when you want the element to remain on the webpage and just want to make it invisible. The element occupies the same space as before.
display: none is used when you want to remove the element completely from the page.
VISIBILITY HIDDEN ON A website in is essence turning the opacity of a element to zero, it is still there in the html and dom tree.
Display none removes it entirely from the web page. According to the html however it is actually still there. Caution should be used with this especially when concerning clients and google as google sometimes will see this as a method of hiding things from users.
display:none means that the tag in question will not appear on the page at all (although you can still interact with it through the dom). There will be no space allocated for it between the other tags.
visibility:hidden means that unlike display:none, the tag is not visible, but space is allocated for it on the page. The tag is rendered, it just isn't seen on the page.