Высота UL внутри формы равна 0px? - PullRequest
1 голос
/ 16 марта 2012

У меня возникла конкретная проблема, с которой я смог сосредоточиться на определенной структуре, и я не совсем уверен, почему.

Вот ситуация: проектирование сайта, предназначенного специально для iPad, поэтому я делаю большую часть своей разработки в Windows Safari (другие браузеры не имеют значения). Обычно jQTouch создает страницы размером <ul> с <li> элементами для каждого, поэтому мои формы содержат все из них. Особая проблема, с которой я столкнулся, заключается в том, что когда у меня есть блок <ul> вне тега <form>, он отображается правильно (например, он растягивает <ul>, чтобы соответствовать любой высоте, которую занимает его содержимое). Простой способ визуально проверить это - увидеть цвет фона <ul>. Однако всякий раз, когда я помещаю его в тег form, <ul> больше не может определить высоту его содержимого, и Safari назначает его height: 0px (в первом случае ему присваивается количество пикселей, которое вычисляется по его высоты содержимого, == правильно)

Пытался извлечь только важные HTML-теги и CSS-стили в примере - скопировал составной CSS, который Safari применял к каждому тегу, чтобы точно показать, что мое приложение генерирует для всех классов и т. Д., И использует целенаправленно расплывчато селекторы для примера:

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 снаружи делает.

Редактировать : Чтобы быстро показать то, что я вижу визуально, я сделал снимок экрана и указал, что я вижу: Above issue in Safari on Windows 7 (Safari 5.1.2)

Редактировать : По-видимому, в Firefox происходит то же самое. Работал над AJAX и более знаком с расширением Firebug Firefox для этой цели, поэтому я проверил, как оно выглядит в Firefox, и оно тоже там происходит. UL имеет высоту 0, если он не установлен явно.

Ответы [ 2 ]

9 голосов
/ 20 марта 2012

Добавьте overflow:auto; список правил для тега UL или удалите правило float:left; для тега LI.

Пример jsFiddle добавлено правило overflow:auto;.

1 голос
/ 20 марта 2012

Ваш корневой div использует display: -webkit-box, реализацию экспериментальной модели Flexible Box, но ваш тег формы установлен на display: inline-block.Таким образом, первый UL представлен с использованием одной (новой, экспериментальной) модели, а форма представляет UL традиционным методом.

Используя типичную логику отображения, плавающие дочерние элементы (ваши li s) не вносят вклад врост их родителей, если поплавки не были «очищены».Это исправленное (и ожидаемое) поведение, и метод j08691 очистит эти значения с плавающей точкой.

Очевидно, что при использовании -webkit-box вам не нужно очищать значения с плавающей точкой.Но внутри тега form вы вернулись на традиционную блочную модель и должны это сделать.

...