Думаю, ваша главная проблема в том, что вы не можете ожидать, что div достигнет 100% высоты, потому что у таблицы, в которой он находится, также есть% в качестве ширины.
Контейнер div должен иметь абсолютную высоту.
Это мой код:
<table height="2000px">
<tr>
<td>
<div style="height: 100%; width: 100px; padding: 5px; overflow: scroll; border: 1px solid #000;">
Item 1<br/>
Item 2<br/>
...<br/>
Item 300<br/>
</div>
</td>
</tr>
</table>
Который использует полосу прокрутки в элементе div и из-за его высоты также позволяет отображать полосу прокрутки страницы.
К сожалению, если вы не используете какую-то хакерскую работу с CSS (что может не сработать во всех браузерах), вы не можете сказать, что div равен 100% высоты, не задав его контейнеру абсолютную высоту, как я делал выше.
Если я ошибаюсь, я уверен, что кто-то исправит меня, но я пытался дать div на 100% высоты, чтобы он соответствовал окну браузера в прошлом без хаков CSS или Javascript, и потерпел неудачу.