2015-10-16 44 views
1

根據標題,希望儘管是一口一口就能理解。只是爲了更清楚地說明一下:絕對定位的孩子的頂邊固定在其父母的底部邊緣,其高度未知?

這是下拉菜單系統的一部分。我想要一個子菜單直接出現在父列表項下。這是我的HTML:

<ul> 
    <li> 
     <a href="#">Item 1 
      <ul> 
       <li><a href="#">Sub menu 1</a></li> 
       <li><a href="#">Sub menu 2</a></li> 
       <li><a href="#">Sub menu 3</a></li> 
      </ul> 
     </a> 
    </li> 
    <li> 
     <a href="#">Item 2</a> 
    </li> 
</ul> 

頂級li元素是未知(動態)高度。我希望孩子ul直接出現在其父項下方,左邊緣對齊,並且孩子的頂邊固定在父項的底部邊緣。

我已經寫了幾年的CSS,但意識到我不知道如何做到這一點,或者如果有可能......任何想法?謝謝。

編輯

我所要求的-logically-是非常簡單的。問題在於標題,也許我通過談論我遇到過的具體情況來淹沒水域。這是問題的一個簡單的例子:

<div class="parent"> 
    <div class="child"></div> 
</div> 

.parent { 
    position: absolute; 
    top:200px; 
    left:50px; 
    width: 500px; 
    height: 200px; /* this needs to be dynamic */ 
    background-color: green; 
} 

.child { 
    position: absolute; 
    bottom:0; 
    left:0px; 
    width: 100px; 
    height: 100px; 
    background-color: purple; 
} 

https://jsfiddle.net/4ww9h3wu/

我要堅持的綠色框底部的紫色框的頂部邊緣,而綠色盒子的高度是動態的。雅挖?

+0

顯然,我的意思是HTML,對不起。編輯。記住刪除downvote? – Inigo

+0

你在假設我低估了你。 – j08691

+0

是的。如果不是你(我沒有注意到你有爭議),我的歉意,匿名downvoter可能會解釋......? – Inigo

回答

2

這通常對我來說...但沒有你的 CSS很難確定它會在你的實例中工作。

li { 
position:relative; 
} 

li > ul { 
position:absolute; 
left:0; 
top:100%; 
} 
+0

100%的父母。當然。簡單。謝謝!! – Inigo

2

請注意,您不能嵌套錨標記。因此,這是一個使用有效HTML的解決方案。注意標記更改。

通過使用絕對位置,但不設置左邊或頂部,你有一個subnav直接在它之前的塊級元素之下。

(我也有,我已經添加爲我的解決方案的jsFiddle version鏈接的訪問的解決方案。)

ul, li { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
ul { 
 
    list-style:none; 
 
} 
 
.top-navigation { 
 
    margin: 20px; 
 
} 
 
.top-nav-item { 
 
    position: relative; 
 
    display: inline-block; 
 
    vertical-align: top; 
 
    width: 120px; 
 
} 
 
.top-nav-item:not(:first-child) { 
 
    margin-left: -.3em; 
 
} 
 
.top-nav-link { 
 
    display: block; 
 
    border: 1px solid red; 
 
    padding: 5px; 
 
} 
 
.sub-navigation { 
 
    position: absolute; 
 
    display: none; 
 
    background-color: #fff; 
 
} 
 
.sub-nav-item { 
 
    display: block; 
 
    border: 1px solid green; 
 
    border-top: none; 
 
    padding: 5px; 
 
} 
 
.top-nav-item:hover .sub-navigation { 
 
    display: block; 
 
}
<ul class="top-navigation"> 
 
    <li class="top-nav-item"> 
 
     <a href="#" class="top-nav-link">Item 1</a> 
 
     <ul class="sub-navigation"> 
 
      <li class="sub-nav-item"><a href="#" class="sub-nav-link">Sub menu 1</a></li> 
 
      <li class="sub-nav-item"><a href="#" class="sub-nav-link">Sub menu 2</a></li> 
 
      <li class="sub-nav-item"><a href="#" class="sub-nav-link">Sub menu 3</a></li> 
 
     </ul> 
 
    </li> 
 
    <li class="top-nav-item"> 
 
     <a href="#" class="top-nav-link">Item 2</a> 
 
    </li> 
 
</ul> 
 
<p>Lorem ipsum dolor sit amet. Sed umini. Lorem ipsum dolor sit amet. Sed umini. Lorem ipsum dolor sit amet. Sed umini. Lorem ipsum dolor sit amet. Sed umini. Lorem ipsum dolor sit amet. Sed umini. Lorem ipsum dolor sit amet. Sed umini.</p>

+0

這很好,謝謝。我知道嵌套的標籤,不知道我是如何做到這一點的.. 「通過使用絕對位置,但不設置左邊或頂部,你有一個subnav直接在它之前的塊級元素下定位。」 我曾認爲top/left都默認爲0,從而將元素固定在最近的父元素的左上角,其位置是:absolute或position:relative? – Inigo

+0

這是一個常見的誤解。設置頂部,左側,底部和右側相對於第一個祖先的位置定義爲!=靜態。但是通過不定義這些位置樣式,默認值爲auto,因此絕對定位的元素在被移出流程時,仍然將其自身定位在本來會降落的位置。有一個很好的關於這個stackoverflow文章:http://stackoverflow.com/questions/5399708/the-behaviour-of-top-auto-bamboozles-me – haltersweb

相關問題