2015-06-24 2 views
2

Я недавно экспериментировал с анимацией CSS и сталкивался с каким-то поведением, которое я не могу объяснить в отношении состояния конечного кадра.Вращение CSS, окончательный кадр и встроенный блок

Учитывая это очень маленький кусочек HTML:

<span id="rotateme">This is text</span> 

Некоторые CSS:

#rotateme { display: inline-block; } 
.clockwise { 
    animation: clockwise 1s; 
    animation-fill-mode: forwards; 
} 
.anticlockwise { 
    animation: anticlockwise 1s; 
    animation-fill-mode: forwards; 
} 
@keyframes anticlockwise { 
    from { transform: rotate(0deg); } 
    to { transform: rotate(-90deg); } 
} 
@keyframes clockwise { 
    from { transform: rotate(-90deg); } 
    to { transform: rotate(0deg); } 
} 

И немного Javascript, чтобы связать вместе:

document.addEventListener("DOMContentLoaded", function(event) { 
    d3.select('#rotateme') 
    .on('click', rotateAnticlockwise) 

    function rotateClockwise() { 
    d3 
     .select(this) 
     .classed('clockwise', true) 
     .classed('anticlockwise', false) 
     .on('click', rotateAnticlockwise) 
    } 

    function rotateAnticlockwise() { 
    d3 
     .select(this) 
     .classed('clockwise', false) 
     .classed('anticlockwise', true) 
     .on('click', rotateClockwise) 
    } 
}); 

(Для пример живого, это также находится в codepen)

Если вы нажмете на текст, он будет вращаться, нажмите на него снова, и он повернуть обратно. Однако, если вы удалите стиль display от rotateme, то последний кадр анимации не сохранится. Для движения по часовой стрелке это означает, что он возвращается назад в исходное горизонтальное положение, а движение против часовой стрелки начинается с неправильного места.

Мой вопрос в том, что это inline-block делает в этой ситуации, что делает анимацию работать так, как я ожидаю. Я остаюсь в том, что, как я понимаю, является режимом прямого заполнения.

Я должен добавить, что я делаю это в Chrome 43, на всякий случай, это причуда браузера.

+1

Пожалуйста, добавьте содержательный код и описание проблемы здесь. Не просто ссылку на сайт, который нуждается в исправлении. В противном случае этот вопрос потеряет ценность для будущих посетителей, как только проблема будет решена. Проводка [Short, Self Contained, Correct Example (SSCCE)] (http://www.sscce.org/), которая демонстрирует вашу проблему, поможет вам получить более качественные ответы. Для получения дополнительной информации см. Раздел [Что-то на моем веб-сайте не работает. Могу ли я просто вставить ссылку на него?] (Http://meta.stackexchange.com/questions/125997/) Спасибо! – Cerbrus

+0

вы можете быть удивлены, увидев, как он себя ведет на дисплее: block :) –

+0

позиция: абсолютное, похоже, решает проблему. Хотя я не знаю, почему –

ответ

2

Элементы Span являются встроенными по умолчанию и поэтому имеют ограничения по размеру, положению и т. Д. Удаляяиз дисплея стиля, вы позволяете ему возвращаться к встроенному, в результате чего размер и положение лишаются.

+0

А, ладно. Смена атрибутов атрибутов в конце имеет смысл, если это происходит с встроенными элементами. В чем причина довольно странного «блочного» поведения, когда элементы падают, а не вращаются? – chooban

+0

Элементы уровня блока по умолчанию имеют полную ширину. Поместите на него цвет фона, чтобы увидеть его лучше. http://codepen.io/anon/pen/qdVxMg – isherwood

+0

Фантастический! Большое спасибо за столь быстрый ответ. – chooban

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