The advanced checkbox hack comes to mind - this allows you to use a hidden checkbox to control an element to indicate on/off
In this example below, clicking the image changes the styles by which you can indicate selected or not
Here's one way to use it
HTML
<table id="calendar">
<tbody>
<tr>
<td>
<!-- duplicate this table cell as many times as needed but
give each input an id and update the label's for attributes -->
<label for="toggle-1"><img src="someimage.jpg"><!-- this can be an image, text whatever --></label>
<input type="checkbox" id="toggle-1">
<div>select</div>
</td>
</tr>
</tbody>
</table>
CSS
/* Checkbox Hack */
#calendar input[type=checkbox] {
position: absolute;
top: -9999px;
left: -9999px;
}
#calendar label {
-webkit-appearance: push-button;
-moz-appearance: button;
display: inline-block;
margin: 60px 0 10px 0;
cursor: pointer;
}
/* Default State */
#calendar div {
background: red;
width: 400px;
height: 100px;
line-height: 100px;
color: white;
text-align: center;
}
/* Toggled State */
#calendar input[type=checkbox]:checked ~ div {
background: green;
}
#calendar input[type=checkbox]:checked ~ div:after {
content: "ed"
}
And here's an example I put together after playing a little more where it doesn't look like a separate elements:
http://jsfiddle.net/8nz1k2wb/
It's something you can change to suit your needs
http://timpietrusky.com/advanced-checkbox-hack