2013-11-25 183 views
5

我是一個CSS初學者。基本上,我有以下的html:CSS:正確的方法使厚<a:hover>下劃線字體下劃線

<ul> 
<li><a href="news.html">О нас</a></li> 
<li><a href="#">Галерея</a></li> 
</ul> 

我想盤旋我a標籤時,有一個厚厚的下劃線,但我用大伸自定義字體,所以如果我用這個常用的伎倆:

a:hover { 
text-decoration: none; 
border-bottom: 2px solid; 
padding: 0; 
margin: 0; 
} 

下劃線遠遠低於基準線:enter image description here但我希望它看起來像這樣:enter image description here

我試圖做這樣的:

<ul> 
    <li class="over"><a href="news.html">О нас</a></li> 
    <li class="over"><a href="#">Галерея</a></li> 
</ul> 

.over{ 
    font-size: 30px; 
    height:30px; // makes the text overlap this element 
    overflow:visible; 
} 
.over:hover { 
    border-bottom: 2px solid #ec6713; 
} 

但下劃線的寬度是現在所有的字符串是相同的:enter image description here

然後我說display: inline-block;.over。不過,我得到這個:enter image description here

然後,我改變inline-blocktable,但底線是再遠低於:

我結束了增加額外的span,所以現在我有:

<ul> 
    <li><span class="over"><a href="news.html">О нас</a></span></li> 
    <li><span class="over"><a href="#">Галерея</a></span></li> 
</ul> 

.over{ 
    font-size: 30px; 
    height:30px; // makes the text overlap this element 
    overflow:visible; 
    display:inline-block; 
} 
.over:hover { 
    border-bottom: 2px solid #ec6713; 
} 

這最終給了我期望的行爲(下劃線的寬度調整爲字符串寬度,並且位置接近基線)。但是爲此增加一個額外的span是一個好習慣嗎?這看起來不好嗎?

回答

5

A span是一個無意義的標記,所以它不會給你的代碼額外的「重量」。因此,恕我直言,它可以使用它(但更好地避免)。

另外,您可以執行以下操作:

<ul> 
    <li><a href="news.html">О нас</a></li> 
    <li><a href="#">Галерея</a></li> 
</ul> 
a { 
    font-size: 30px; 
    text-decoration: none; 
    position: relative; 
} 
a:hover:after { 
    content: ""; 
    border-bottom: 2px solid #ec6713; 
    position: absolute; 
    left: 0; 
    right: 0; 
    bottom: 3px; 
} 

並有DEMO

請注意,:after重疊a。我試過添加一個z-index,但那並沒有解決它。

OPTION 2

背景圖像添加到您的a

+0

那麼這三種方式同樣適用,還是CSS專家出於某種原因更喜歡其中之一? – netimen

+1

那麼,一個更喜歡選項1,另一個更喜歡選項2.因此需要說我的選項1不是[在所有瀏覽器中都支持](http://css-tricks.com/browser-support-pseudo-elements /)。那麼你自己的選擇,我的選擇2是一個更好的解決方案。 – LinkinTED