It doesn't take the 50% of the whole page is because the "whole page" is only how tall your contents are. Change the enclosing html and body to 100% height and it will work.
html, body{
height: 100%;
}
div{
height: 50%;
}
http://jsfiddle.net/DerekL/5YukJ/1/

^ Your document is only 20px high. 50% of 20px is 10px, and it is not what you expected.

^ Now if you change the height of the document to the height of the whole page (150px), 50% of 150px is 75px, then it will work.