Поддерживает ли Firefox положение: относительно элементов таблицы? - PullRequest
169 голосов
/ 01 марта 2011

Когда я пытаюсь использовать position: relative / position: absolute на <th> или <td> в Firefox, это, похоже, не работает.

Ответы [ 9 ]

168 голосов
/ 29 ноября 2011

Самый простой и правильный способ - обернуть содержимое ячейки в div и добавить позицию: относительно этого div.

пример:

<td>
  <div style="position:relative">
      This will be positioned normally
      <div style="position:absolute; top:5px; left:5px;">
           This will be positioned at 5,5 relative to the cell
      </div>
  </div>
</td>
34 голосов
/ 01 марта 2011

Это не должно быть проблемой.Не забудьте также установить:

display: block;
13 голосов
/ 23 октября 2012

Поскольку каждый веб-браузер, включая Internet Explorer 7, 8 и 9, правильно обрабатывает положение: относительно элемента таблицы и только FireFox обрабатывает это неправильно, лучшим вариантом будет использование JavaScript-прокладки.Вам не нужно переставлять DOM только для одного неисправного браузера.Люди используют JavaScript-прокладки все время, когда IE что-то не так, а все другие браузеры понимают это правильно.

Вот полностью аннотированный jsfiddle со всеми объясненными HTML, CSS и JavaScript.

http://jsfiddle.net/mrbinky3000/MfWuV/33/

В приведенном выше примере с jsfiddle используются методы «адаптивного веб-дизайна», чтобы показать, что он будет работать с адаптивным макетом.Тем не менее, ваш код не должен быть отзывчивым.

Вот код JavaScript ниже, но он не будет иметь особого смысла вне контекста.Пожалуйста, проверьте ссылку jsfiddle выше.

$(function() {
    // FireFox Shim
    // FireFox is the *only* browser that doesn't support position:relative for
    // block elements with display set to "table-cell." Use javascript to add
    // an inner div to that block and set the width and height via script.
    if ($.browser.mozilla) {

        // wrap the insides of the "table cell"            
        $('#test').wrapInner('<div class="ffpad"></div>');

        function ffpad() {
            var $ffpad = $('.ffpad'),
                $parent = $('.ffpad').parent(),
                w, h;

            // remove any height that we gave ffpad so the browser can adjust size naturally.
            $ffpad.height(0);

            // Only do stuff if the immediate parent has a display of "table-cell".  We do this to
            // play nicely with responsive design.
            if ($parent.css('display') == 'table-cell') {               

                // include any padding, border, margin of the parent
                h = $parent.outerHeight();

                // set the height of our ffpad div
                $ffpad.height(h);

            }

        }


        // be nice to fluid / responsive designs   
        $(window).on('resize', function() {
            ffpad();
        });

        // called only on first page load
        ffpad();

    }

});
10 голосов
/ 01 апреля 2014

Начиная с Firefox 30, вы сможете использовать position для компонентов таблицы.Вы можете попробовать сами с текущей ночной сборкой (работает автономно): http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/

Контрольный пример (http://jsfiddle.net/acbabis/hpWZk/):

<table>
    <tbody>
        <tr>
            <td style="width: 100px; height: 100px; background-color: red; position: relative">
                <div style="width: 10px; height: 10px; background-color: green; position: absolute; top: 10px; right: 10px"></div>
            </td>
        </tr>
    </tbody>
<table>

Вы можете продолжить следить за обсуждениями разработчиковизменения здесь (тема 13 лет старый): https://bugzilla.mozilla.org/show_bug.cgi?id=63895

Судя по истории последних выпусков , это может быть доступно уже в мае 2014 года. Iедва может сдержать мое волнение!

РЕДАКТИРОВАТЬ (6/10/14): Сегодня был выпущен Firefox 30. Вскоре позиционирование таблицы не будет проблемой в основных браузерах настольных компьютеров

7 голосов
/ 01 марта 2011

Начиная с Firefox 3.6.13, положение: относительное / абсолютное не похоже на элементы таблицы.Это, кажется, давнишнее поведение Firefox.См. Следующее: http://csscreator.com/node/31771

Ссылка CSS Creator публикует следующую ссылку на W3C:

Эффект 'position :lative' на table-row-group, table-headerЭлементы -group, table-footer-group, table-row, table-column-group, table-column, table-cell и заголовок таблицы не определены.http://www.w3.org/TR/CSS21/visuren.html#positioning-scheme

3 голосов
/ 21 марта 2012

Попробуйте использовать display:inline-block, это сработало для меня в Firefox 11, что дало мне возможность позиционирования в пределах td / th без разрушения расположения таблицы.Что в сочетании с position:relative на td / th должно заставить вещи работать.Просто сам заработал.

1 голос
/ 21 июня 2013

У меня был элемент table-cell (который на самом деле был DIV, а не TD)

Я заменил

display: table-cell;
position: relative;
left: .5em

(который работал в Chrome) на

display: table-cell;
padding-left: .5em

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

0 голосов
/ 06 июля 2015

Приемлемое решение работает, но не в том случае, если вы добавляете в другой столбец больше контента, чем в другой. Если вы добавите height:100% к вашим tr , td & div, то оно должно работать.

<tr style="height:100%">
  <td style="height:100%">
    <div style="position:relative; height:100%">
        This will be positioned normally
        <div style="position:absolute; top:5px; left:5px;">
             This will be positioned at 5,5 relative to the cell
        </div>
    </div>
  </td>
</tr>

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

Я обновил скрипку от Яна, которая не работала с принятым ответом, чтобы показать, что она работает. http://jsfiddle.net/gvcLoz20/

0 голосов
/ 26 апреля 2012

Добавление отображения: блок к родительскому элементу получил это в Firefox.Я также должен был добавить top: 0px;Слева направо: 0px;в родительский элемент для Chrome для работы.IE7, IE8 и IE9 также работают.

<td style="position:relative; top:0px; left:0px; display:block;">
    <table>        
        // A table of information here. 
        // Next line is the child element I want to overlay on top of this table
    <tr><td style="position:absolute; top:5px; left:100px;">
        //child element info
    </td></tr>
   </table>
</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...