Crear un acordeón solamente con CSS3 y HTML5 (Parte I: uso de los radio button)

Sabemos que los botones de opción (en inglés, "radio button") son elementos usados en formularios web que sirven para seleccionar una única opción entre un grupo predeterminado de opciones.

Ya vimos cómo podemos aprovechar las propiedades de los "radio button" para Crear pestañas solamente con CSS3 y HTML5 sin utilizar ningún código Javascript. En esta oportunidad explicaré un método muy fácil y práctico para mostrar información con un efecto de acordeón. Empecemos.

El código HTML es relativamente simple. La etiqueta <div id="container"> es el contenedor principal. La etiqueta <header> contiene los títulos principal (<h1>) y secundario (<h2>). La etiqueta <section id="accordion"> contiene tres etiquetas <div> que conforman el acordeón propiamente dicho.

Dentro de cada etiqueta <div> tenemos un botón de opción <input type="radio" name="accordion-group" id="option-n"> enlazado a su correspondiente etiqueta <label for="option-n"> como título del acordeón y una etiqueta <article> con el contenido del acordeón.

<body>
<div id="container">
<header>
<h1>Accordion with CSS3 & HTML5 only</h1>
<h2>(use of radio-button)</h2>
</header>
<section id="accordion">
<div>
<input type="radio" name="accordion-group" id="option-1" />
<label for="option-1">Option 1</label>
<article>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. A, odit, quia hic ipsam laboriosam dignissimos suscipit eligendi! Aspernatur, ad, suscipit officiis repellat consequuntur quod quibusdam sint nobis magnam voluptates veritatis?</p>
</article>
</div>
<div>
<input type="radio" name="accordion-group" id="option-2" />
<label for="option-2">Option 2</label>
<article>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Unde, doloremque maiores excepturi iste porro cumque rem praesentium illo labore error quasi magni cupiditate rerum sequi dolores architecto consectetur harum soluta neque placeat culpa nesciunt molestias quam facilis ipsum ab aspernatur ut similique aperiam nemo tempore earum esse repellat provident eum blanditiis tempora molestiae! Optio, asperiores neque nam reiciendis ad rerum.</p>
</article>
</div>
<div>
<input type="radio" name="accordion-group" id="option-3" />
<label for="option-3">Option 3</label>
<article>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vel, ipsum ratione eos voluptates unde ut sint maiores nobis iste odit. Maiores, voluptatum, dolorem, deleniti debitis est ea numquam nesciunt in rerum fuga neque quas laudantium quo laboriosam doloremque nemo ab itaque aliquid accusamus accusantium veritatis consectetur necessitatibus iure soluta blanditiis facere quam aperiam suscipit obcaecati voluptatem tempore delectus temporibus culpa! Repellendus, maiores at itaque soluta voluptatum est iusto dolor ex fuga animi debitis necessitatibus consectetur. Dignissimos, optio, saepe, quos dolorum pariatur voluptatum quasi eveniet ipsam fugit accusantium voluptate ducimus cupiditate ullam nostrum unde eaque necessitatibus maxime sunt incidunt aliquid accusamus.</p>
</article>
</div>
</section>
</div>
</body>

Para controlar el comportamiento del acordeón haremos uso de las reglas CSS3. Con la regla #accordion input {display: none;} ocultamos los tres botones de opción y con la regla #accordion label {...} mostramos los títulos del acordeón.

Inicialmente, el contenido de cada opción está oculto con la regla #accordion article {...; height: 0; ...}. Cuando hacemos clic sobre la "Option n" se mostrará únicamente el <article> correspondiente a la opción seleccionada según la regla #accordion input:checked ~ article {...; height: auto; ...}. El resto de reglas CSS sirve para mejorar el aspecto visual del acordeón.

* {
font-family: Arial, sans;
margin: 0;
padding: 0;
box-sizing: border-box;
-moz-box-sizing: border-box;
}
h1, h2 {
margin: 1em 0 0 0;
text-align: center;
}
h2 {
margin: 0 0 1em 0;
}
#container {
margin: 0 auto;
width: 50%;
}
#accordion input {
display: none;
}
#accordion label {
background: #eee;
border-radius: .25em;
cursor: pointer;
display: block;
margin-bottom: .125em;
padding: .25em 1em;
z-index: 20;
}
#accordion label:hover {
background: #ccc;
}
#accordion input:checked + label {
background: #ccc;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
color: white;
margin-bottom: 0;
}
#accordion article {
background: #f7f7f7;
height:0px;
overflow:hidden;
z-index:10;
}
#accordion article p {
padding: 1em;
}
#accordion input:checked ~ article {
border-bottom-left-radius: .25em;
border-bottom-right-radius: .25em;
height: auto;
margin-bottom: .125em;
}

El resultado final está disponible en este enlace. En la segunda parte veremos cómo Crear un acordeón solamente con CSS3 y HTML5 utilizando las propiedades de las casillas de verificación (en inglés, "checkbox").

Hasta la próxima. ¡Abur!

César Vargas-Machuca

César Vargas-Machuca

Desarrollador web (front-end). Creador de sitios web adaptables al entorno del usuario (responsive web design) y optimizados para los motores de búsqueda (posicionamiento SEO). Lector frecuente. Apasionado por la buena música. Aprendiz empedernido. Amigo de los animales. Excesivamente puntual. Detesto el spam. Soltero, ayer y hoy. Peruano, ¡siempre!