No JS: Tabs That Scale Down to Menu

Radio Toggles

In this demo, labels for hidden radios toggle the content. This is based on the behavior in which clicked labels for a radio or checkbox input will check that input.

<input id="radio-1" type="radio" name="demo-radios">
<input id="radio-2" type="radio" name="demo-radios">
#radio-1: #radio-2:
<label for="radio-1">Toggle #radio-1</label>
<label for="radio-2">Toggle #radio-2</label>

Click one of the labels above and see its effect on the radios above it.

The radios for this pen's tabs are displayed semi-transparently at the top of this demo page.

Input :checked

In CSS, you can query based on the :checked selector for radios and checkboxes to style siblings down the DOM scope. To do this, we can use the ~. It will select same-level siblings after the given selector. Because the tab labels in this demo are nested and not immediate siblings, we will need to select their topmost parent that is at the same level as our input.

To demonstrate, we will do a simplified version of this with a checkbox:

<!-- invisible input and its label -->
<input id="demo-child-toggle" type="checkbox">
<label for="demo-child-toggle">Toggle #demo-child</label>

<-- parent to select first via "~" -->
<div id="demo-parent">
  <-- child to select through parent -->
  <div id="demo-child">#demo-child</div>

and in our CSS:

/* hiding our checkbox */
#demo-child-toggle {
  display: none;  
/* selecting the child */
#demo-child-toggle:checked ~ #demo-parent #demo-child {
  color: #c0392b;
  font-weight: bold;
  text-transform: uppercase;


As you can see, we can control the style of content that comes after a hidden input by toggling it via its label.

At this point you can probably get the picture for how we can conditionally display the tabbed panel content in this pen.

Website designed by Visionworks Interactive