This is off the cuff thinking and not actually tried and tested.
Give the html and body elements 100% height to make them fit to the content length rather than stopping at the viewport height/length.
Set
display: table; with a 100% width and height on a "wrapper" element.
Set display: table-row on a child element of "wrapper" with 100% height, Put your "columns" as child elements of this inner element, with 100% height and display: table-cell;.
That should be a starting point at least. Not forgetting to allow for padding and margins in the 100% length/height calculations.