Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Front-end Challenge: 5x5 grid of blocks that change color when ... (click download and run this in your browser)
<!--
Create a 5 x 5 grid of blue blocks. When a block is clicked it turns red. Its adjacent block turns green.
If a red block is on the end of a row, the adjacent green block is on the line below on the first column,
et cetera. When another block is clicked, the previous red/green blocks go back to blue. There will only
ever be one red and one green block on the screen, the rest are always blue.
Only worry about Chrome.
------
I solved this without javascript by making use of infinite transitions to preserve state. Kind of a fun hack
:) The only edge case is the bottom right block and getting the adjacent green block to appear on the top
left block. Right now it only shows up temporarily (on :active). I think there may be a way to register a
keyframe to get it to stay.
-->
<html>
<head>
<style type="text/css">
#wrapper { width: 555px; }
#wrapper:active a:not(:active) {
-webkit-transition: background 0s;
background: blue;
}
a {
background: rgb(0,0,254); /* 254 on purpose, cant be exact same color as above */
margin: 0 10px 10px 0;
float: left;
width: 100px;
height: 100px;
-webkit-transition: background 0s 99999999s;
}
a:active { -webkit-transition: background 0s; background: red; }
a:active + a { background: green !important; }
a:last-child:after {
width: 100px;
height: 100px;
content: "";
position: absolute;
top: 8px;
left: 8px;
background: green;
opacity: 0;
display: none;
-webkit-transition: all 0s 99999999s;
}
a:last-child:active:after {
-webkit-transition: all 0s;
opacity: 1;
display: block;
}
</style>
</head>
<body>
<div id="wrapper">
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.