Так у тебя div находится внутри body, и когда ты задаешь процентную величину, то браузер ориентируется на родителя. А у body всегда минимально в размер экрана, максимально в размер контента.
Чем не устроил vh? Vh - viewport height, что берет процентное значение от текущего размера окна. Убери margin у body и будет корректно отображать