2012-03-16 70 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