【发布时间】:2014-02-04 05:55:15
【问题描述】:
我在鼠标悬停时使用 CSS 过渡从右到左为容器设置动画。这适用于除 Internet Explorer 之外的所有浏览器。原因是我在我的 CSS left 属性中使用(并且需要使用)calc()。
我在这里创建了一个现场演示: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)
}
我正在使用 jQuery 在鼠标悬停时添加 .translate-less 类:
$(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 有 dropped support for conditional comments 并且似乎没有办法专门针对这些浏览器。 IE 10 可以使用-ms-high-contrast-hack 定位,但 IE 11 不能。我不想use JavaScript 来检测浏览器,因为这似乎比使用 CSS hack 更 hack。
【问题讨论】:
-
只使用 left:85% 有什么问题,因为它适用于所有浏览器?还有为什么不直接使用 .translate-less:hover 而不是在鼠标悬停时添加一个类。
-
Charles380,left:85%和left:90%-4rem有显着差异。前者的滑动距离是相对的(宽视口大,窄视口小),而后者是绝对的。这恰好是我设计中的一个重要区别。 (感谢 :hover 提示,但出于其他原因,我需要在此处使用 jQuery。基本上,我修改的元素不仅仅是这个,并且不能使用 :hover 来定位这些元素。)
标签: css internet-explorer css-transitions