JSFiddle - React, Tailwind, and code Playground
No JS: Tabs That Scale Down to Menu
by Jennifer Perrin
HTML
<!-- TAB CONTROLLERS -->
<input id="panel-1-ctrl"
class="panel-radios visuallyhidden" type="radio" name="tab-radios" checked>
<input id="panel-2-ctrl"
class="panel-radios visuallyhidden" type="radio" name="tab-radios">
<input id="panel-3-ctrl"
class="panel-radios visuallyhidden" type="radio" name="tab-radios">
<input id="panel-4-ctrl"
class="panel-radios visuallyhidden" type="radio" name="tab-radios">
<input id="panel-5-ctrl"
class="panel-radios visuallyhidden" type="radio" name="tab-radios">
<input id="nav-ctrl"
class="panel-radios visuallyhidden" type="checkbox" name="nav-checkbox">
<header id="introduction">
<h1>No JS: Tabs That Scale Down to Menu</h1>
</header>
<!-- TABS LIST -->
<ul id="tabs-list">
<!-- MENU TOGGLE -->
<label id="open-nav-label" for="nav-ctrl"></label>
<li id="li-for-panel-1">
<label class="panel-label"
for="panel-1-ctrl">Radio Toggles</label>
</li><!--INLINE-BLOCK FIX
--><li id="li-for-panel-2">
<label class="panel-label"
for="panel-2-ctrl">Input :checked</label>
</li><!--INLINE-BLOCK FIX
--><li id="li-for-panel-3">
<label class="panel-label"
for="panel-3-ctrl">The Tabs</label>
</li><!--INLINE-BLOCK FIX
--><li id="li-for-panel-4">
<label class="panel-label"
for="panel-4-ctrl">Tab :hover</label>
</li><!--INLINE-BLOCK FIX
--><li id="li-for-panel-5">
<label class="panel-label"
for="panel-5-ctrl">Menu</label>
</li>
<label id="close-nav-label" for="nav-ctrl">Close</label>
</ul>
<!-- THE PANELS -->
<article id="panels">
<div class="container">
<section id="panel-1">
<main>
<h1>Radio Toggles</h1>
<p>In this demo, <code>labels</code> for hidden <code>radios</code> toggle the content. This is based on the behavior in which clicked <code>labels</code> for a <code>radio</code> or <code>checkbox</code> input will check that...
CSS
@import url(http://fonts.googleapis.com/css?family=Open+Sans:300,400|Inconsolata);
ul#tabs-list {
list-style: none;
text-align: center;
border-bottom: 1px solid #dfdfdf;
margin: 0;
padding: 0;
}
label.panel-label {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
display: block;
width: 100%;
color: #bdc3c7;
cursor: pointer;
background-color: #ecf0f1;
-webkit-transition-property: border-top, background-color, color;
transition-property: border-top, background-color, color;
-webkit-transition-duration: 200ms;
transition-duration: 200ms;
}
label.panel-label:hover {
color: #c0392b;
}
#panels {
background-color: white;
}
#panels .container {
margin: 0 auto;
width: 90%;
}
#panels section header label.panel-label {
padding: 12px 24px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
#panels section main {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
max-height: 0;
opacity: 0;
-webkit-transition: opacity 600ms;
transition: opacity 600ms;
overflow-y: hidden;
}
#panel-1-ctrl:checked ~ #panels #panel-1 main {
max-height: initial;
opacity: 1;
padding: 48px 24px;
}
#panel-2-ctrl:checked ~ #panels #panel-2 main {
max-height: initial;
opacity: 1;
padding: 48px 24px;
}
#panel-3-ctrl:checked ~ #panels #panel-3 main {
max-height: initial;
opacity: 1;
padding: 48px 24px;
}
#panel-4-ctrl:checked ~ #panels #panel-4 main {
max-height: initial;
opacity: 1;
padding: 48px 24px;
}
#panel-5-ctrl:checked ~ #panels #panel-5 main {
max-height: initial;
opacity: 1;
padding: 48px 24px;
}
@media all and (max-width: 767px) {
#nav-ctrl:checked ~ #tabs-list #li-for-panel-1 {
max-height: 46px;
opacity: 1;
}
#nav-ctrl:checked ~ #tabs-list #li-for-panel-2 {
max-height: 46px;
opacity: 1;
}
#nav-ctrl:checked ~ #tabs-list #li-for-panel-3 {
...