Почему эта таблица HTML не работает должным образом в Chrome? - PullRequest
15 голосов
/ 13 марта 2011

Рассмотрим эту простую таблицу HTML:

<!doctype html>
<html>
<head>
    <title>Test</title>
</head>
<body>
    <table style="border-collapse: collapse; table-layout: fixed; width: 280px;">
        <tr>
            <td style="padding: 5px; width: 50px; border: 0; word-wrap: break-word;">a</td>
            <td style="padding: 5px; width: 100px; border: 0; word-wrap: break-word;">b</td>
            <td style="padding: 5px; width: 100px; border: 0; word-wrap: break-word;">c</td>
        </tr>
    </table>
</body>
</html>

Это правильно отображается в любом крупном браузере, кроме Chrome, в котором ширины столбцов причудливо выглядят как 46px, 102px и 102px соответственно.

Если я возьму декларацию ширины CSS из элемента таблицы, то она правильно отображается в Chrome.Но мне нужно это там, иначе перенос слов не будет работать правильно.

Есть идеи, почему это не работает?Я пробовал разные типы документов, и это ничего не изменило, поэтому я предполагаю, что это не проблема таблицы HTML5.

РЕДАКТИРОВАТЬ: Получается, что если вы укажете table-layout: fixed и ширина пикселя для элемента table и ширина пикселя для каждого столбца, тогда Chrome будет считать, что ширина столбца включает отступы.Это противоречит блочной модели W3C и нарушает требуемое поведение CSS2.

Если вы не укажете table-layout: fixed или не определите ширину пикселя в элементе table, то Chrome будет корректно работатьПредположим, что ширина столбца, которую вы указываете исключить заполнение.Все остальные браузеры предполагают, что ширина столбцов исключает заполнение .

В приведенном выше примере указание ширины 60px, 110px и 110px устранило бы проблему в Chrome, но затем разбило бы ее во всех остальных.браузер.Значения 46px, 102px и 102px получены из Chrome, равномерно распределяющего столбцы с соотношением 40:90:90 вместо 50: 100: 100.

Ответы [ 5 ]

6 голосов
/ 08 декабря 2012

Я сам исправил эту проблему сегодня, используя table-layout: fixed и box-sizing: border-box, чтобы заставить Chrome прекратить учитывать отступы.В противном случае вы никогда не узнаете, какую модель размеров выберет Chrome, даже для двух очень похожих таблиц.

1 голос
/ 02 сентября 2011

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

                var correctedWidth;
                var extraSize;
                //chrome is taking the padding and border to calculate the column width , not other browsers
                $('table.default.fixed > thead > tr > th').each(function()
                {

                    if ($(this).attr('width')!='undefined' && $(this).attr('width')!=null)
                    {
                        if ($(this).attr('sizeUpdated')=="undefined" || $(this).attr('sizeUpdated')==null) {

                            extraSize = parseInt($(this).css('padding-left'))+parseInt($(this).css('padding-right'))+2; //2 for the borders (2*1px)

                            if ( parseInt($(this).attr('width'))!= $(this).width() )
                            {
                                correctedWidth=$(this).width()+2*(extraSize);
                            }
                            else
                            {
                                correctedWidth=$(this).width()+extraSize;
                            }
                            $(this).attr('width',correctedWidth+'px');
                            $(this).attr('sizeUpdated','Y');

                        }
                    }
                });
1 голос
/ 13 марта 2011

Ну, моя математика говорит, что Chrome делает то, что должен:

102 + 102 + 46 = 250px -> Ширина

2 (5) + 2 (5) +2 (5) = 10 + 10 + 10 = 30px -> Заполнение

Ширина + Заполнение = 250 + 30 = 280px или указанная вами ширинадля стола.

0 голосов
/ 09 декабря 2016

Я исправил эту проблему, удалив родительский элемент (fieldset) со следующим свойством:

display: inline-flex; 
0 голосов
/ 25 мая 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...