javascript equal height blocks

Works in all modern browsers and IE9+.

javascript:

function heightsEqualizer(selector) {
    var elements = document.querySelectorAll(selector),
        max_height = 0,
        len = 0,
        i;
        
    if ( (elements) && (elements.length > 0) ) {
        len = elements.length;
    
        for (i = 0; i < len; i++) { // get max height
			elements[i].style.height = ''; // reset height attr
            if (elements[i].clientHeight > max_height) {
                max_height = elements[i].clientHeight;
            }
        }

        for (i = 0; i < len; i++) { // set max height to all elements
            elements[i].style.height = max_height + 'px';
        }
    }
}

if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', function() {
        heightsEqualizer('.js-equal-height');
    });
	window.addEventListener('resize', function(){
		heightsEqualizer('.js-equal-height');
	});
}

setTimeout(function () { // set 1 second timeout for having all fonts loaded
	heightsEqualizer('.js-equal-height');
}, 1000);

html:

<div class="blocks">
    <div class="block js-equal-height">Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
    </div>
    <div class="block js-equal-height">Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
        Lorem Ipsum text.<br/> 
    </div>
    <div class="block js-equal-height">Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
    </div>
    <div class="block js-equal-height">Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
        Lorem Ipsum text.<br />
        Lorem Ipsum text.<br/> 
        Lorem Ipsum text.<br/> 
    </div>
</div>

css:

* {
    box-sizing: border-box;
}

.blocks {
    float: left;
    width: 100%;
}
.block {
    float: left;
    width: 20%;
    background: #ffa;
    padding: 10px;
    margin: 10px;
}

2 thoughts on “javascript equal height blocks”

  1. After an entire day of searching, finally found the solution. Thanks :) Works wonderfully with DOM content.

    Reply

Leave a Reply to Vaibhavi Cancel reply