Таблица Internet Explorer 7 с исправленной проблемой макета - PullRequest
1 голос
/ 09 июня 2011

Итак, у меня есть таблица с множеством столбцов и фиксированной разметкой. Первый столбец таблицы имеет ширину 100 пикселей, остальные - ширину 6 пикселей. Он корректно отображается в Mozilla Firefox, Internet Explorer 8 и 9. Но в IE7 текст в первом столбце переносится практически после каждого слова (даже если столбец достаточно широк, чтобы весь текст был в одной строке), а столбец примерно равен В 2-3 раза шире, чем должно быть.

jsfiddle: http://jsfiddle.net/YvNy5/

Скопируйте и вставьте этот код в index.html, протестируйте его в Internet Explorer 7 и 8/9 и сравните его, чтобы увидеть разницу:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="sk">
<head profile="http://www.w3.org/2005/10/profile">
<meta http-equiv="Content-Style-Type" content="text/css" >
<meta http-equiv="Content-Language" content="sk" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<title>Test 2</title>

<style type="text/css">
#CalendarReservationsBody table.CalendarReservationsBodyTable, #CalendarHolidaysBody table.CalendarHolidaysBodyTable{
    width: 100%;
    border-spacing: 0px;
    border-collapse: collapse;
    background: #F9F5D7;
    border: 1px solid #000;
    table-layout: fixed;
}
#CalendarHolidaysBody table.CalendarHolidaysBodyTable{
    margin-top: 1em;
    width: 100%;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable th, #CalendarHolidaysBody table.CalendarHolidaysBodyTable th{
    text-align: left;
    font-weight: normal;
    padding: 0.1em 0.5em;
    border: 1px solid #000;
    width: 6px;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable td.borderLeft, #CalendarHolidaysBody table.CalendarHolidaysBodyTable td.borderLeft{
    border-left: 1px solid #000;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable td, #CalendarHolidaysBody table.CalendarHolidaysBodyTable td{
    border: 0px;
    border-bottom: 1px solid #000;
    padding: 0.1em 0.5em;
    width: 6px;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable td.wideRow, #CalendarReservationsBody table.CalendarReservationsBodyTable th.wideRow
,#CalendarHolidaysBody table.CalendarHolidaysBodyTable td.wideRow, #CalendarHolidaysBody table.CalendarHolidaysBodyTable th.wideRow{
    width: 100px;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable thead th, #CalendarHolidaysBody table.CalendarHolidaysBodyTable thead th{
    text-align: center;
    font-weight: bold;
    background-color: #6FA7D1;
    color: #FFF;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable th.corner, #CalendarHolidaysBody table.CalendarHolidaysBodyTable th.corner{
    text-align: left;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable td.highlighted, #CalendarHolidaysBody table.CalendarHolidaysBodyTable td.highlighted{
    background: #FFB856;
    text-align: center;
}
#CalendarReservationsBody table.CalendarReservationsBodyTable td.highlighted:hover, #CalendarHolidaysBody table.CalendarHolidaysBodyTable td.highlighted:hover{
    background: #FF9000;
}
/* specialne pre tabulku - dovolenky */
#CalendarHolidaysBody table.CalendarHolidaysBodyTable th{
    width: 24px;
    padding: 0.1em 0;
}
#CalendarHolidaysBody table.CalendarHolidaysBodyTable td{
    width: 1px;
    padding: 0.1em 0;
}
</style>

</head>
<body>

<div id="CalendarReservationsBody">

<table class="CalendarReservationsBodyTable">
    <thead>     <tr>
            <th class="corner wideRow">Auto</th>            <th class="odd" colspan="4">0</th>          <th class="" colspan="4">1</th>         <th class="odd" colspan="4">2</th>          <th class="" colspan="4">3</th>         <th class="odd" colspan="4">4</th>          <th class="" colspan="4">5</th>         <th class="odd" colspan="4">6</th>          <th class="" colspan="4">7</th>         <th class="odd" colspan="4">8</th>          <th class="" colspan="4">9</th>         <th class="odd" colspan="4">10</th>         <th class="" colspan="4">11</th>            <th class="odd" colspan="4">12</th>         <th class="" colspan="4">13</th>            <th class="odd" colspan="4">14</th>         <th class="" colspan="4">15</th>            <th class="odd" colspan="4">16</th>         <th class="" colspan="4">17</th>            <th class="odd" colspan="4">18</th>         <th class="" colspan="4">19</th>            <th class="odd" colspan="4">20</th>         <th class="" colspan="4">21</th>            <th class="odd" colspan="4">22</th>         <th class="" colspan="4">23</th>        </tr>
    </thead>    <tbody>     <tr>
            <td class="alignRight wideRow">KE-260 FC - Octavia combi</td><td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td colspan="16" class="highlighted borderLeft" title="Richard Knop">
    Richard Knop
</td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td colspan="14" class="highlighted" title="Richard Knop">
    Richard Knop
</td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
<td class=" borderLeft"></td>
<td class="odd"></td>
<td class=""></td>
<td class="odd"></td>
        </tr>   </tbody>
</table>

</div>

</body>
</html>

Думаю, этот стиль нуждается в доработке:

#CalendarReservationsBody table.CalendarReservationsBodyTable td.wideRow, #CalendarReservationsBody table.CalendarReservationsBodyTable th.wideRow
,#CalendarHolidaysBody table.CalendarHolidaysBodyTable td.wideRow, #CalendarHolidaysBody table.CalendarHolidaysBodyTable th.wideRow{
    width: 100px;
}

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

согласно моему ответу здесь: Таблица с разметкой таблицы: исправлено;и как сделать один столбец шире

Я действительно говорил, что col elements будет также средством контроля ширины других столбцов ..

Ваша таблица очень точная, 1x столбец шириной 100px + (24 группы по 4) = 96 x 6px, в общей сложности это составляет 676 пикселей, не включая варианты округления или границ в браузере. Вы также сделали заполнение в em - но вы сделалишириной таблицы на 100%, чтобы браузеры знали, какие из ваших столбцов расширены, и на сколько, когда ширина таблицы больше, чем эти вычисления, а также фактически вычислили и округлили смесь em и px, стабильно по браузерумного ..

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

Использование метода col для определения размера столбца означает, что вы не устанавливаете размер где-либо еще.Браузер должен сначала поразить эти значения ширины, поэтому они находятся в верхней части таблицы, прежде чем он даже должен начать рендеринг ячеек, и он не должен затем нажимать что-либо еще, что может сбить его со счета;) (не легков случае с IE!) - и извините, но подвох в том, что даже левая / правая подстановка ячеек приведёт к разным браузерам цикл - IE7 уже нужна разная ширина ячейки (я вставил хак в CSS, я думаю, что больше нетчем различия округления в браузере), и как только вводится заполнение, становится еще хуже - я добавил к своей скрипке компромисс, согласно которому заполнение только для первого столбца, поскольку другой текст, охватывающий столбцы и центрированный, может обойтись без отсутствия!

Рабочий пример

в jsfiddle, работающий в IE7, если вы закомментируете ширину мастер-таблицы, вы должны увидеть, что таблица становится правильным измерением - красныйниже находится панель размером 676 пикселей, о которой я упоминал ранее), но если вы затем сузите окно, таблицаquish, я не знаю, какое поведение вы хотели бы, я просто указываю на это, вы, конечно, могли бы выбрать правильную ширину и дать внешнему содержащему div минимальную ширину, чтобы у него никогда не было шанса сжать ..в любом случае ..

(и извините, я взял CSS, эта таблица не нужна, чтобы ее было легче читать)


добавлено:

** Iя знаю, что это не работает в браузерах webkit, я смотрю на это .. *

Обновление

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

оригинальный jsfiddle имеетбыл обновлен, так как это было единственное изменение, без изменений в методе, для чего это стоило, я попробовал и метод <col> width и <td> width в Webkit, но он потерпел неправильное вычисление colspan независимо от того, в какую сторонуэто было сделано ..

0 голосов
/ 10 июня 2011

Вы должны удалить ширину на тд, как они определены на этом

#CalendarReservationsBody table.CalendarReservationsBodyTable td, 
#CalendarHolidaysBody table.CalendarHolidaysBodyTable td{
    border: 0px;
    border-bottom: 1px solid #000;
    padding: 0.1em 0.5em;
    /* width: 6px; */
}

#CalendarHolidaysBody table.CalendarHolidaysBodyTable td{
    /* width: 1px; */
    padding: 0.1em 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...