
In updating an existing character sheet, I'm inclined to replace the use of transparent checkboxes/radios and spans (a practice described in CSS Wizardry ) with buttons and hidden inputs. This turned out to be similar to the Swap Visible Areas practice described in CSS Wizardry. Just going down the list of examples from CSS Wizardry (Wizardry approach above the hr, button approach below the hr) (with basic javascript event and value updates rather than "on", "getAttrs", and "setAttrs"): Styling Checkboxes and Radio Buttons Alternative Checkboxes Fill Radio Buttons to the Left Cycling Button As I see it: Pros: Don't have to worry about matching size or negative margins to overlap the clickable transparent input with the displayed span Easier to style the "checked" / "unchecked" inside of spans than using "::before" selector and "content" styling property Properly placed inside of containing element (note the proximity or overlap on the border in the containing div with 1px padding) Receives keyboard accessibility focus aligns easily with parent divs (especially with flex) not relying on "checked" allows the attribute to be duplicated across multiple inputs with the same name (allowing the control to appear in multiple places on the sheet) using classes, the hidden input can be higher in the hierarchy than the buttons (so "page" buttons don't have to be in the same container as the hidden input) Can use line breaks in the html Cons: Uses javascript to update the attribute value For "radio"-like behavior, needs css styling for each potential value For "fill radios to the left" need a series of "greater-than" (or "less-than") classes on the element. (I'd like to use `data-val-gt="1 2 3 4"` and selector `[data-val-gt~="3"]` but it looks like the data-val-gt gets stripped.) I've found this very useful in my updates to a large existing sheet, and I hope others here will agree. I'm bringing it forward for discussion / consideration here before I put too much time into setting these up across the sheet for a PR.