Creación de un elegante botón de encendido/apagado con CSS3

Usar un botón es, hasta ahora, la forma preferida de interactuar con un material electrónico; como la radio, la TV, el reproductor de música e incluso un teléfono inteligente que tiene una función de comando de voz aún necesita al menos uno o dos botones físicos.

Además, en esta era digital, la botón también ha evolucionado en su forma digital, lo que lo hace más interactivo, dinámico y realmente fácil de hacer, en comparación con el botón físico.

Entonces, esta vez, vamos a crear un botón elegante e interactivo que se basa en este excelente diseño en Dribbble usando solo CSS.

Bueno, empecemos.

HTML

Comenzaremos con el botón colocando el siguiente marcado en nuestro documento HTML. Es muy simple, el botón se basaría en una etiqueta de anclaje, también tenemos un span junto a él para crear la luz indicadora, y luego se envuelven juntos dentro de un HTML5 section etiqueta.


<section>
 <a href="https://www.hongkiat.com/blog/css3-on-off-button/#button" id="button"></a>
 <span></span>
</section>

Así es como se ve inicialmente nuestro botón.

mirada inicial del botón

Estilo básico

En esta sección, comenzaremos a trabajar en el Estilos.

En primer lugar, aplicamos este fondo oscuro de Patrón sutil en el documento del cuerpo y centramos el section. Luego, también quitaremos el punteado outline sobre la :focus y :active enlace.


body {
 background: url('images/micro_carbon.png');
}
section {
 margin: 150px auto 0;
 width: 75px;
 height: 95px;
 position: relative;
 text-align: center;
}
:active, :focus {
 outline: 0;
}
Uso de fuente personalizada

Para el ícono del botón, usaremos una fuente personalizada de Font Awesome en lugar de una imagen. De esa manera, el ícono se podrá diseñar y escalar fácilmente a través de la hoja de estilo.

Descargue la fuente, almacene los archivos de fuente (eot, woff, ttf y svg) en el fuentes y luego coloque el siguiente código en su hoja de estilo para definir una nueva familia de fuentes.


@font-face {
 font-family: "FontAwesome";
 src: url("fonts/fontawesome-webfont.eot");
 src: url("fonts/fontawesome-webfont.eot?#iefix") format('eot'), 
 url("fonts/fontawesome-webfont.woff") format('woff'), 
 url("fonts/fontawesome-webfont.ttf") format('truetype'), 
 url("fonts/fontawesome-webfont.svg#FontAwesome") format('svg');
 font-weight: normal;
 font-style: normal;
}
icono de poder

El icono de poder que necesitamos para este botón está representado en número Unicode F011; si observa detenidamente el marcado HTML anterior, hemos puesto este carácter numérico dentro de la etiqueta de anclaje, pero como no hemos definido la costumbre font-family en el estilo de botón, el icono aún no se ha representado correctamente.

Otras lecturas: Unicode y HTML: Caracteres del documento

Aplicar estilo al botón

En primer lugar, tenemos que definir la costumbre font-family para el botón.

Nuestro botón será un círculo, podemos lograr el efecto de círculo usando el border-radius propiedad y establecer el valor en, al menos, la mitad de la del botón width.

Dado que estamos usando una fuente para el ícono, podemos configurar fácilmente el color y añadir text-shadow para el icono en la hoja de estilo también.

A continuación, también crearemos un efecto biselado para el botón. Este efecto es bastante complicado. Primero, tenemos que aplicar background-color: rgb(83,87,93); para la base de color del botón, luego agregamos hasta cuatro capas de box-shadows.

botón de encendido/apagado css3

a {
 font-family: "FontAwesome";
 color: rgb(37,37,37);
 text-shadow: 0px 1px 1px rgba(250,250,250,0.1);
 font-size: 32pt;
 display: block;
 position: relative;
 text-decoration: none;
 background-color: rgb(83,87,93);
 box-shadow: 0px 3px 0px 0px rgb(34,34,34), /* 1st Shadow */
  0px 7px 10px 0px rgb(17,17,17), /* 1nd Shadow */
  inset 0px 1px 1px 0px rgba(250, 250, 250, .2), /* 3rd Shadow */ 
  inset 0px -12px 35px 0px rgba(0, 0, 0, .5); /* 4th Shadow */
 width: 70px;
 height: 70px;
 border: 0;
 border-radius: 35px;
 text-align: center;
 line-height: 79px;
}

También hay un círculo más grande en el exterior del botón y usaremos el :before pseudo-elemento para ello en lugar de agregar marcas adicionales.

antes de pseudo

a:before {
 content: "";
 width: 80px;
 height: 80px;
 display: block;
 z-index: -2;
 position: absolute;
 background-color: rgb(26,27,29);
 left: -5px;
 top: -2px;
 border-radius: 40px;
 box-shadow: 0px 1px 0px 0px rgba(250,250,250,0.1), 
 inset 0px 1px 2px rgba(0, 0, 0, 0.5);
}

Otras lecturas: CSS: antes y: después pseudo-elementos (Hongkiat.com)

Luz indicadora

Debajo del botón, hay una pequeña luz para designar el estado de encendido y apagado. A continuación, aplicamos rojo para el color de la luz porque la alimentación está inicialmente APAGADA, también agregamos box-shadow para imitar el efecto de brillo de la luz.

indicador

a + span {
 display: block;
 width: 8px;
 height: 8px;
 background-color: rgb(226,0,0);
 box-shadow: inset 0px 1px 0px 0px rgba(250,250,250,0.5),
 0px 0px 3px 2px rgba(226,0,0,0.5);
 border-radius: 4px;
 clear: both;
 position: absolute;
 bottom: 0;
 left: 42%;
}

El efecto

En este punto, nuestro botón comienza a verse bien y solo necesitamos agregarle algunos efectos, por ejemplo, cuando se ‘hace clic’ en el botón, queremos que parezca que se está presionando y manteniendo presionado.

Para lograr el efecto, lo primero box-shadow en el botón se pondrá a cero y la posición se bajará un poco. También necesitamos ajustar un poco las intensidades de las otras tres sombras para que coincidan con la posición del botón.

botón presionado

a:active {
 box-shadow: 0px 0px 0px 0px rgb(34,34,34), /* 1st Shadow */
  0px 3px 7px 0px rgb(17,17,17), /* 2nd Shadow */
  inset 0px 1px 1px 0px rgba(250, 250, 250, .2), /* 3rd Shadow */ 
  inset 0px -10px 35px 5px rgba(0, 0, 0, .5); /* 4th Shadow */
 background-color: rgb(83,87,93);
 top: 3px;
}

Además, una vez que se ha hecho clic en el botón, debe permanecer presionado y el icono debe ‘brillar’ para indicar que la alimentación está encendida.

Para lograr tal efecto apuntaremos el botón usando el :target pseudo-claseluego cambia el color del ícono a blanco y agrega un text-shadow con color blanco también.

botón de encendido

a:target {
 box-shadow: 0px 0px 0px 0px rgb(34,34,34),
  0px 3px 7px 0px rgb(17,17,17), 
  inset 0px 1px 1px 0px rgba(250, 250, 250, .2), 
  inset 0px -10px 35px 5px rgba(0, 0, 0, .5);
 background-color: rgb(83,87,93);
 top: 3px;
 color: #fff;
 text-shadow: 0px 0px 3px rgb(250,250,250);
}

Otras lecturas: Usando: objetivo pseudo-clase

También tenemos que ajustar el box-shadow en el círculo fuera del botón, de la siguiente manera.


a:active:before, a:target:before {
 top: -5px;
 background-color: rgb(26,27,29);
 box-shadow: 0px 1px 0px 0px rgba(250,250,250,0.1), 
 inset 0px 1px 2px rgba(0, 0, 0, 0.5);
}

El indicador de luz cambiará del color rojo predeterminado al verde para enfatizar que la alimentación ya está ENCENDIDA.

botón se vuelve verde

a:target + span {
 box-shadow: inset 0px 1px 0px 0px rgba(250,250,250,0.5),
 0px 0px 3px 2px rgba(135,187,83,0.5);
 background-color: rgb(135,187,83);
}
Efecto de transición

Por último, para que el efecto del botón funcione sin problemas, también aplicaremos el siguiente efecto de transición.

Este fragmento a continuación agregará específicamente la transición al color propiedad y la text-shadow para 350ms en el elemento de anclaje.


a {
transition: color 350ms, text-shadow 350ms;
 -o-transition: color 350ms, text-shadow 350ms;
 -moz-transition: color 350ms, text-shadow 350ms;
 -webkit-transition: color 350ms, text-shadow 350ms;
}

Este segundo fragmento a continuación agregará la transición para el background-color y box-shadow propiedad en el indicador de luz.


a:target + span {
transition: background-color 350ms, box-shadow 700ms;
 -o-transition: background-color 350ms, box-shadow 700ms;
 -moz-transition: background-color 350ms, box-shadow 700ms;
 -webkit-transition: background-color 350ms, box-shadow 700ms;
}

Resultado final

Hemos revisado todos los estilos que necesitamos, ahora puede ver el resultado final en vivo y descargar el archivo fuente desde los enlaces a continuación.

  • Manifestación
  • Fuente de descarga

Bono: cómo apagarlo

Aquí viene el bono. Si probó el botón de la demostración anterior, notó que solo se puede hacer clic en el botón una vez, y eso es para encenderlo, entonces, ¿cómo lo apagamos?

Desafortunadamente, tenemos que hacerlo con jQuery, pero también es muy simple. A continuación se muestra todo el código jQuery que necesitamos.


$(document).ready(function(){
 $("https://www.hongkiat.com/blog/css3-on-off-button/#button").click(function(){
 $(this).toggleClass('on');
 });
});

El fragmento anterior agregará la clase ON en el ancla, y usamos el toggleClass función de jQuery para agregarlo. Entonces, cuando el #button se hace clic en, jQuery verificará si la clase ON se ha agregado o no: cuando no lo está, jQuery agregará la clase, y si se ha agregado, jQuery eliminará la clase.

Nota: No olvide incluir la biblioteca jQuery.

Ahora tenemos que cambiar un poco el Estilo. Simplemente reemplace todos los :target pseudo-elemento con el .on selector de clase, de la siguiente manera:


a.on {
 box-shadow: 0px 0px 0px 0px rgb(34,34,34),
  0px 3px 7px 0px rgb(17,17,17), 
  inset 0px 1px 1px 0px rgba(250, 250, 250, .2), 
  inset 0px -10px 35px 5px rgba(0, 0, 0, .5);
 background-color: rgb(83,87,93);
 top: 3px;
 color: #fff;
 text-shadow: 0px 0px 3px rgb(250,250,250);
}
a:active:before, a.on:before {
 top: -5px;
 background-color: rgb(26,27,29);
 box-shadow: 0px 1px 0px 0px rgba(250,250,250,0.1), 
 inset 0px 1px 2px rgba(0, 0, 0, 0.5);
}
a.on + span {
 box-shadow: inset 0px 1px 0px 0px rgba(250,250,250,0.5),
 0px 0px 3px 2px rgba(135,187,83,0.5);
 background-color: rgb(135,187,83);
}

Finalmente, intentémoslo en el navegador.

  • Manifestación
  • Fuente de descarga

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio