JSFiddle - React, Tailwind, and code Playground

by Emily Humphrey

HTML

<div><div class="js-aspect-ratio" data-ratio="3:2">2:3</div></div>
<div><div class="js-aspect-ratio" data-ratio="4:6">4:6</div></div>
<div><div class="js-aspect-ratio">16:9</div></div>

CSS

body{
    margin: 0;
    padding: 0;
}
.js-aspect-ratio{
    display: block;
    margin: 0 0 20px;
    background: #888;
}

JavaScript

var AspectRatio = Object.create(HTMLElement.prototype);
function AspectRatio(element){
    this.element = element;
}
console.log(AspectRatio)

AspectRatio.findRatio = function(){
    var ratio = this.element.attributes("data-ratio");
    console.log(ratio)
}

$(".js-aspect-ratio").each(function(){
    var init = new AspectRatio(this);
    init.findRatio();
});

/*
Site.prototype = {
}

function Site(site){
    this.site = site;
}

Site.prototype.aspectRatio = {
	// Initialize method
	init: function(){
		var parent = this;
		
		parent.findElements();
		parent.resizeElements();
	},
	// Find Elements method
	findElements: function(){
		var parent = this;
		parent.elements = []; 
		$(".js-aspect-ratio").each(function () {
			parent.elements.push($(this));
		});
	},
	// 
	resizeElements: function(){
		var parent = this;
		for(var i = 0; i < parent.elements.length; i++){
			var element = parent.elements[i];
			var ratio = element.attr("data-ratio") || "16:9";
			var ratio = ratio.split(":");
			var ratioWidth = ratio[0];
			var ratioHeight = ratio[1];
			var parentElement = element.parent();
			element.css({"height": "", "width": ""});
			var parentHeight = parentElement.height();
			var parentWidth = parentElement.width();
			var base;
			if(parentWidth > (parentHeight/ratioHeight)*ratioWidth){
				base = parentWidth/ratioWidth;
			} else {
				base = parentHeight/ratioHeight;
			}
			element.css({"height": (base*ratioHeight)+"px", "width": (base*ratioWidth)+"px"});
		}
	}
};

var theCharles = new Site($(this));

theCharles.aspectRatio.init();
*/