【问题标题】:UL Height Inside of Form is 0px?表单内部的 UL 高度为 0px?
【发布时间】:2012-04-02 01:59:42
【问题描述】:

我遇到了一个特定的问题,我可以使用特定的结构将其归零,但我不完全确定为什么。

情况如下:设计一个专门为 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 (Win) 中会重现问题:表单内部的 UL 没有高度,外部的 UL 有。

编辑:为了快速显示我所看到的内容,我截取了一张屏幕截图并指出了我所看到的内容:

编辑:显然这在 Firefox 中发生的方式相同。正在做一些繁重的 AJAX 工作,并且为此目的更熟悉 Firefox 的 Firebug 扩展,所以我检查了它在 Firefox 中的样子,它也出现在那里。如果没有明确设置,UL 的高度为 0。

【问题讨论】:

    标签: html css firefox google-chrome safari


    【解决方案1】:

    overflow:auto; 添加到UL 标记的规则列表中,或删除LI 标记的float:left; 规则。

    jsFiddle example 添加了overflow:auto; 规则。

    【讨论】:

    • 你是对的,谢谢你的回答。这些确实解决了这个问题,但是由于我的布局方式(出于各种原因),我最终不得不编写一些 Javascript 来动态设置 UL 的高度 - 所以我不断告诉 UL 它的高度应该是 - 这些选项都不会让 UL 动态调整大小,所以我必须自己用 Javascript 来做。谢谢!
    【解决方案2】:

    您的根 div 正在使用 display: -webkit-box,这是实验性灵活盒模型的实现,但您的表单标签设置为 display: inline-block。因此,第一个 UL 使用一个(新的、实验性的)模型来呈现,而表单则以传统方法呈现 UL。

    使用典型的显示逻辑,浮动子项(您的lis)不会影响其父项的高度,除非浮动项已“清除”。这是更正(和预期)的行为,j08691 的方法将清除这些浮点数。

    在使用-webkit-box 时,您显然不需要清除浮动。但是在form 标签中,你又回到了传统的盒子模型领域,必须这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多