image

Access unlimited bootcamps and 650+ courses forever

60
%OFF
Article image

RS

Reginaldo Silva22/08/2023 07:16
Share

Botões animados usando CSS3

    Botões animados que mudam as formas dos icones animados, tudo em CSS3 e HTML. Como CSS3 apoiou os mais populares browsers, os botões em CSS3 tornam-se grande procura de substitutos de imagem e botões script pesado. Estes botões usam CSS3 para transições e transforma para animar ícones morphing(mudam de forma) para representar diferentes funções. Esta é uma demonstração simples de 5 botões que representam funções como Demo, Download, Digg, e-mail e RSS. Eu espero que prestem muita atenção e consigo entender tudo que explicar.

    Nota importante: Este é suportado somente no Safari, Chrome e Firefox 5 + (ainda não lançado), e talvez no IE 10 + (também inédito).

    HTML

    Esta é a estrutura básica para todos os botões. A classe do

    button-container determina que a animação que vai fazer. Existem 5 classes diferentes para cada botão: demo, download, digg, e-mail e rss.

    
      Demo</a>
          </div>
          </div>
      </div>
    </div>
    

    CSS

    O primeiro CSS para acrescentar a aparência básica do botão.

    
    body{
      margin: 0;
    }
    a{
      text-decoration:none
    }
    #button-container{
      position: relative; /*Important, Keeps the CSS3 Shapes in place*/
      margin: 10px;
      width: 220px;
      height: 50px;
    }
    #button{
      float: left; margin-right:15px;
      width: 200px;
      height: 50px;
      line-height: 50px;
      background-color: #ddd;
      padding-left: 20px;
      -moz-border-radius:10px;
      -webkit-border-radius:10px;
      border-radius:10px;
      -moz-box-shadow:0 2px 0 #4c9434;
      -webkit-box-shadow:0 2px 0 #4c9434;
      box-shadow:0 2px 0 #4c9434;
      background-image: -webkit-gradient(
          linear,
          left bottom,
          left top,
          color-stop(0, #60B842),
          color-stop(0.85, #7FD13D)
      );
      background-image: -moz-linear-gradient(
          center bottom,
          #60B842 0%,
          #7FD13D 85%
      );
      color:#fff;
      font-family:arial,helvetica,sans-serif;
      font-size:17px;
      font-weight:bold;
      text-shadow:1px 1px 1px #4c9434;
    }
    #button:hover{
      background-image: -webkit-gradient(
          linear,
          left bottom,
          left top,
          color-stop(0, #6DD14B),
          color-stop(0.85, #85DB40)
      );
      background-image: -moz-linear-gradient(
          center bottom,
          #6DD14B 0%,
          #85DB40 85%
      );
      box-shadow:0 2px 0 #5EA839;
    }
    #button:active{
      background-image: -webkit-gradient(
          linear,
          left bottom,
          left top,
          color-stop(0, #6DD14B),
          color-stop(0.85, #85DB40)
      );
      background-image: -moz-linear-gradient(
          center bottom,
          #6DD14B 0%,
          #85DB40 85%
      );
      box-shadow:0 1px 0 #5EA839;
      margin-top: 1px;
    }
    
    

    Isso por si só, já contribui para uma boa aparência do CSS3 botão. Mas agora nós queremos adicionar ícones animados. Primeiro temos que fazer as formas de manipular e se transformar em ícones diferentes. O ícone de partida básico que eu quero para todos os botões é uma seta. Aqui são os componentes da seta:

    /*Shapes and Components*/
      #arrow-container{
          position: absolute;
          top:0px;
          right: 0px;
          margin: 15px;
          box-shadow: 10px 10px;
          width: 35px;
          height: 20px;
          -webkit-transition: -webkit-transform 0.3s ease-out;
          -moz-transition: -moz-transform 0.3s ease-out;
          transition: transform 0.3s ease-out;
      }
      #arrow-rectangle{
          float: left; margin-right:15px;
          margin-top: 5px;
          width: 15px;
          height: 10px;
          background-color: #44801c;
          -webkit-transition: -webkit-transform 0.3s ease-out;
          -moz-transition: -moz-transform 0.3s ease-out;
          transition: transform 0.3s ease-out;
      }
      #arrow-rectangle-handle{
          float: left; margin-right:15px;
          margin-top: 5px;
          border-color: #44801c;
          border-style: solid;
          border-width: 5px;
          -webkit-transition: -webkit-transform 0.3s ease-out;
          -moz-transition: -moz-transform 0.3s ease-out;
          transition: transform 0.3s ease-out;
      }
      #arrow-rectangle-staff{
          float: left; margin-right:15px;
          margin-top: 5px;
          width: 5px;
          height: 10px;
          background-color: #44801c;
          -webkit-transition: -webkit-transform 0.3s ease-out;
          -moz-transition: -moz-transform 0.3s ease-out;
          transition: transform 0.3s ease-out;
      }
      #arrow-triangle{
          float: left; margin-right:15px;
          border-color: transparent transparent transparent #44801c;
          border-style: solid;
          border-width: 10px;
          height: 0px;
          width: 0px;
          -webkit-transition: -webkit-transform 0.2s ease-out;
          -moz-transition: -moz-transform 0.2s ease-out;
          transition: transform 0.2s ease-out;
      }
    

    Cada ícone usa uma seta-retângulo e um triângulo seta para criar a seta. O botão Digg é uma exceção porque ele precisa transforma um pouco mais complexa e precisa ser retângulos diferentes: a sarrow-rectangle-staff e a arrow-rectangle-handle. Você pode alterar a duração da transição ao seu gosto, mas eu achei que fica melhor quando ele é rápido.

    Finalmente, aqui estão os transforma para criar o efeito animado morphing.

    /*Animations*/
    .rotateDown{
      -webkit-transform: rotateZ(90deg) translateX(5px);
      -moz-transform: rotateZ(90deg) translateX(5px);
      transform: rotateZ(90deg) translateX(5px);
    }
    .rotateDownMore{
      -webkit-transform: rotateZ(90deg) translateX(15px);
      -moz-transform: rotateZ(90deg) translateX(15px);
      transform: rotateZ(90deg) translateX(15px);
    }
    .rotate{
      -webkit-transform: rotateZ(90deg);
      -moz-transform: rotateZ(90deg);
      transform: rotateZ(90deg);
    }
    .change{
      -webkit-transform: scale(0.4) rotateZ(-180deg);
      -moz-transform: scale(0.4) rotateZ(180deg);
      transform: scale(0.4) rotateZ(180deg);
    }
    .widen{
      -webkit-transform: scaleY(2) translateX(10px);
      -moz-transform: scaleY(2) translateX(10px);
      transform: scaleY(2) translateX(10px);
    }
    /*Digg Animations*/
    .skinny{
      -webkit-transform: scaleY(.5) scaleX(4);
      -moz-transform: scaleY(.5) scaleX(4);
      transform: scaleY(.5) scaleX(4);
    }
    #arrow-rectangle-handle.donut{
      -webkit-transform: scale(1.5) translateX(-14px);
      -moz-transform: scale(1.5) translateX(-14px);
      transform: scale(1.5) translateX(-14px);
      height: 5px;
      width: 5px;
      border-width: 2.5px;
    }
    #arrow-triangle.shovel{
      -webkit-transform: rotateZ(-135deg) translateX(8px) translateY(-8px);
      -moz-transform: rotateZ(-135deg) translateX(8px) translateY(-8px);
      transform: rotateZ(-135deg) translateX(8px) translateY(-8px);
      border-color: transparent transparent #44801c #44801c;
      border-radius: 7px;
    }
    /*Email Animations*/
    #arrow-triangle.emailRotate{
      -webkit-transform: scale(1.34) scaleY(.7) rotateZ(90deg) translateX(2px) translateY(13.9px);
      -moz-transform: scale(1.34) scaleY(.7) rotateZ(90deg) translateX(2px) translateY(13.9px);
      transform: scale(1.34) scaleY(.7) rotateZ(90deg) translateX(2px) translateY(13.9px);
      border-color: transparent transparent transparent #2A4F11;
    }
    .emailTranslate{
      -webkit-transform: scale(1.5) scaleX(1.2);
      -moz-transform: scale(1.5) scaleX(1.2);
      transform: scale(1.5) scaleX(1.2);
    }
    /*RSS Animations*/
    #arrow-triangle.rss{
      -webkit-transform: rotateZ(180deg) translateY(20px);
      -moz-transform: rotateZ(180deg) translateY(20px);
      transform: rotateZ(180deg) translateY(20px);
      border-radius: 30px;
      border-width: 10px;
      border-style: double;
      width: 10px;
      height: 10px;
    }
    .rssDot{
      -webkit-transform: scaleX(.7) scale(.5) translateX(20px);
      -moz-transform: rotateZ(180deg) translateY(20px);
      transform: rotateZ(180deg) translateY(20px);
      border-radius: 30px;
    }
    

    JQUERY

    Agora tudo que resta é uma forma de acionar a classes em foco.

    (function($){
      $(function(){
      $('#button-container.demo').hover(
                function () {
                  $('#button-container.demo #arrow-container').addClass('rotate');
                  $('#button-container.demo #arrow-triangle').addClass('change');
                  $('#button-container.demo #arrow-rectangle').addClass('widen');
                },
                function () {
                  $('#button-container.demo #arrow-container').removeClass('rotate');
                  $('#button-container.demo #arrow-triangle').removeClass('change');
                  $('#button-container.demo #arrow-rectangle').removeClass('widen');
                }
      );
      $('#button-container.download').hover(
                function () {
                  $('#button-container.download #arrow-container').addClass('rotateDown');
                },
                function () {
                  $('#button-container.download #arrow-container').removeClass('rotateDown');
                }
      );
      $('#button-container.digg').hover(
                function () {
                  $('#button-container.digg #arrow-container').addClass('rotateDownMore');
                  $('#button-container.digg #arrow-rectangle-handle').addClass('donut');
                  $('#button-container.digg #arrow-rectangle-staff').addClass('skinny');
                  $('#button-container.digg #arrow-triangle').addClass('shovel');
                },
                function () {
                  $('#button-container.digg #arrow-container').removeClass('rotateDownMore');
                  $('#button-container.digg #arrow-rectangle-handle').removeClass('donut');
                  $('#button-container.digg #arrow-rectangle-staff').removeClass('skinny');
                  $('#button-container.digg #arrow-triangle').removeClass('shovel');
               }
      );
      $('#button-container.email').hover(
                function () {
                  $('#button-container.email #arrow-triangle').addClass('emailRotate');
                  $('#button-container.email #arrow-rectangle').addClass('emailTranslate');
                },
                function () {
                  $('#button-container.email #arrow-triangle').removeClass('emailRotate');
                  $('#button-container.email #arrow-rectangle').removeClass('emailTranslate');
               }
      );
      $('#button-container.rss').hover(
                function () {
                  $('#button-container.rss #arrow-triangle').addClass('rss');
                  $('#button-container.rss #arrow-rectangle').addClass('rssDot');
                },
                function () {
                  $('#button-container.rss #arrow-triangle').removeClass('rss');
                  $('#button-container.rss #arrow-rectangle').removeClass('rssDot');
               }
      );
      }); // end of document ready
    })(jQuery); // end of jQuery name space
    
    Share
    Comments (0)