Показано с 1 по 3 из 3

Тема: IE7 и ширина родительского блока (float) с элементами float: right;

  1. #1

    Регистрация
    05.08.2009
    Адрес
    Москва
    Сообщений
    20
    Очень прошу поправить и подсказать!

    Задача:
    Сделать навигационную панельку для отображения динамической таблички, в ширину таблички. Ширина таблички заранее не известна. фиксировать не хочется. Панель в виде формы, кнопки вперёд и назад привязать к левому и правому краям таблицы, в середине выбор страницы.

    Проблема: В IE7, если родительский объект (в моём случае div вокруг таблицы) сам float (имеет ширину максимального элемента внутри) и содержит элемент float: right;, то последний его растягивает по ширине до предела.

    Вариант выхода:
    вместо float: right; испльзовать absolute, и тогда уж для левого элемента тоже...

    Вопрос: есть ли способ более красивый, чем абсолютное позиционирование?

    И ещё: насколько корректно для form использовать overflow: auto;, чтобы охватить плавающие элементы. Установка padding больше чем 0, даёт тот же эффект, но корректно ли это?

    CSS с float:
    <div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-spacere;overflow:auto'> * {
    margin: 0;
    padding: 0;
    }

    html, body {
    margin: 0;
    padding: 0;
    height: 100%;
    min-width: 44em;
    font-family: Arial, Helvetica, Sans-Serif;
    }

    body {
    min-height: 100%;
    height: auto !important;
    position: relative;
    }

    table {
    border-collapse: separate;
    border-spacing: 1px;
    }

    th {
    background-color: #666666;
    color: #ffffff;
    }

    td, th { padding: 0.1em 0.5em; }
    tr.row1 td { background-color: #cccccc; }
    tr.row2 td { background-color: #ebebeb; }

    #db {
    float: left;
    width: auto;
    border: #cccccc solid 1px;
    margin-right: 1em;
    }

    #db > * {
    clear: both; /* safe from unxepected collisions */
    }

    #db p, #db form {
    margin: 1px; /* for looks good only */
    }

    #db form {
    background-color: #eeeff1;
    padding: 0.2em; /* works as overflow: auto;, but not buggy on IE */
    text-align: center;
    }

    #db form fieldset {
    margin: 0;
    padding: 0;
    border: none;
    width: auto;
    }

    .dbnavleft {
    float: left;
    }

    .dbnavright {
    float: right;
    }</div>

    Для абсолютного позиционирования заменяю:
    <div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-spacere;overflow:auto'>#db {
    float: left;
    width: auto;
    border: #cccccc solid 1px;
    margin-right: 1em;
    position: relative; /* добавилось */
    }

    .dbnavleft {
    /* float: left; убрали */
    /* добавилось */
    position: absolute;
    left: 0.25em;
    }

    .dbnavright {
    /* float: right; убрали */
    /* добавилось */
    position: absolute;
    right: 0.25em;
    }</div>

    Код xhtml:
    <div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-spacere;overflow:auto'><?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>title</title>
    <link rel="stylesheet" type="text/css" href="styles/nav.css" />
    <script src="js/main.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="db">
    <form method="get" action="#">
    <fieldset class="dbnavleft">
    <input type="submit" name="nav" value="<<" />
    <input type="submit" name="nav" value="<" />
    </fieldset>
    <fieldset class="dbnavright">
    <input type="submit" name="nav" value=">" />
    <input type="submit" name="nav" value=">>" />
    </fieldset>
    <fieldset class="dbnavpage">
    <label>Page:</label>
    <select name="page" onchange="this.form.submit();">
    <option value="1" selected="selected">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </select>
    <input id="go" type="submit" value="go" />
    </fieldset>
    </form>


    From: 1 to: 3</p>
    <table>
    <tr>
    <th>PID</th>
    <th>Last Name</th>
    <th>First Name</th>
    <th>Middle Name</th>
    <th colspan="3">Action</th>
    </tr>
    <tr class="row2">
    <td>1</td>
    <td>?</td>
    <td>?</td>
    <td>?
    </td>
    <td>R</td>
    <td>E</td>
    <td>D</td>
    </tr>
    <tr class="row1">
    <td>2</td>
    <td>?</td>
    <td>?</td>
    <td>?
    </td>
    <td>R</td>
    <td>E</td>
    <td>D</td>
    </tr>
    <tr class="row2">
    <td>3</td>
    <td>?</td>
    <td>?</td>
    <td>?
    </td>
    <td>R</td>
    <td>E</td>
    <td>D</td>
    </tr>
    </table>
    </div>
    </body>
    </html></div>

  2. #2

    Регистрация
    15.11.2006
    Адрес
    Тольятти
    Сообщений
    2,698
    есть ли способ более красивый, чем абсолютное позиционирование?
    Нет.

    насколько корректно для form использовать overflow: auto;, чтобы охватить плавающие элементы
    С точки зрения синтаксиса – корректно. С точки зрения возможного появления каких-то глюков – не совсем. Рекомендую внутрь элемента form вставить какой-нибудь div, засунуть в него все элементы управления и задать overflow именно ему.

    Установка padding больше чем 0, даёт тот же эффект, но корректно ли это?
    Корректно. Но «тот же эффект» это не дает по определению.

  3. #3

    Регистрация
    05.08.2009
    Адрес
    Москва
    Сообщений
    20
    Aykroyd, спасибо большое за ответ!

Похожие темы

  1. float left в IE6-7
    от Kiosuki в разделе Вёрстка сайта
    Ответов: 1
    Последнее сообщение: 05.08.2010, 00:12
  2. Ответов: 4
    Последнее сообщение: 13.08.2009, 09:31
  3. Растяжение родительского блока для float в IE6
    от Kiosuki в разделе Вёрстка сайта
    Ответов: 2
    Последнее сообщение: 09.06.2009, 21:42
  4. float в осле
    от KukMan в разделе Вёрстка сайта
    Ответов: 15
    Последнее сообщение: 07.08.2007, 01:03
  5. Высота родительского блока в FF и Opera
    от Рёга в разделе Вёрстка сайта
    Ответов: 7
    Последнее сообщение: 26.06.2007, 14:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •