IE 10 + 11: CSS-переходы с calc() не работают

Я анимирую контейнер при наведении мыши справа налево с помощью CSS-переходов. Это отлично работает во всех браузерах, кроме Internet Explorer. Причина в том, что я использую (и должен использовать) calc() в моем свойстве CSS left.

Я создал демо здесь:Live Demo

CSS выглядит так:

div {
    background: red;
    width: 100px;
    height: 100px;
    position: absolute;
    top: 100px;
    left: 90%;
    -webkit-transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1);
    -moz-transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1);
    -o-transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1);
    transition: left 0.7s cubic-bezier(0.77, 0, 0.175, 1);
}
div.translate-less {
    left: calc(90% - 4rem)
}

я добавляю класс .перевести-меньше на mouseover с jQuery:

$(document)
.on( 'mouseenter', 'div', function(){
    $(this).addClass('translate-less')
})
.on( 'mouseleave', 'div', function(){
    $('div').removeClass('translate-less');
})

Теперь я бы как иметь плавный переход в Internet Explorer. Для этого я бы даже бросил calc () для этих конкретных браузеров и добавил правило, подобное left: 85%;. Но IE 10 и 11 имеют прекращена поддержка условных комментариев и, похоже, нет никакого способа специально нацелить эти браузеры. IE 10 может быть нацелен на - ms-высокая контрастность-hack, но IE 11 не может. Я не хочу использовать JavaScript для определения браузера, потому что это, кажется, даже hackier чем используя хаки для CSS.

помочь? Заранее спасибо!

1 ответов


может быть transform: translateX() может обеспечить обходной путь. В зависимости от обстоятельств, использование преобразований и свойства right может быть лучше:

right: 10%;
transform: translateX(-4rem); 

вот модифицированная версия вашего скрипта:http://jsfiddle.net/xV84Z/1/.

кроме того, пока вы не можете использовать calc() внутри translateX() в IE (из-за ошибка), вы можете применить несколько translateX()s в преобразовании:

/* This */
transform: translateX(90%) translateX(-4rem);
/* is equivalent to this */
transform: translateX(calc(90% - 4rem));

(однако 90% в этом случае означает 90% цель, а не родителей.)