2012-11-28 314 views
2

我正在使用一些我在下拉菜單中找到的代碼。它適用於Firefox和Chrome,但不適用於IE。在IE中,子菜單項被移到右側,而不是直接出現在主菜單項下面。 (以我的代碼爲例,「Level 2.1」,「Level 2.2」等我懸停時並不直接在「Two Levels」之下,它們右移了。天,我對編碼不太瞭解,儘管我已經爲解決方案做了大量的研究工作,但我不明白,也不太清楚。我希望有人能幫助我,否則我只是。要放棄CSS下拉菜單將子菜單項移到右側,但只在ie

我想離開DOCTYPE和meta標籤作爲是

我的文檔類型是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

我有meta標籤:

<meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible'/> 

這裏是CSS:

#nav { 
float: left; 
font: bold 12px Arial, Helvetica, Sans-serif; 
border: 1px solid #121314; 
border-top: 1px solid #2b2e30; 
overflow: hidden; 
width: 100%; 
background: #3C4042; 
background: -webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(59,63,65)), color-stop(0.55, rgb(72,76,77)), color-stop(0.78, rgb(75,77,77))); 
background: -moz-linear-gradient(center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78%); 
background: -o-linear-gradient(center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78%); 
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 0 5px rgba(0, 0, 0, 0.1) inset; 
} 

#nav ul { 
margin: 0; 
padding: 0; 
list-style: none; 
} 

#nav ul li { 
float: left; 
} 

#nav ul li a { 
float: left; 
color: #d4d4d4; 
padding: 10px 20px; 
text-decoration: none; 
background: #3C4042; 
background: -webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(59,63,65)), color-stop(0.55, rgb(72,76,77)), color-stop(0.78, rgb(75,77,77))); 
background: -moz-linear-gradient(center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78%); 
background: -o-linear-gradient(center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78%); 
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 0 5px rgba(0, 0, 0, 0.1) inset; 
border-left: 1px solid rgba(255, 255, 255, 0.05); 
border-right: 1px solid rgba(0,0,0,0.2); 
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.6); 
} 
/* Drop Down Menu By helperblogger.com */ 
#nav ul li a:hover, 
#nav ul li:hover > a { 
color: #252525; 
background: #3C4042; 
background: -webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(77,79,79)), color-stop(0.55, rgb(67,70,71)), color-stop(0.78, rgb(69,70,71))); 
background: -moz-linear-gradient(center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78%); 
background: -o-linear-gradient(center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78%); 
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2), 0 -1px #000; 
} 

#nav li ul a:hover, 
#nav ul li li:hover > a { 
color: #2c2c2c; 
background: #5C9ACD; 
background: -webkit-gradient(linear, left bottom, left top, color-stop(0.17, rgb(61,111,177)), color-stop(0.51, rgb(80,136,199)), color-stop(1, rgb(92,154,205))); 
background: -moz-linear-gradient(center bottom, rgb(61,111,177) 17%, rgb(80,136,199) 51%, rgb(92,154,205) 100%); 
background: -o-linear-gradient(center bottom, rgb(61,111,177) 17%, rgb(80,136,199) 51%, rgb(92,154,205) 100%); 
border-bottom: 1px solid rgba(0,0,0,0.6); 
border-top: 1px solid #7BAED9; 
text-shadow: 0 1px rgba(255, 255, 255, 0.3); 
} 
/* Drop Down Menu By helperblogger.com */ 
#nav li ul { 
background: #3C4042; 
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(77,79,79)), color-stop(0.55, rgb(67,70,71)), color-stop(0.78, rgb(69,70,71))); 
background-image: -moz-linear-gradient(center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78%); 
background-image: -o-linear-gradient(center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78%); 
left: -999em; 
margin: 35px 0 0; 
position: absolute; 
width: 160px; 
z-index: 9999; 
box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
-moz-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
border: 1px solid rgba(0, 0, 0, 0.5); 
} 

#nav li:hover ul { 
left: auto; 
} 

#nav li ul a { 
background: none; 
border: 0 none; 
margin-right: 0; 
width: 120px; 
box-shadow: none; 
-moz-box-shadow: none; 
-webkit-box-shadow: none; 
border-bottom: 1px solid transparent; 
border-top: 1px solid transparent; 
} 

.nav ul li ul { 
    position: absolute; 
    left: 0; 
    display: none; 
    visibility: hidden; 
} 

.nav ul li ul li { 
    display: list-item; 
    float: none; 
} 

.nav ul li ul li ul { 
    top: 0; 
} 

.nav ul li ul li a { 
    font: normal 13px Verdana; 
    width: 160px; 
    padding: 5px; 
    margin: 0; 
    border-top-width: 0; 
    border-bottom: 1px solid gray; 
} 

#nav li li ul { 
margin: -1px 0 0 160px; 
visibility: hidden; 
} 

#nav li li:hover ul { 
visibility: visible; 
} 

這裏是HTML:

<div id="nav"> 
<ul> 
    <li><a href="#">Home</a></li> 
    <li><a href="#">About Us</a></li> 
    <li><a href="#">Our Portfolio</a></li> 
    <li><a href="#">One Dropdown</a></li> 
    <li><a href="#">Two Levels</a> 
    <ul> 
    <li><a href="#">Level 2.1</a></li> 
    <li><a href="#">Level 2.2</a></li> 
    <li><a href="#">Level 2.3</a></li> 
    <li><a href="#">Level 2.4</a></li> 
    <li><a href="#">Level 2.5</a></li> 
    </ul> 
    </li> 
    <li><a href="#">Services</a></li> 
    <li><a href="#">Contact Us</a></li> 
</ul> 
</div> 

任何幫助我非常感謝。謝謝。在你的CSS

+0

下次在jsfiddle上發佈你的代碼請:http://jsfiddle.net/faywk/ – xiaoyi

+0

對不起,下次我會試着去做。 –

回答

0

好,花直上這5天,沒有得到它的工作後,和幾個小時的研究,我終於找到了一個很好的教程,解釋瞭如何創建一個CSS下拉菜單,它適用於所有瀏覽器,包括IE 7,8和9。使用該代碼並進行修改以適合我的偏好。

謝謝@Prasad和@Xiaoyi的幫助。

如果這可能對別人有幫助(可能只有像我這樣的初學者),這裏是鏈接。有一個小修正加入了z-index,所以如果你的菜單下拉菜單被其他元素所覆蓋,請確保你閱讀了所有的評論。我永遠不希望任何人通過我所經歷的事情。 http://designmodo.com/css3-dropdown-menu/

0

補充以下變化

#nav { 
float: left; 
font: bold 12px Arial, Helvetica, Sans-serif; 
border: 1px solid #121314; 
border-top: 1px solid #2b2e30; 
overflow: hidden; 
width: 100%; 
background: #3C4042; 
background: -webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(59,63,65)), color-stop(0.55, rgb(72,76,77)), color-stop(0.78, rgb(75,77,77))); 
background: -moz-linear-gradient(center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78%); 
background: -o-linear-gradient(center bottom, rgb(59,63,65) 9%, rgb(72,76,77) 55%, rgb(75,77,77) 78%); 
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 0 5px rgba(0, 0, 0, 0.1) inset; 
*height:34px; //IE7 Hack 
} 

#nav li ul { 
background: #3C4042; 
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0.09, rgb(77,79,79)), color-stop(0.55, rgb(67,70,71)), color-stop(0.78, rgb(69,70,71))); 
background-image: -moz-linear-gradient(center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78%); 
background-image: -o-linear-gradient(center bottom, rgb(77,79,79) 9%, rgb(67,70,71) 55%, rgb(69,70,71) 78%); 
left: -999em; 
margin: 35px 0 0; 
position: absolute; 
*position:relative;//DD menu will start after </a> IE7 
width: 160px; 
z-index: 9999; 
box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
-moz-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
-webkit-box-shadow: 0 0 15px rgba(0, 0, 0, 0.4) inset; 
border: 1px solid rgba(0, 0, 0, 0.5); 
} 
+0

謝謝Prasad!但是,這並沒有奏效。菜單遍佈各處。不知道發生了什麼事。我的目標是讓瀏覽器的菜單保持一致。 –

0

簡單的解決方法:

#nav ul li { 
    position: relative; 
    float: left; 
} 
#nav li:hover ul { 
    left: 0; 
} 

演示:http://jsfiddle.net/faywk/2/

+0

謝謝xiayii的幫助!然而,這也沒有工作。幾乎但不完全。在Firefox和Chrome中,主菜單是可以的,但是子菜單項在頁面的左側完成。在IE中,主菜單不正確。它在一個對角線上,子菜單項目在頁面的左側完成。我看到你的代碼在jsfiddle中工作,爲什麼它不能在瀏覽器中工作? –

+0

如果它工作在isfiddle這是正確的代碼。必須有一些你自己的代碼搞砸了。 – xiaoyi

+0

xiaoyi,我打開了另一個問題,包括我在head標籤中的所有代碼。你可以看看,看看你是否看到問題在哪裏? http://stackoverflow.com/questions/13634465/blogger-css-drop-down-menu-shifts-sub-menu-items-to-the-right-only-in-ie謝謝! –