50 votes

CSS3 animer la couleur de la bordure

Je souhaite animer les bordures d'un élément à l'aide de CSS3, qu'il soit en état de survol ou en état normal. Quelqu'un peut-il me fournir un extrait de code pour cela ou me guider ?

Je peux le faire en utilisant jQuery mais je cherche une solution purement CSS3.

82voto

Zevan Points 5275

Vous pouvez utiliser une feuille de style CSS3 transition pour cela. Jetez un coup d'œil à cet exemple :

http://jsfiddle.net/ujDkf/1/

Voici le code principal :

#box {
  position : relative;
  width : 100px;
  height : 100px;
  background-color : gray;
  border : 5px solid black;
  -webkit-transition : border 500ms ease-out;
  -moz-transition : border 500ms ease-out;
  -o-transition : border 500ms ease-out;
  transition : border 500ms ease-out;
}

#box:hover {
   border : 10px solid red;   
}

35voto

Harden Rahul Points 545

Vous pouvez aussi essayer ceci...

button {
  background: none;
  border: 0;
  box-sizing: border-box;
  margin: 1em;
  padding: 1em 2em;
  box-shadow: inset 0 0 0 2px #f45e61;
  color: #f45e61;
  font-size: inherit;
  font-weight: 700;
  vertical-align: middle;
  position: relative;
}
button::before, button::after {
  box-sizing: inherit;
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
}

.draw {
  -webkit-transition: color 0.25s;
  transition: color 0.25s;
}
.draw::before, .draw::after {
  border: 2px solid transparent;
  width: 0;
  height: 0;
}
.draw::before {
  top: 0;
  left: 0;
}
.draw::after {
  bottom: 0;
  right: 0;
}
.draw:hover {
  color: #60daaa;
}
.draw:hover::before, .draw:hover::after {
  width: 100%;
  height: 100%;
}
.draw:hover::before {
  border-top-color: #60daaa;
  border-right-color: #60daaa;
  -webkit-transition: width 0.25s ease-out, height 0.25s ease-out 0.25s;
  transition: width 0.25s ease-out, height 0.25s ease-out 0.25s;
}
.draw:hover::after {
  border-bottom-color: #60daaa;
  border-left-color: #60daaa;
  -webkit-transition: border-color 0s ease-out 0.5s, width 0.25s ease-out 0.5s, height 0.25s ease-out 0.75s;
  transition: border-color 0s ease-out 0.5s, width 0.25s ease-out 0.5s, height 0.25s ease-out 0.75s;
}

<section class="buttons">
  <button class="draw">Draw</button>
</section>

0 votes

C'est génial et c'est exactement ce que je cherchais. Mais comment appliquer cet effet exact à une ligne entière du tableau ?

13voto

Tahir Points 233

Si vous avez besoin que la transition se déroule à l'infini, essayez l'exemple ci-dessous :

#box {
  position: relative;
  width: 100px;
  height: 100px;
  background-color: gray;
  border: 5px solid black;
  display: block;
}

#box:hover {
  border-color: red;
  animation-name: flash_border;
  animation-duration: 2s;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  -webkit-animation-name: flash_border;
  -webkit-animation-duration: 2s;
  -webkit-animation-timing-function: linear;
  -webkit-animation-iteration-count: infinite;
  -moz-animation-name: flash_border;
  -moz-animation-duration: 2s;
  -moz-animation-timing-function: linear;
  -moz-animation-iteration-count: infinite;
}

@keyframes flash_border {
  0% {
    border-color: red;
  }
  50% {
    border-color: black;
  }
  100% {
    border-color: red;
  }
}

@-webkit-keyframes flash_border {
  0% {
    border-color: red;
  }
  50% {
    border-color: black;
  }
  100% {
    border-color: red;
  }
}

@-moz-keyframes flash_border {
  0% {
    border-color: red;
  }
  50% {
    border-color: black;
  }
  100% {
    border-color: red;
  }
}

<div id="box">roll over me</div>

2 votes

Heya @Tahir. Pour information, les réponses doivent être autonomes ; bien qu'elles peuvent se référer à à des sources externes comme références, les informations de la réponse ne doivent pas exister uniquement sur des sites externes. Pour cette raison, j'ai intégré votre code JSFiddle dans la réponse elle-même, converti le SCSS en CSS et renommé le nom de l'animation en flash_border (parce que le flash était en conflit avec quelque chose du côté de Stack Overflow).

1 votes

Joli... A partir de votre code je fais un auto run avec durée et infini : jsfiddle.net/913xjzL6/24

0voto

T04435 Points 361

Je suis un peu en retard sur ce sujet, mais...

C'est ce que je fais :

.class {
  color: tomato;
  border: 10px solid currentColor;
  transition: color 250ms linear;

  // not part of solution just layout
  width: 100px;
  height: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 2rem;
  text-transform: uppercase;
}

.class:hover {
  color: rebeccapurple;
}

<div class='class' >color way</div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X