devote, как быть в этой ситуации, padding - явная проблема (хотя в примере с кнопкой прокатило), получается всё-таки getBoundingClientRect() - не лучшее решение.
Упрощённый пример
<div id="content" style="background: green;">
text
</div>
<div id="banner" style="background: lightgreen; padding: 5px; overflow: hidden">
<div>
click
</div>
<div>
click
</div>
</div>
<script>
var banner = document.getElementById('banner');
var content = document.getElementById('content');
banner.onclick = function (e) {
banner.style.height = (content.getBoundingClientRect().bottom - content.getBoundingClientRect().top) + 'px';
alert('content: ' + (content.getBoundingClientRect().bottom - content.getBoundingClientRect().top));
alert('banner: ' + (banner.getBoundingClientRect().bottom - banner.getBoundingClientRect().top));
}
</script>