【问题标题】:CSS hover transition cross-browser compatibilityCSS 悬停过渡跨浏览器兼容性
【发布时间】:2013-03-14 19:31:48
【问题描述】:

我有一个带有纯 CSS 动画过渡的简单语言选择页面。我制作了一个 jsFiddle here

它应该如何表现如下:

  1. 用户将鼠标悬停在两个(或更多)语言选择器之一上。
  2. 该语言选择器向上过渡并完全不透明。相关语言文本(例如英语、西班牙语)也会出现。
  3. 用户要么点击链接,要么将鼠标移出,在这种情况下,转换会反转。

在 Chrome 中,它的行为符合预期。

在 Firefox 中,当我将鼠标悬停在 一个 图像上时,两个 都会向上移动。

在 Opera 中,它的行为基本符合预期,但文本在向上移动后又跳回。

我正在尝试了解为什么在这些浏览器中会发生这种情况,如果可能的话,我该如何解决它。

在jsFiddle宕机的情况下,相关代码为:

HTML

<div id="container"><div id="cell">
    <div class="langcell"><a href="en/index.html">
        <img src="http://upload.wikimedia.org/wikipedia/en/thumb/a/a4/Flag_of_the_United_States.svg/200px-Flag_of_the_United_States.svg.png" /><br/><p>English</p></a>
    </div>
    <div class="langcell"><a href="es/index.html">
        <img src="http://upload.wikimedia.org/wikipedia/en/thumb/9/9a/Flag_of_Spain.svg/200px-Flag_of_Spain.svg.png" /><br/><p>Espa&ntilde;ol</p></a>
    </div>
</div></div>

CSS

html, body {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
}
#container {
    width: 100%;
    height: 100%;
    display: table;
}
#cell {
    display: table-cell; vertical-align: middle; text-align: center;
}
.langcell {
    display: inline-block;
    margin: auto 1em;
}
a {
    position: relative;
    top: 0;
    -webkit-transition: top 0.25s;
    -moz-transition: top 0.25s;
    -o-transition: top 0.25s;
    transition: top 0.25s;
    color: black;
    text-decoration: none;
}
a:hover {
    top: -16pt;
}
a p {
    font-size: 14pt;
    font-weight: bold;
    text-transform: uppercase;
    font-family: Verdana, Geneva, sans-serif;
    letter-spacing: 0.05em;
    opacity: 0;
    -webkit-transition: opacity 0.25s;
    -moz-transition: opacity 0.25s;
    -o-transition: opacity 0.25s;
    transition: opacity 0.25s;
}
a:hover p {
    opacity: 1;
}
a img {
    opacity: 0.65;
    -webkit-transition: opacity 0.25s;
    -moz-transition: opacity 0.25s;
    -o-transition: opacity 0.25s;
    transition: opacity 0.25s;
}
a:hover img {
    opacity: 1;
}

【问题讨论】:

  • 在我的 Firefox 上完美运行
  • 试试最新的FF?
  • 这不是解决您的问题的方法,但您应该知道,如果您从底部进入它,元素会向上移动,这会导致我的鼠标位于元素之外,因此它会向下移动。如果您不移动鼠标,它将永远这样做。定位将覆盖整个空间的元素或重新考虑上下移动元素。
  • 添加到@MiniRagnarok 的评论。您应该考虑为子元素设置动画,以便将鼠标悬停在该元素上。

标签: css cross-browser css-transitions


【解决方案1】:

我在 firefox(v12) 上也遇到了奇怪的问题,它在悬停时将两个元素都向上移动。后来的版本(19v),似乎解决了。

我认为您的选择器以及 Mozilla 与 webkit 如何解释事物的方式发生了一些变化。看看这个jsfiddle 是否适合你。

我真正所做的只是将a 的许多选择器更改为.langcell,它似乎有效。我不得不重新调整一点 css 以实现相同的样式,例如嵌套的 .langcell a 选择器。我怀疑这可能是因为a 默认是内联的,而p 是块,img 是内联块。

我不会撒谎说我完全理解为什么会发生这种情况,但总的来说,将样式赋予类而不是元素不仅仅是一种偏好,它在渲染时也更有效。

CSS Selector Performance

代码:

    .langcell {
        display: inline-block;
        margin: auto 1em;
        position: relative;
        top: 0;
        -webkit-transition: top 0.25s;
        -moz-transition: top 0.25s;
        -o-transition: top 0.25s;
        transition: top 0.25s;
    }

    .langcell a { 
        color: black;
        text-decoration: none;
    }
    .langcell:hover {
        top: -16pt;
    }
    .langcell p {
        font-size: 14pt;
        font-weight: bold;
        text-transform: uppercase;
        font-family: Verdana, Geneva, sans-serif;
        letter-spacing: 0.05em;
        opacity: 0;
        -webkit-transition: opacity 0.25s;
        -moz-transition: opacity 0.25s;
        -o-transition: opacity 0.25s;
        transition: opacity 0.25s;
    }
    .langcell:hover p {
        opacity: 1;
    }
    .langcell img {
        opacity: 0.65;
        -webkit-transition: opacity 0.25s;
        -moz-transition: opacity 0.25s;
        -o-transition: opacity 0.25s;
        transition: opacity 0.25s;
    }
    langcell:hover img {
       opacity: 1;
    }

【讨论】:

    【解决方案2】:

    CSS3 是相当新的。并且许多功能在许多浏览器中仍然不兼容。 Compatibility Chart

    因此,如果您的客户使用的是旧版浏览器(即使他们有一年旧的版本),这有点令人反感,在这种情况下,CSS3 转换将无法正常工作。

    进行转换最安全的选择是使用 javascript 或一些 javascript 库,例如 jQuery

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2013-11-15
      相关资源
      最近更新 更多