IE7 и IE8: очистка с плавающей точкой без добавления пустых элементов - PullRequest
3 голосов
/ 10 апреля 2010

У меня проблема, аналогичная описанной здесь (без разрешения):

IE7 плавать и очистить на том же элементе

Следующий HTML-код отображается так, как задумано в Firefox, но не в (обоих) IE7 и IE8:

<html>
<head>
<style>
ul {
    list-style-type: none;
}
li {
    clear: both;
    padding: 5px;
}
.left {
    clear: left;
    float: left;
}
.middle {
    clear: none;
    float: left;
}
.right {
    clear: right;
    float: left;
}
</style>
</head>
<body>
<ul>
    <li>1</li>

    <li class="left">2</li>
    <li class="right">3</li>

    <li class="left">4</li>
    <li class="middle">5</li>
    <li class="right">6</li>

    <li>7</li>
</ul>
</body>
</html>

Это макет формы, и в Firefox результаты выглядят так:

1
2 3
4 5 6
7

Вот к чему я иду. В IE7 и IE8, однако, результаты:

1
2 3 5 6
4
7

[Примечание: я не хочу плавать что-либо вправо, потому что я хочу, чтобы поля в моей форме были выровнены по левому краю правильно, без огромного пространства между плавающими полями для учета ширины родительского контейнера.]

Очевидно, мне нужен полный очистить, и, возможно, я могу добавить пустой элемент списка в список для принудительной очистки, но это похоже на глупое решение и в некотором роде побеждает цель.

Есть идеи? Я провел несколько часов, читая и пробуя разные варианты, но безуспешно.

Ответы [ 4 ]

3 голосов
/ 11 апреля 2010

Попробуйте, демо :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
  <title>list floats</title>
  <style type="text/css">
  li{clear: none;list-style: none}
  .clearer{float: left; clear: left}
  .floater{ float:left}
  </style>
</head>
<body>
<ul>
    <li class="">1</li>
    <li class="clearer">2</li>
    <li class="">3</li>
    <li class="clearer">4</li>
    <li class="floater">5</li>
    <li class="">6</li>
    <li class="clearer">7</li>
</ul>
</body>
</html>
1 голос
/ 10 апреля 2010

Я вроде согласен с вариантом таблицы. Но вы можете сделать это с пустым элементом списка. Это позволит вам избавиться от атрибута «clear» в «правильном» и «среднем» классах. Вам также понадобится класс «соло» для одного элемента, чтобы быть уверенным, что он очищает оба пути.

.clear {
    clear: both; 
    margin:0px;
    padding:0px ;
    font-size:1px;
}
.solo {
    clear: both; 
}

<li class="solo">1</li> 

<li class="left">2</li> 
<li class="right">3</li> 
<li class="clear"></li> 
1 голос
/ 10 апреля 2010

Вы можете просто использовать <br class="clear" /> с br.clear{ clear: both; }

0 голосов
/ 30 марта 2013

попробуйте следующий код. намного проще, но немного трудно понять!

<!DOCTYPE html>
<html>
<head>
<style type="text/css">
li{list-style: none}
.float{ float:left}
</style>
</head>
<body>
<ul>
<li class="">1</li>
<li class="float">2</li>
<li class="">3</li>
<li class="float">4</li>
<li class="float">5</li>
<li class="">6</li>
<li class="float">7</li>
</ul>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...