html, body { height: 100%; padding: 0; margin: 0; }
$url: 'http://defwalls.com/wallpapers-n/women-people-faces-_4209-43.jpg';
$weight: 0.6; // 'weights' the initial disordering
$ratio: 1680/1050; // width over height
$pixel-dimension: 100px;
$max-dimension: 1000px; // must be multiple of pixel-dimension
$width: null;
$height: null;
@if $ratio < 1 {
$height: $max-dimension;
$width: round($height * $ratio / $pixel-dimension) * $pixel-dimension;
} @else {
$width: $max-dimension;
$height: round($width / $ratio / $pixel-dimension) * $pixel-dimension;
}
.pixelated {
left: 50%; top: 50%;
transform: translate(-50%, -50%);
position: relative;
width: $width;
height: $height;
-webkit-filter: grayscale(100%);
&:after {
content: "";
display: block;
position: absolute;
top: 0; left: 0;
width: $width; height: $height;
background-image: url($url);
background-size: $width $height;
opacity: 0;
transition: opacity 2s 5s;
}
&:hover:after {
opacity: 1;
}
}
$rows: -1 + $height / $pixel-dimension;
$cols: -1 + $width / $pixel-dimension;
[class^='pixel-'] {
position: absolute;
width: $pixel-dimension;
height: $pixel-dimension;
background-image: url($url);
background-size: $width $height;
border-radius: 50%;
box-shadow: 0 0 3px 2px rgba(255, 255, 255, 0.2);
transition: 3s ease-in-out;
transform: scaleX(0.9) scaleY(0.9);
}
@for $i from 0 through $rows {
@for $j from 0 through $cols {
.pixel-#{$i}-#{$j} {
background-position: (-$j * $pixel-dimension) (-$i * $pixel-dimension);
left: (1 - $weight) * $j * $pixel-dimension + $weight * random() * ($cols - 1) * $pixel-dimension;
top: (1 - $weight) * $i * $pixel-dimension + $weight * random() * ($rows - 1) * $pixel-dimension;
}
.pixelated:hover .pixel-#{$i}-#{$j} {
left: $j * $pixel-dimension;
top: $i * $pixel-dimension;
}
}
}