Перемещение цепей CSS3

Что такое синтаксически чистое решение для запуска цепочки отдельных переходов CSS3 на одном элементе, один за другим? Пример:

  • установите значение слева на 10 пикселей и непрозрачность от 1 до 200 мс
  • установить слева на 30px через 500 мс
  • установите значение слева на 50 пикселей и непрозрачность от 0 до 200 мс

Можно ли это сделать без JavaScript? Если нет, как правильно его закодировать с помощью JavaScript?

Ответ 1

Я считаю, что вам нужна анимация CSS3, в которой вы определяете стили CSS в разных точках анимации, а браузер выполняет анимацию для вас. Вот одно из них: http://css3.bradshawenterprises.com/animations/.

Вам нужно будет проверить поддержку браузера для ваших целевых браузеров.

Вот демо, которое работает в Chrome. Анимация - это чистый CSS3, я использую только Javascript для запуска и reset анимацию:

http://jsfiddle.net/jfriend00/fhemr/

CSS может быть изменен, чтобы заставить его работать и в Firefox 5+.

#box {
    height: 100px; 
    width: 100px; 
    background-color: #777;
    position: absolute;
    left: 5px;
    top: 5px;
    opacity: 0;
}

@-webkit-keyframes demo {
    0% {
        left: 10px;
    }
    22% {
        opacity: 1;
    }
    77% {
        left: 30px;
    }
    100% {
        left: 50px;
        opacity: 0;
    }
}

.demo {
    -webkit-animation-name: demo;
    -webkit-animation-duration: 900ms;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-timing-function: ease-in-out;
}    

Ответ 2

В чистом CSS это можно сделать с помощью свойства transition-delay, с ним вы можете отложить второй и третий переход.

Мне лично лучше понравилось бы решение JS. таймауты или "переходное" событие могут быть использованы для достижения этого.

Я также предложил бы script.aculo.us (или бета v2: scripty2), он специально разработан для того, чтобы сделать такие вещи эффективными и легкими.