- var blocks = 82;

.container
	.surface
		- for (var b = 1;b <= blocks;++b) {
			div(class="block b" + b)
				.block-outer
					.block-inner
						.left
						.front
						.right
						.top
		- }
View Compiled
$sqSize: 16px;
$contW: 100%;
$contH: 100%;
$xSpaces: 33;
$ySpaces: 33;
$zSpaces: 4;
$xAngle: 54.75deg;
$zAngle: 45deg;
$dur: 6s;

// * Block placement *
// parameters: x-pos,y-pos,z-pos, width,depth,height, color
$blocks:
	// base
	(1,2,1, 1,32,1)
	(1,1,1, 33,1,1)
	(2,5,1, 3,1,1)
	(5,2,1, 1,4,1)
	(2,9,1, 7,1,1)
	(9,2,1, 1,8,1)
	(2,13,1, 3,1,1)
	(5,10,1, 1,4,1)
	(10,5,1, 3,1,1)
	(13,2,1, 1,4,1)
	(2,17,1, 15,1,1)
	(17,2,1, 1,16,1)
	(2,21,1, 3,1,1)
	(5,18,1, 1,4,1)
	(18,5,1, 3,1,1)
	(21,2,1, 1,4,1)
	(2,25,1, 7,1,1)
	(9,18,1, 1,8,1)
	(18,9,1, 7,1,1)
	(25,2,1, 1,8,1)
	(2,29,1, 3,1,1)
	(5,26,1, 1,4,1)
	(10,21,1, 3,1,1)
	(13,18,1, 1,4,1)
	(18,13,1, 3,1,1)
	(21,10,1, 1,4,1)
	(26,5,1, 3,1,1)
	(29,2,1, 1,4,1)
	
	// columns
	(5,1,2, 1,1,2)
	(5,5,2, 1,1,2)
	(5,9,2, 1,1,2)
	(5,13,2, 1,1,2)
	(5,17,2, 1,1,2)
	(5,21,2, 1,1,2)
	(5,25,2, 1,1,2)
	(5,29,2, 1,1,2)
	(9,1,2, 1,1,2)
	(9,9,2, 1,1,2)
	(9,17,2, 1,1,2)
	(9,25,2, 1,1,2)
	(13,1,2, 1,1,2)
	(13,5,2, 1,1,2)
	(13,17,2, 1,1,2)
	(13,21,2, 1,1,2)
	(17,1,2, 1,1,2)
	(17,17,2, 1,1,2)
	(21,1,2, 1,1,2)
	(21,5,2, 1,1,2)
	(21,9,2, 1,1,2)
	(21,13,2, 1,1,2)
	(25,1,2, 1,1,2)
	(25,9,2, 1,1,2)
	(29,1,2, 1,1,2)
	(29,5,2, 1,1,2)
	(33,1,2, 1,1,2)
	
	// tops of columns
	(5,1,4, 1,1,1)
	(5,5,4, 1,1,1)
	(5,9,4, 1,1,1)
	(5,13,4, 1,1,1)
	(5,17,4, 1,1,1)
	(5,21,4, 1,1,1)
	(5,25,4, 1,1,1)
	(5,29,4, 1,1,1)
	(9,1,4, 1,1,1)
	(9,9,4, 1,1,1)
	(9,17,4, 1,1,1)
	(9,25,4, 1,1,1)
	(13,1,4, 1,1,1)
	(13,5,4, 1,1,1)
	(13,17,4, 1,1,1)
	(13,21,4, 1,1,1)
	(17,1,4, 1,1,1)
	(17,17,4, 1,1,1)
	(21,1,4, 1,1,1)
	(21,5,4, 1,1,1)
	(21,9,4, 1,1,1)
	(21,13,4, 1,1,1)
	(25,1,4, 1,1,1)
	(25,9,4, 1,1,1)
	(29,1,4, 1,1,1)
	(29,5,4, 1,1,1)
	(33,1,4, 1,1,1)
	;
$bkColor: #5785f6;

@mixin placeBlock($args) {
	$defaultArgs: 1 1 1 1 1 1 $bkColor;
	$givenArgs: ();
	
	@for $a from 1 through length($defaultArgs) {
		@if $a <= length($args) {
			$givenArgs: append($givenArgs, nth($args,$a), space);
		} @else {
			$givenArgs: append($givenArgs, nth($defaultArgs, $a), space);
		}
	}

	$x: nth($givenArgs,1);
	$y: nth($givenArgs,2);
	$z: nth($givenArgs,3);
	$w: nth($givenArgs,4);
	$d: nth($givenArgs,5);
	$h: nth($givenArgs,6);
	$c: nth($givenArgs,7);
	
	display: inherit;
	transform: translate3d(
		1em*($x - 1),
		1em*(-$y - ($d - 1)),
		(1em*$z) + (1em*($h - 1))
	);
	.block-inner div {
		background-color: $c;
		&.top, &.bottom {
			@if $w > 1 {
				width: 1em * $w;
			}
			@if $d > 1 {
				height: 1em * $d;
			}
		}
		&.top	{
			transform: rotateX(-90deg) translateY(-1em*($d - 1));
		}
		&.bottom {
			transform: rotateX(-90deg) translateY(-1em*($d - 1)) translateZ(1em*$h);
		}
		&.front, &.back {
			@if $w > 1 {
				width: 1em * $w;
			}
			@if $h > 1 {
				height: 1em * $h;
			}
		}
		&.front {
			transform: translateZ(1em * ($d - 1));
		}
		&.left, &.right {
			@if $d > 1 {
				width: 1em * $d;
			}
			@if $h > 1 {
				height: 1em * $h;
			}
		}
		&.right {
			transform: rotateY(-270deg) translate3d(1em, 0, 1em*($w - $d));
		}
	}
}

* {
	border: 0;
	box-sizing: border-box;
	margin: 0;
	padding: 0;
}
body {
	font-size: $sqSize;
	height: 100vh;
	margin: 0;
}
.container {
	background: #87a9f9;
	display: flex;
	margin: auto;
	overflow: hidden;
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	width: $contW;
	height: $contH;
	transform-style: preserve-3d;
}
.surface {
	animation: reveal $dur linear infinite;
	display: block;
	width: 1em * $xSpaces;
	height: 1em * $ySpaces;
	margin: auto;
	transform-style: preserve-3d;
	transform: translateY((1em * $zSpaces) * 0.25) rotateX($xAngle) rotateZ($zAngle) translate(5em,-5em);
	will-change: transform;
}
.block {
	display: none;
	transform-style: preserve-3d;
	position: absolute;
	bottom: 0;
}
.block-inner > div {
	display: flex;
	flex-wrap: wrap;
	align-content: flex-start;
	position: absolute;
	width: 1em;
	height: 1em;
	&.front, &.back, &.left, &.right {
		&:before {
			background-color: #000;
			content: "";
			width: 100%;
			height: 100%;
		}
	}
	&.front, &.back {
		&:before {
			opacity: 0.2;
		}
	}
	&.left, &.right {
		&:before {
			opacity: 0.4;
		}
	}
}
.block-outer, .block-inner {
	position: relative;
	width: 1em;
	transform-style: preserve-3d;
}
.block-inner {
	transform: rotateX(-90deg) translateZ(1em);
}
.back {
	transform: translateZ(-1em) rotateY(180deg);
}
.left {
	transform-origin: center left;
	transform: rotateY(270deg) translateX(-1em);
}
.right {
	transform-origin: top right;
}
.top, .bottom {
	transform-origin: top center;
}

// * Render blocks *
// one block only
@if length(nth($blocks,1)) == 1 {
	.b1 {
		@include placeBlock($blocks);
	}
}
// more than one block
@else {
	@for $b from 1 through length($blocks) {
		.b#{$b} {
			@include placeBlock(nth($blocks, $b));
		}
	}
}

// * Exceptions (for parts of blocks) *
.block:nth-child(n + 56) {
	.top, .left {
		display: none;
	}
	.front, .front:before {
		background-color: transparent;
	}
	.front {
		background-image: linear-gradient(-45deg,$bkColor 50%,transparent 50%);
		&:before {
			background-image: linear-gradient(-45deg,#000 50%,transparent 50%);
		}
	}
}
.block:nth-child(n + 56):nth-child(-n + 62),
.block:nth-child(68),
.block:nth-child(70),
.block:nth-child(n + 74):nth-child(-n + 76),
.block:nth-child(80) {
	.right, .right:before {
		background-color: transparent;
	}
	.right {
		background-image: linear-gradient(45deg,$bkColor 50%,transparent 50%);
		&:before {
			background-image: linear-gradient(45deg,#000 50%,transparent 50%);
		}
	}
}

// * Animation *
@keyframes reveal {
	from, 45%, to {
		transform: translateY((1em * $zSpaces) * 0.25) rotateX($xAngle) rotateZ($zAngle) translate(5em,-5em);
	}
	65%, 80% {
		transform: translateY((1em * $zSpaces) * 0.25) rotateX($xAngle) rotateZ($zAngle - 90) translate(5em,-5em);
	}
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.