I've heard it so many times: CSS is not a programming language — or — why do it in CSS, when you can do it in JavaScript?
Why, indeed? Because I love CSS, and love a fun challenge!
In this tutorial, we'll be building a CSS Word Search Game in CSS:
In an earlier article, I looked into creative ways you can utilize CSS grid.
The approach for the word game is similar: A 12x12 grid using grid-area
for the words.
Let's dive in.
Markup
For each word, we create a <fieldset>
:
<fieldset name="w7" class="horizontal"> <input type="checkbox" value="G"> <input type="checkbox" value="A"> <input type="checkbox" value="P"> </fieldset>
name
is a unique identifier for the word, and for class
we can use either horizontal
or vertical
.
CSS
First, we need a wrapper with the 12x12 grid:
.word-search { aspect-ratio: 1 / 1; container-type: inline-size; display: grid; font-family: system-ui, sans-serif; font-size: 3.5cqi; grid-template-columns: repeat(12, 1fr); grid-template-rows: repeat(12, 1fr); padding: 1px; }
Then, we style the <input type="checkbox">
-tags:
input { all: unset; aspect-ratio: 1 / 1; background: #FFF; display: grid; place-content: center; user-select: none; width: calc((100cqi / 12) - 1px); &:checked { background: var(--bg, #FF0); color: var(--c, #000); } &::after { content: attr(value); } }
First, we unset all the defaults, then set the width of each to a 12th of the total width minus the gap.
A pseudo-element with the value
of the input is placed ::after
.
Now, let's add the CSS for the word we created in the markup earlier – including the "logic" of the game:
[name=w7] { grid-area: 2/ 10 / 2 / 13; &:has(:checked + :checked + :checked) { --bg: #FF69B4; } }
So, what's going on?
The grid-area
-declaration places the word in the second row, the tenth column, ends at the same row and at the 13th column, as the word is 3 characters, so 10 + 3 = 13
.
Next, we check if all the <input>
s in the fieldset are :checked
. Because it's a 3-letter word, we need to check for :checked
3 times.
Can you guess how many :checked
are required for 4-letter words?! 😂
Let's click on those 3 letters — the final 3 in the second row. When you click on a single letter, the background color turns yellow, but when all 3 have been clicked/checked, we get:
And that's it — now find 25 words more (or just click all the letters!). When you've found all the words, you'll have 3 slots left, with the letters A, B and C.
Demo
Top comments (0)