問題描述
我使用 HTML 列表和 CSS 建立了一個水平選單。一切都可以正常工作,除非你將滑鼠懸停在連結上。你看,我建立了一個大膽的懸停狀態的連結,現在的選單連結轉移,因為大膽的大小差異。
我遇到與 this SitePoint post 相同的問題。但是,該帖子沒有正確的解決方案。我搜尋到任何地方的解決方案,找不到一個解決方案。當然我不會是唯一一個試圖做到這一點的人。
有人有什麼想法嗎?
P.S:我不知道選單項中文字的寬度,所以我不能只是設定 li 項的寬度。
這是我的程式碼:
HTML:
<ul class="nav">
<li class="first"><a href="#">item 0</a></li>
<li><a href="#">item 1</a></li>
<li><a href="#">item 2</a></li>
<li><a href="#">item 3</a></li>
<li><a href="#">item 4</a></li>
</ul>
CSS:
.nav { margin: 0; padding: 0; }
.nav li {
list-style: none;
display: inline;
border-left: #ffffff 1px solid;
}
.nav li a:link, .nav li a:visited {
text-decoration: none;
color: #ffffff;
margin-left: 8px;
margin-right: 5px;
}
.nav li a:hover{
text-decoration: none;
font-weight: bold;
}
.nav li.first { border: none; }
最佳解決方案
檢查 JSfiddle 上的工作示例。這個想法是在:after
偽元素中保留粗體 (或任何:hover
狀態樣式) 的空間,並使用標題標籤作為內容的來源。
CSS:
li, a {
display:inline-block;
text-align:center;
}
a:hover {
font-weight:bold;
}
a::after {
display:block;
content:attr(title);
font-weight:bold;
height:1px;
color:transparent;
overflow:hidden;
visibility:hidden;
margin-bottom:-1px;
}
HTML:
<ul>
<li><a href="#" title="height">height</a></li>
<li><a href="#" title="icon">icon</a></li>
<li><a href="#" title="left">left</a></li>
<li><a href="#" title="letter-spacing">letter-spacing</a></li>
<li><a href="#" title="line-height">line-height</a></li>
</ul>
次佳解決方案
如果您無法設定寬度,那麼這意味著寬度將隨著文字的粗體而改變。沒有辦法避免這種情況,除了修改每個狀態的填充/邊距等折中。
第三種解決方案
一個妥協的解決方案是用 text-shadow 偽裝,例如:
a:hover{
text-shadow:0 0 1px black, 0 0 1px black, 0 0 1px black
}
重複 3 次陰影使它看起來沒有那麼多。
第四種方案
jquery 中的一行:
$('ul.nav li a').each(function(){
$(this).parent().width($(this).width() + 4);
});
編輯:雖然這可以帶來解決方案,但應該提到它不能與原始帖子中的程式碼一起使用。 “display:inline” 必須用浮動引數替換為寬度設定才能有效,並且水平選單可以按預期工作。
第五種方案
你可以使用一些喜歡的東西
<ul>
<li><a href="#">Some text<span><br />Some text</span></a></li>
</ul>
然後在您的 CSS 中,只需將 span 的內容設定為粗體,並將其隱藏,並顯示為隱藏,以保持其維度。然後,您可以調整以下元素的邊距,使其適合。
我不知道這個方法是否 SEO 友善。
第六種方案
另一個想法是使用 letter-spacing
a {
letter-spacing: 0.05px
}
a:hover, a:focus {
font-weight: bold;
letter-spacing: 0
}
第七種方案
我剛剛解決了”shadow” 解決方案的問題。這似乎是最簡單有效的。
nav.mainMenu ul li > a:hover, nav.mainMenu ul li.active > a {
text-shadow:0 0 1px white;
}
沒有必要重複三次陰影 (結果對我來說是一樣的) 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。