2017-07-24 34 views
2

我創建了一個小提琴HTML定位:不能得到它的權利

https://jsfiddle.net/14f5jro7/

問題:爲什麼「Familien」的子菜單(在它懸停看到它)沒有出現在下面,但向右移動?

Blabla:我試着花幾個小時建立一個合適的菜單,根據我讀過的教程,父母應該是position = relative和child position = absolute。然後我可以使用頂部和左側。這就是我想要做的,我不知道它爲什麼會失敗。

HTML:

<body> 
<div id="header"> 
</div> 

<div id="menu"> 
    <ul> 
     <li> 
      <a href="#">Familien</a> 
      <div class="sub-menu"> 
       <ul> 
        <li><a href="#">Familie editieren</a></li> 
       </ul> 
      </div> 
     </li> 
     <li><a href="#">Patienten</a></li> 
     <li><a href="#">Materialien</a></li> 
     <li><a href="#">Proben</a></li> 
    </ul>  
</div> 
<div id="main"> 
<h1> 
Welcome to biobank v1.0 
</h1> 
</div> 
<div id="footer">footer</div> 
</body> 

CSS:

#menu ul { 
list-style-type: none 
} 


#menu li { 
    display: inline-block; 
    padding:10px 10px; 
    margin: 5px; 
    border-radius: 10px; 
    border-top:3px solid #777777; 
    border-right:3px solid #333333; 
    border-bottom:3px solid #444444; 
    border-left:3px solid #777777; 
    background: #eee; 
    position: relative; 
} 




.sub-menu { 
left:0%; 
top: 100%; 
z-index: -1; 
position:absolute; 
} 

#menu > ul > li:hover .sub-menu { 
z-index: 1; 
} 

#header { 
float: left; 
width: 100%; 
background: url("images/dna.jpg"); 
} 


#menu { 
float: left; 
width: 100%; 
background: #E6E2E1; 
border-top: 2px solid black; 
border-bottom: 2px solid black; 
} 

#main { 
float: left; 
width: 100%; 
min-height: 100%; 
background: 
linear-gradient(to right, blue, white 20%), 
linear-gradient(to top, blue, white 20%) 
; 

} 


#footer { 
float: left; 
width: 100%; 
background-color: white; 
} 

html, body { 
width: 100%; 
height: 100%; 
margin: 0; 
padding: 0; 
background-color: grey; 
} 

編輯:我發現我自己的解決方案,通過這些答案和進一步研究的啓發。這是,希望這有助於其他:

/* body */ 
html, body { 
width: 100%; 
height: 100%; 
margin: 0; 
padding: 0; 
background-color: grey; 
} 



/* header */ 
#header { 
float: left; 
width: 100%; 
background: url("images/dna.jpg"); 
} 


/* menu */ 

#menu { 
width: 100%; 
background: #E6E2E1; 
border-top: 2px solid black; 
border-bottom: 2px solid black; 
} 


#menu * { 
display: inline-block 
} 


#menu ul { 
list-style-type: none; 
} 


#menu li { 
    padding:10px 10px; 
    border-radius: 10px; 
    border-top:3px solid #777777; 
    border-right:3px solid #333333; 
    border-bottom:3px solid #444444; 
    border-left:3px solid #777777; 
    background: #eee; 
} 

#menu > ul > li { 
position: relative; 
} 



.sub-menu { 
padding:0; 
left:0%; /* ignores border of parent, manual adjustment after placement needed!!*/ 
margin-left: -3px; /* gotta be behind left:0 !!!!*/ 
top: 100%; 
margin-top: 3px; 
z-index: -1; 
position:absolute; 
} 

#menu > ul > li:hover .sub-menu { 
z-index: 1; 
} 




/* main */ 
#main { 
float: left; 
width: 100%; 
min-height: 100%; 
background: 
linear-gradient(to right, blue, white 20%), 
linear-gradient(to top, blue, white 20%) 
; 

} 


/* footer */ 
#footer { 
float: left; 
width: 100%; 
background-color: white; 
} 

回答

1

ul內部.sub菜單有一個填充左側。

這將換到左手:

.sub-menu ul { 
    padding: 0; 
    margin:0; 
} 
#menu .sub-menu ul li { 
    margin: 0; 
} 

,並更改左值由你把

這裏邊-3px,你更新你的代碼。問候

#menu ul { 
 
list-style-type: none 
 
} 
 

 

 
#menu li { 
 
    display: inline-block; 
 
    padding:10px 10px; 
 
    margin: 5px; 
 
    border-radius: 10px; 
 
    border-top:3px solid #777777; 
 
    border-right:3px solid #333333; 
 
    border-bottom:3px solid #444444; 
 
    border-left:3px solid #777777; 
 
    background: #eee; 
 
    position: relative; 
 
} 
 

 

 

 

 
.sub-menu { 
 
padding-top: 5px; 
 
left:-3px; 
 
top: 100%; 
 
z-index: -1; 
 
position:absolute; 
 
} 
 

 
.sub-menu ul { 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
#menu .sub-menu ul li { 
 
    margin: 0; 
 
} 
 

 
#menu > ul > li:hover .sub-menu { 
 
z-index: 1; 
 
} 
 

 
#header { 
 
float: left; 
 
width: 100%; 
 
background: url("images/dna.jpg"); 
 
} 
 

 

 
#menu { 
 
float: left; 
 
width: 100%; 
 
background: #E6E2E1; 
 
border-top: 2px solid black; 
 
border-bottom: 2px solid black; 
 
} 
 

 
#main { 
 
float: left; 
 
width: 100%; 
 
min-height: 100%; 
 
background: 
 
linear-gradient(to right, blue, white 20%), 
 
linear-gradient(to top, blue, white 20%) 
 
; 
 

 
} 
 

 

 
#footer { 
 
float: left; 
 
width: 100%; 
 
background-color: white; 
 
} 
 

 
html, body { 
 
width: 100%; 
 
height: 100%; 
 
margin: 0; 
 
padding: 0; 
 
background-color: grey; 
 
}
<body> 
 
<div id="header"> 
 
</div> 
 

 
<div id="menu"> 
 
    <ul> 
 
     <li> 
 
      <a href="#">Familien</a> 
 
      <div class="sub-menu"> 
 
       <ul> 
 
        <li><a href="#">Familie editieren</a></li> 
 
       </ul> 
 
      </div> 
 
     </li> 
 
     <li><a href="#">Patienten</a></li> 
 
     <li><a href="#">Materialien</a></li> 
 
     <li><a href="#">Proben</a></li> 
 
    </ul>  
 
</div> 
 
<div id="main"> 
 
<h1> 
 
Welcome to biobank v1.0 
 
</h1> 
 
</div> 
 
<div id="footer">footer</div> 
 
</body>

+0

我的問題是雙重的:UL和「位置:絕對」的默認填充忽略了父母的邊界,即它使用第一個像素,供其錨點的邊界。你的回答並沒有解釋後面的問題,但你解決了你的解決方案中的兩個問題,謝謝! – user3182532

0

添加左轉進入您的子菜單:)

.sub-menu { 
    margin-left:-55px; 
    top: 100%; 
    z-index: -1; 
    position:absolute; 
    } 
0

保證金這是一個常見的問題的填充左默認情況下,在一些UL標籤瀏覽器。這就是爲什麼許多作者強烈建議重置默認的CSS規則。 CSS Best Practices

這裏修復該案例:Working example

.sub-menu > ul { 
    padding-left: 0; 
} 

希望這有助於!