2014-11-12 3 views
1

Я пытаюсь переместить элемент сверху вниз, (от 0 до 100vh). Internet Explorer 11 делает странные вещи при переходе свойства transform. Он поднимается, когда он должен опускаться и не соблюдает продолжительность.Internet Explorer 11 переход translateY действующий странный

JSFIDDLE1

JSFIDDLE2

div{ 
    width:200px; 
    height:200px; 
    background:black; 
    transition:transform 5s; 
    -ms-transition: -ms-transform 5s; 
} 

div:hover{ 
    transform:translateY(100vh); 
    -ms-transform:translateY(100vh); 
} 

Почему это происходит и как я могу решить эту проблему?

+0

Это, вероятно, связано с проблемой (я писал в твиттере некоторое время назад) (https://twitter.com/jonathansampson/status/491671062807973888). Я открыл вопрос об этом внутренне и добавлю этот вопрос к списку примеров, когда люди были укушены этой проблемой. – Sampson

+0

Вы, кажется, много знаете об этом, знаете ли вы, что это только ie11? – Alvaro

+0

Я работаю над командой IE. Тестирование, которое я создал (в вышеупомянутом твиттере), также воспроизводится в Internet Explorer 10. Мы не сразу обращались к нему только потому, что были гораздо более неотложные вопросы, которые мы хотели решить раньше. Но [сегодня мы отправили более 2000 исправлений для исправления] (http://blogs.msdn.com/b/ie/archive/2014/11/11/living-on-the-edge-our-next-step-in- interoperability.aspx), поэтому у нас есть много импульса. – Sampson

ответ

2

Я знаю, что этот вопрос старый, но сегодня я столкнулся с этой проблемой. Я создаю своего рода слайд-шоу, в котором используются переходы CSS для анимации слайдов. Большинство браузеров обрабатывают transform: translateX(-100vw) и transform: translateY(-100vh) для перемещения слайдов влево и вверх соответственно, но IE имеет проблемы с расчетом правильных позиций начала/конца и путается по времени так же, как упоминалось в @ Alvaro.

Решение заключается в использовании абсолютных единиц (например, пикселей), а не относительных. Но, учитывая широкий диапазон размеров экрана, я должен поддерживать, я не могу использовать ни одно значение.

Моя работа заключалась в том, чтобы использовать ряд запросов @media, чтобы определить набор правил перевода, которые всегда гарантируют, что слайд перемещается с экрана, но не заходит слишком далеко. Например:

/* Slide left */ 
@media (max-width: 480px) { 
    .slide.left { 
    transform: translateX(-480px); 
    } 
} 
@media (min-width: 481px) and (max-width: 960px) { 
    .slide.left { 
    transform: translateX(-960px); 
    } 
} 
@media (min-width: 961px) and (max-width: 1920px) { 
    .slide.left { 
    transform: translateX(-1920px); 
    } 
} 
@media (min-width: 1921px) and (max-width: 3840px) { 
    .slide.left { 
    transform: translateX(-3840px); 
    } 
} 
@media (min-width: 3841px) { 
    .slide.left { 
    transform: translateX(-7680px); 
    } 
} 

/* Slide up */ 
@media (max-height: 480px) { 
    .slide.up { 
    transforom: translateX(-480px); 
    } 
} 
/* Etc. */ 

Эти запросы будут поддерживать разрешение вплоть до 8К, хотя и со значительно меньшим зернистости при более высоких разрешениях. Вы хотите настроить их на основе ожидаемого использования.

+0

Действительно ли это единственное решение? –

+0

Без обид. ;) –

+1

Я не пытаюсь быть оскорбительным, но похоже, что IE 11 (последняя версия IE) должен иметь это исправление к настоящему времени (более чем через год), или кто-то должен был найти настоящее решение к настоящему времени и не использовать тонны Запросы CSS. Поэтому я беру это обратно, я пытаюсь оскорбить Microsoft, а не вас. –

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