2012-02-28 4 views
23

Я хочу анимировать границы элемента с помощью CSS3, независимо от того, находится ли он в состоянии зависания или нормальном состоянии. Может ли кто-нибудь предоставить мне фрагмент кода для этого или может вести?CSS3 анимировать цвет границы

Я могу сделать это с помощью jQuery, но ищет какое-то чистое решение CSS3.

ответ

53

Для этого можно использовать CSS3 transition. Посмотрите на этот пример:

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

Вот основной код:

#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; 
} 
0

Если вам нужен переход бежать бесконечно, попробуйте следующий пример:

#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

Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17804187) – robinCTS

+2

Heya @Tahir. Как голова, ответы должны быть самодостаточными; в то время как они могут _refer_ для внешних источников в качестве ссылок, информация ответа не должна существовать исключительно на внешних сайтах. Из-за этого я привел ваш JSFiddle-код в сам ответ, преобразовал SCSS в CSS и переименовал имя анимации в 'flash_border' (потому что имя' flash' противоречило чему-то на стороне Stack Overflow). –

+0

@ChrisForrence Спасибо, чувак – Tahir

2

Вы можете попробовать это также ...

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; 
 
    position: relative; 
 
    vertical-align: middle; 
 
} 
 
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

Смежные вопросы