2012-03-16 55 views
1

我遇到了一個特殊的問題,我可以用一個特定的結構來解決問題,但我不完全確定爲什麼。窗體的UL高度是0px?

下面是情況:設計專門爲iPad提供服務的網站,所以我在Windows Safari中完成了大部分開發工作(其他瀏覽器無關緊要)。 jQTouch通常會爲每個頁面創建<ul><li>項,因此我的表單包含所有這些項。我遇到的特定問題是當<form>標記之外有<ul>塊時,它將正確顯示(因爲它會延伸<ul>以匹配內容所需的任何高度)。目視檢查這個簡單的方法是看<ul>的背景顏色。然而,無論何時我將其放入form標記中,<ul>都不能再分辨其內容的高度,並且Safari將其分配給height: 0px(首先,它分配的像素量以其內容的高度計算,==正確)

試圖在此示例中僅提取重要的HTML標記和CSS樣式 - 將Safari應用於每個標記的複合CSS複製以精確顯示我的應用程序在所有類中生成的內容等,以及採用故意含糊選擇的例子:

CSS:

div { 
    -webkit-box-flex: 1; 
    -webkit-box-orient: vertical; 
    -webkit-transform: matrix(1, 0, 0, 1, 0, 0); 
    -webkit-user-select: none; 
    background-color: #DADFE3; 
    background-image: -webkit-repeating-linear-gradient(left, transparent, transparent 1px, #D4DADF 1px, #D4DADF 7px); 
    bottom: auto; 
    display: -webkit-box; 
    font-family: 'Helvetica Neue', Helvetica; 
    left: 0px; 
    margin-bottom: 0px; 
    margin-left: 0px; 
    margin-right: 0px; 
    margin-top: 0px; 
    min-height: 100%; 
    overflow-x: hidden; 
    padding-bottom: 0px; 
    padding-left: 0px; 
    padding-right: 0px; 
    padding-top: 0px; 
    position: absolute; 
    right: auto; 
    top: 0px; 
    width: 1406px; 
    z-index: 10; 
} 

form { 
    -webkit-margin-after-collapse: separate; 
    -webkit-margin-before-collapse: separate; 
    -webkit-user-select: none; 
    bottom: auto; 
    display: inline-block; 
    font-family: 'Helvetica Neue', Helvetica; 
    height: 671px; 
    left: auto; 
    margin-bottom: 0px; 
    margin-left: 0px; 
    margin-right: 0px; 
    margin-top: 0px; 
    padding-bottom: 0px; 
    padding-left: 0px; 
    padding-right: 0px; 
    padding-top: 0px; 
    position: static; 
    right: auto; 
    top: auto; 
    width: 1406px; 
} 

ul { 
    -webkit-box-shadow: rgba(255, 255, 255, 0.148438) 0px 1px 0px 0px; 
    -webkit-margin-after-collapse: separate; 
    -webkit-margin-before-collapse: separate; 
    -webkit-user-select: none; 
    background-color: maroon; 
    border-bottom-color: #CACFD6; 
    border-bottom-left-radius: 8px; 
    border-bottom-right-radius: 8px; 
    border-bottom-style: solid; 
    border-bottom-width: 1px; 
    border-left-color: #CACFD6; 
    border-left-style: solid; 
    border-left-width: 1px; 
    border-right-color: #CACFD6; 
    border-right-style: solid; 
    border-right-width: 1px; 
    border-top-color: #CACFD6; 
    border-top-left-radius: 8px; 
    border-top-right-radius: 8px; 
    border-top-style: solid; 
    border-top-width: 1px; 
    bottom: auto; 
    box-shadow: rgba(255, 255, 255, 0.148438) 0px 1px 0px 0px; 
    color: gray; 
    display: block; 
    font-family: 'Helvetica Neue', Helvetica; 
    font-size: 18px; 
    font-style: normal; 
    font-variant: normal; 
    font-weight: bold; 
    left: auto; 
    line-height: normal; 
    list-style-type: disc; 
    margin-bottom: 0px; 
    margin-left: 0px; 
    margin-right: 0px; 
    margin-top: 10px; 
    padding-bottom: 0px; 
    padding-left: 0px; 
    padding-right: 0px; 
    padding-top: 0px; 
    position: static; 
    right: auto; 
    text-shadow: white 0px 1px 0px; 
    top: auto; 
    width: 1335px; 
    clear: both; 
} 

li { 
    width: 40%; 
    float: left; 
    display: inline-block; 
    height: 30px; 
} 

HTML:

<html> 
    <head> 
     <title>Test</title> 
     <style type="text/css"> 
      /* CSS above here */ 
     </style> 
    </head> 
    <body> 
     <div> 
      <form action="/some/action" method="GET"> 
       <ul> 
        <li>Some items</li> 
        <li>Some items</li> 
        <li>Some items</li> 
        <li>Some items</li> 
        <li>Some items</li> 
        <li>Some items</li> 
       </ul> 
      </form> 

      <ul> 
       <li>Some items</li> 
       <li>Some items</li> 
       <li>Some items</li> 
       <li>Some items</li> 
       <li>Some items</li> 
       <li>Some items</li> 
      </ul> 
     </div> 
    </body> 
</html> 

我可以嘗試提供,如果需要更多的信息 - 但放在一起在Safari(運)上面的代碼將複製的問題:表格內UL沒有高度,UL外面呢。

編輯:要快速顯示我所看到的視覺,我參加了一個截圖,指出我所看到的: Above issue in Safari on Windows 7 (Safari 5.1.2)

編輯:顯然,這發生在Firefox相同的方式。爲了這個目的,我做了一些AJAX工作,並且更加熟悉Firefox的Firebug擴展,所以我查看了它在Firefox中的樣子,並且它也發生在那裏。如果未明確設置,則UL的高度爲0。

回答

8

添加overflow:auto;到您的規則列表中UL標籤,或刪除您的LI標籤float:left;規則。

jsFiddle example增加了overflow:auto;規則。

+0

你是對的,謝謝你的回答。這些解決了這個問題,但是由於我的佈局是如何的(出於各種原因),我最終不得不編寫一些Javascript來設置UL的高度 - 所以我不斷告訴UL它的高度是多少應該是 - 這些選項都不會讓UL動態調整大小,所以我必須在Javascript中自己做。謝謝! – Mattygabe 2012-03-21 13:18:53

1

您的根div使用display: -webkit-box,這是實驗性Flexible Box模型的實現,但您的窗體標記設置爲display: inline-block。因此,第一個UL使用一個(新的,實驗性)模型來呈現,而該形式以傳統方法呈現了UL。

使用典型的顯示邏輯,浮動孩子(你li S)無助於父母的高度,除非彩車已經被「清除」。這是糾正(和預期)的行爲,j08691的方法將清除那些浮標。

在使用-webkit-box時,顯然不需要清除浮動。但在form標籤內,您回到了傳統的箱式模型領域,必須這樣做。

0

j08691的解決方案(在ul中添加overflow:auto;)適用於ul與data-role="collapsible"(jquery mobile)中的float:left