Advertisement
  1. Web Design
  2. Navigation Design

Cómo crear un menú fuera del lienzo (off-canvas) con CSS y un toque de JavaScript

by
Read Time:4 minsLanguages:

Spanish (Español) translation by Carlos (you can also view the original English article)

En este tutorial veremos un método simple, pero efectivo, para crear un menú fuera del lienzo (off-canvas) con HTML, CSS y JavaScript.

Para tener una idea inicial de lo que vamos a crear, mira la demostración en CodePen (revisa la versión más grande para una mejor experiencia):

Nota: Este tutorial no se enfocará en cómo hacer que el menú fuera del lienzo sea accesible o responsivo, por lo que esos serían, sin duda, los siguientes pasos válidos.

1. Inicia con el marcado

Nuestro marcado consiste en dos elementos de envoltura:

  • el elemento .top-banner
  • el elemento .top-nav

Aquí está el código HTML:

2. A continuación necesitamos algo de CSS

Con el marcado preparado, a continuación examinemos los estilos más importantes que se requieren para nuestro menú.

Nota: En aras de la legibilidad, este código CSS no está optimizado, notarás propiedades duplicadas que quizá quieras eliminar en tu propia versión.

Estilizando el elemento top-banner

El elemento .top-banner se ve así:

How the top-banner element looks likeHow the top-banner element looks likeHow the top-banner element looks like

En torno a sus estilos, hacemos lo siguiente:

  • Ajusta su ancho igual al ancho de la ventana menos el ancho del elemento .menu-wrapper.
  • Ajusta su altura igual a la altura de la ventana.
  • Defínelo como un contenedor flexible. Esto forzará a su superposición para que cubra toda la altura del elemento principal.
  • Usa flexbox para centrar de manera vertical el contenido de la superposición.

Aquí están los estilos que necesitaremos para lograr todo eso:

Estilizando al elemento top-nav

El elemento .top-nav se ve así:

How the top-nav element looks likeHow the top-nav element looks likeHow the top-nav element looks like

En este caso, haremos lo siguiente:

  • Especificamos los elementos secundarios directos como elementos fijos que cubren la altura de la ventana.
  • Utilizamos flexbox para alinear verticalmente el elemento .fixed-menu.
  • De manera predeterminada, ocultamos el elemento .menu-wrapper. Para hacerlo, no le damos un valor de propiedad como display: none. De hecho, usamos la función translate () para moverlo 200 px hacia la izquierda. Recuerda que el ancho del elemento es de 350 px, por lo que parte de él todavía está dentro de la ventana gráfica. No obstante, no es visible porque el elemento está posicionado debajo del elemento .fixed-menu.
  • Ocultamos la lista del menú.

Mira los estilos CSS correspondientes a continuación:

3. Ahora algo de JavaScript

En este punto, utilizaremos un sencillo código de JavaScript para manipular el estado del menú fuera del lienzo.

Describamos las acciones necesarias:

  • Cuando se hace clic en el botón .menu-open, el menú debe aparecer con un agradable efecto deslizante hacia dentro y, simultáneamente, la superposición debe ser empujada hacia la derecha. De forma opcional, podemos hacer muchas más cosas durante este estado. En nuestro ejemplo, añadimos una sombra al seudoelemento ::before de la superposición y revelamos la lista del menú usando un efecto de desvanecimiento.
  • Cuando se hace clic en el botón .menu-close, el menú debería desaparecer con un agradable efecto deslizante hacia fuera y, simultáneamente, la superposición debe ser empujada hacia la izquierda.

Aquí está el código JavaScript que implementa este comportamiento:

Y en seguida encontrarás los estilos CSS asociados:

4. Compatibilidad con navegadores

Esta demostración funcionará bien únicamente en los navegadores de escritorio. Los dispositivos móviles requerirán un diseño de página diferente, pero eso está fuera del alcance de este tutorial. Como siempre, utilizamos Babel para compilar el código ES6 a ES5.

El único pequeño problema que encontré mientras lo probaba es el cambio en la representación del texto que ocurre cuando se anima la superposición. Aunque probé varios enfoques propuestos en diferentes hilos de Stack Overflow, no pude hallar una solución simple para todos los sistemas operativos y navegadores. Así que ten presente que quizá veas problemas de representación (rendering) de las fuentes pequeñas mientras se anima la superposición.

Conclusión

¡Eso es todo, amigos! Logramos crear un útil menú fuera del lienzo con un código relativamente sencillo.

Espero que hayas disfrutado el resultado final y que lo uses como inspiración para crear menús fuera del lienzo aún más potentes. Y por supuesto, si creas alguno, ¡no olvides compartirlo con nosotros!

Aprende más técnicas fuera del lienzo

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.