<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>responsive images</title>
	<meta name="viewport" content="width=device-width" />

	<style>
		* {
			margin: 0;
			padding: 0;
		}

		html, body {
			background-size: contain;
			background: url('responsive_instructions.svg') no-repeat center center;
			height: 100%;
			position: relative;
			width: 100%;
		}

		body:before {
			border: solid 5px blue;
			bottom: 0;
			content: '';
			left: 0;
			opacity: 0;
			position: fixed;
			right: 0;
			top: 0;
			-webkit-transition: opacity .25s;
			transition: opacity .25s;
		}

		.drag-active:before {
			opacity: 1;
		}

		img {
			height: auto;
			width: 100%;
			vertical-align: top;
		}

		.row {
			clear: both;
		}

		.tile {
			box-sizing: border-box;
			float: left;
		}

		.row.span-1 .tile {
			width: 100%;
		}

		.row.span-2 .tile {
			width: calc(100% / 2);
		}

		.row.span-3 .tile {
			width: calc(100% / 3);
		}

		.row.span-4 .tile {
			width: calc(100% / 4);
		}

		.row.span-5 .tile {
			width: calc(100% / 5);
		}
	</style>
</head>
<body>

<script>
	var dropArea = document,
		activeClass= 'drag-active',
		rows = 5,
		image;

	function tileImage() {
		var imgArr = document.querySelectorAll('.row .tile img'),
			img,
			i = 0,
			len = imgArr.length;

		for(; i <= len; i++) {
			img = imgArr[i];

			if(img) {
				img.src = image;
			}
		}
	}

	function createRow(numTiles) {
		var i = 1,
			row = document.createElement('div'),
			img = new Image(),
			tile;

		row.classList.add('row', 'span-' + numTiles);

		for(; i <= numTiles; i++) {
			tile = document.createElement('div');
			tile.classList.add('tile');
			tile.appendChild(img.cloneNode());

			row.appendChild(tile);
		}

		return row;
	}

	function createRows() {
		var i = 1,
			fragment = document.createDocumentFragment(),
			row;

		for(; i <= rows; i++) {
			row = createRow(i);

			fragment.appendChild(row);
		}

		document.body.appendChild(fragment);
	}

	function dropImage(e) {
		e.preventDefault();
		document.body.classList.remove(activeClass);

		var file = e.dataTransfer.files[0],
			reader = new FileReader();

		reader.onload = function (e) {
			image = e.target.result;

			tileImage();
		};

		reader.readAsDataURL(file);
	}

	function bindEvents() {
		dropArea.addEventListener('dragenter', function(e) {
			document.body.classList.add(activeClass);
		}, false);

		dropArea.addEventListener('dragleave', function(e) {
			document.body.classList.remove(activeClass);
		}, false);

		dropArea.addEventListener('dragover', function(e) {
			// allow the drop
			e.preventDefault();
		}, false);

		dropArea.addEventListener('drop', dropImage, false);
	}

	function init() {
		bindEvents();
		createRows();
	}

	if(document.addEventListener) {
		document.addEventListener('DOMContentLoaded', init);
	}
</script>

</body>
</html>