Safari链接悬停问题

3
我遇到了一个问题,只有在Safari浏览器中出现 - 当我悬停在标题栏中的某个链接上时,该链接右侧的链接(字体粗细看起来变小)在链接悬停动画期间都会改变大小,一旦动画结束,这些链接就会恢复原始大小/字体粗细。非常奇怪的是,它只会影响链接被悬停的右侧(在代码中下方)的链接。
这是一张图片:
您可以看到图片中“游戏历史”右侧的链接比“游戏历史”左侧的链接要小(“游戏历史”是图片中正在悬停的链接)。当发生这种情况时,比图片中更加明显。
以下是我的代码:
<ul class="nav_links_list">
    <li>
        <div><a class="head_link-nukun head_link--nukun" href="index.php"><span>H</span>ome</a></div>
    </li>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <li>
        <div><a class="head_link-nukun head_link--nukun" href="user_choice.php">Make Picks</a></div>
    </li>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <li>
        <div><a class="head_link-nukun head_link--nukun" href="game_history_calendar.php">Game History</a></div>
    </li>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <li>
        <a class="head_link-nukun head_link--nukun" href="userchoice_history.php?username=<?php echo $_COOKIE['username']; ?>">My History</a>
    </li>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <li>
        <a class="head_link-nukun head_link--nukun" href="full_leaderboard.php">Full Leaderboard</a>
    </li>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <li>
        <a class="head_link-nukun head_link--nukun" href="account_settings.php">Account Settings</a>
    </li>
</ul>

以下是涉及的CSS:

/* Header Nukun link styles */
.head_link-nukun {
outline: none;
text-decoration: none;
position: relative;
font-size: 10pt;
line-height: 1;
color: #9e9ba4;
display: inline-block;
}
.head_link--nukun {
/*color: #E3E8DC;*/
color:#EEEEEE;
/*font-weight: 900;*/
text-transform: uppercase;
overflow: hidden;
padding: 10px 0;
-webkit-transition: color 0.3s;
transition: color 0.3s;
}
.head_link--nukun:hover {
color: #F51E0A;
}
.head_link--nukun::before,
.head_link--nukun::after {
content: '';
position: absolute;
width: 70%;
height: 2px;
background: #EEEEEE;
bottom: 0;
left: 15%;
-webkit-transition: -webkit-transform 0.5s;
transition: transform 0.5s;
-webkit-transition-timing-function: cubic-bezier(0.2,1,0.3,1);
transition-timing-function: cubic-bezier(0.2,1,0.3,1);
}
.head_link--nukun::after {
background: #00B4FF;
-webkit-transform: translate3d(-300%,0,0) scale3d(0,1,1);
transform: translate3d(-300%,0,0) scale3d(0,1,1);
}
.head_link--nukun:hover::before {
-webkit-transform: translate3d(300%,0,0) scale3d(0,1,1);
transform: translate3d(300%,0,0) scale3d(0,1,1);
}
.head_link--nukun:hover::after {
-webkit-transform: translate3d(0,0,0) scale3d(1,1,1);
transform: translate3d(0,0,0) scale3d(1,1,1);
}
.head_link--nukun span {
color: #00B4FF;
display: inline-block;
position: relative;
-webkit-transform: perspective(1000px) rotate3d(0,1,0,0deg);
transform: perspective(1000px) rotate3d(0,1,0,0deg);
-webkit-transition: -webkit-transform 0.5s, color 0.5s;
transition: transform 0.5s, color 0.5s;
-webkit-transition-timing-function: cubic-bezier(0.2,1,0.3,1);
transition-timing-function: cubic-bezier(0.2,1,0.3,1);
}
.head_link--nukun:hover span {
color: #EEEEEE;
-webkit-transform: perspective(1000px) rotate3d(0,1,0,180deg);
transform: perspective(1000px) rotate3d(0,1,0,180deg);
}

链接在Firefox中看起来完美,即使鼠标悬停在链接上也是如此。我只在Safari中遇到了这个问题。非常感谢您的帮助!

请在 http://jsfiddle.net 上添加可工作的代码片段。 - sergdenisov
经过一番艰苦的搜索(很抱歉在发布问题前没有更努力地搜索),我在这里找到了答案:https://dev59.com/22kw5IYBdhLWcg3wqMU0。 - user2947014
1个回答

0

当您触发GPU合成(例如,通过CSS动画),浏览器会将该元素发送到GPU,但也会发送任何在该元素上方出现的内容,如果更改其top / left属性,则会出现任何position:relative元素。这包括在动画之后出现的任何position:relative元素。

解决方案是为动画元素提供position:relative和z-index,使其高于其他所有元素。这样,您就可以获得动画效果,同时保持(我认为更好的)与不相关元素的亚像素字体呈现。

这里是问题和解决方案的演示 http://www.youtube.com/watch?v=9Woaz-cKPCE&hd=1

更新:Chrome的新版本保留GPU合成元素的亚像素抗锯齿,只要该元素没有透明度,例如具有没有透明或半透明像素的背景。请注意,诸如border-radius之类的东西会引入半透明像素。

来自:Jaffa The Cake

我没有写这个答案


1
你不应该抄袭答案 - https://dev59.com/22kw5IYBdhLWcg3wqMU0#12350204。 - sergdenisov
我添加了那个人的名字!这不是我自己加的!!!是 JAFFA THE CAKE 加的。 - Rajat Sharma
1
无论如何,你不应该再次发布它。如果你认为这个问题已经有了答案,那么应该设置“重复”标志。 - sergdenisov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接