Firefox는 테이블 요소에 대한 position : relative를 지원합니까?


169

내가 사용하려고하면 position: relative/ position: absolute켜짐 <th>또는 <td>파이어 폭스에서 작동하지 않는 것.


3
아니, 제대로 지원하는 브라우저가 없다고 생각합니다. HTML 표준 AFAIK에서는 유효하지 않습니다
Pekka

2
@Pekka : HTML은 들어오지 않습니다. 이것이 CSS입니다. 그리고 놀랍게도 작동합니다. :-)
TJ Crowder

15
내가 알 수있는 한 WebKit 및 IE에서 작동합니다. 파이어 폭스는 테이블 셀에서 그것을 좋아하지 않는 유일한 사람 인 것 같습니다. 그리고 예, 나는 float에 의존하지 않고 <td> 안에 요소를 배치하려고합니다.
벤 존슨

2
다시 저스틴의 대답을보십시오. Firefox에 테이블 요소가 아닌 블록으로 취급한다고 Firefox에 알려 주면 Firefox에서 잘 작동합니다.
TJ Crowder 2019

1
이 질문의 문제를 보여주는 jsfiddle : jsfiddle.net/M5P93 IE, Safari, Chrome에서 작동합니다. Firefox가 실패합니다.
Chris Moschini

답변:


167

쉽고 가장 적절한 방법은 셀의 내용을 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>

11
+1 이것은 나를 위해 일한 유일한 솔루션입니다. 를 사용 tr {display:block}하면 레이아웃이 완전히 파괴됩니다.
웨슬리 머치

+1 이것은 저에게도 해답입니다. display: block복잡한 테이블 레이아웃에 대한 수정으로는 충분하지 않습니다. 여분의 div는보다 안정적인 솔루션입니다.
DA.

5
하지만,이 솔루션 "width"와 "height"여전히 사용할 수 없습니다
4esn0k

@ 4esn0k 너비와 높이를 사용할 수있는 솔루션을 찾았습니까?
Neil

9
불행히도 다른 열보다 내용이 많은 다른 열을 추가하면 솔루션이 작동 하지 않습니다 . 그래서 나는 "허용 된 답변"플래그와 투표로 주어진 많은 감사를 이해하지 못한다. jsfiddle.net/ukR3q를
Jan

35

문제 없습니다. 다음도 설정해야합니다.

display: block;

32
display : block 설정의 단점은 요소에 직접 적용하면 실제로 테이블 형식을 망칠 수 있다는 것입니다. 그것이 테이블 셀에서 바뀌고 있기 때문에 ... 또는 내가 미쳤습니까?
벤 존슨

3
@ 벤 : 글쎄요. position테이블 셀 설정 은 정의에 따라 테이블 형식을 심각하게 변경합니다. 플로우에서 셀의 블록을 가져옵니다 (플로우 position: relative는 유지하지만 오프셋은 제외).
TJ Crowder 2019

2
@Ben-아니, 미쳤어. 원하는 방식으로 물건을 얻으려면 분명히 더 많은 일을해야합니다. 요점은 단지 가능하다는 것입니다.
저스틴 Niessner

1
@TJ 그것은 위치를 추가하지 않습니다 : 상대의 시각적 외관을 변경하고, th / td를 테이블 셀에서 블록으로 변경합니다. 다시 말하지만, 작동한다는 것을 알고는 좋지만 많은 경우 블록 레벨 요소를 작성하면 실제로 테이블 형식이 엉망이됩니다. 고마워 저스틴!
벤 존슨

9
아아, display: block파이어 폭스에서도 문제를 일으킬 수 있습니다. 즉, 테이블 셀이 열에 걸쳐있는 경우 블록으로 설정하면 셀이 첫 번째 열로 축소됩니다.
DA.

13

Internet Explorer 7, 8 및 9를 포함한 모든 웹 브라우저는 테이블 표시 요소에서 position : relative를 올바르게 처리하고 FireFox만이를 잘못 처리하므로 JavaScript shim을 사용하는 것이 가장 좋습니다. 하나의 잘못된 브라우저에 대해서만 DOM을 재 배열 할 필요는 없습니다. 사람들은 IE가 뭔가 잘못되고 다른 모든 브라우저가 올바르게 얻을 때 항상 JavaScript shim을 사용합니다.

여기에 모든 HTML, CSS 및 JavaScript가 설명 된 완전히 주석이 달린 jsfiddle이 있습니다.

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();

    }

});

$ .browser가 jQuery 1.9에서 제거되었습니다
Matus

네. 선호하는 브라우저 감지 방법으로 대체하십시오.
mrbinky3000 2016 년

1
브라우저에 결함이 없습니다. 사양에 따르면 효과는 정의되어 있지 않습니다.
WGH

4
@WGH 솔루션을 덜 적합하게 만들지 않습니다. downvote 주셔서 감사합니다.
mrbinky3000

1
이봐, 난 당신의 커밋에서 polyfill을 만들었습니다. :) github.com/Grawl/gecko-table-position-polyfill
Даниил Пронин

11

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>

https://bugzilla.mozilla.org/show_bug.cgi?id=63895 여기에서 개발자가 변경 사항에 대한 토론을 계속 수행 할 수 있습니다 (주제는 13 세입니다 ).

최근 출시 이력으로 판단 할 때 2014 년 5 월부터 출시 될 예정입니다.

편집 (6/10/14) : Firefox 30이 오늘 릴리스되었습니다. 곧 주요 데스크톱 브라우저에서 테이블 위치가 문제가되지 않습니다.


7

Firefox 3.6.13부터 position : relative / absolute가 테이블 요소에서 작동하지 않는 것 같습니다. 이것은 오랫동안 Firefox의 행동으로 보입니다. 다음을 참조하십시오 : http://csscreator.com/node/31771

CSS Creator 링크는 다음 W3C 참조를 게시합니다.

테이블 행 그룹, 테이블 헤더 그룹, 테이블 바닥 글 그룹, 테이블 행, 테이블 열 그룹, 테이블 열, 테이블 셀 및 테이블 캡션 요소에 대한 'position : relative'의 효과 정의되지 않았습니다. http://www.w3.org/TR/CSS21/visuren.html#positioning-scheme


저스틴의 대답을보십시오. display설정 을 변경하면 작동 합니다. 어떤 의미가 있는가 (CSS가 이해하는 정도까지).
TJ Crowder 2018

8
예, 셀에 적용하면 테이블이 완전히 망가진다는 점을 제외하고는 "작동"합니다.
Simon East

3

사용해보십시오 display:inline-block그것은 나를 테이블의 레이아웃을 파괴하지 않고 / TD를 내 일을 기능의 위치를 제공하는 파이어 폭스 (11)에 날 위해 일했습니다. 그것은 position:relativetd / th 와 함께 작동하여 일을해야합니다. 방금 일하게했습니다.


1

나는 table-cell요소가 있었다 (실제로는 DIV아니었다 TD)

나는 바꿨다

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

(Chrome에서 작동)

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

물론 패딩은 일반적으로 상자 모델에서 너비에 추가되지만 테이블은 절대 너비와 관련하여 항상 자체적으로 생각하는 것처럼 보이므로 일부 경우에는 작동합니다.


0

부모 요소에 display : block을 추가하면 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>

0

허용되는 솔루션은 작동하지만 다른 열보다 내용이 더 많은 다른 열을 추가하는 경우에는 작동하지 않습니다. tr , td & div에 추가 height:100%하면 작동합니다.

<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>

유일한 문제는 Chrome 및 IE가 아닌 FF의 열 높이 문제 만 수정한다는 것입니다. 따라서 한 걸음 더 가까이 있지만 완벽하지는 않습니다.

Jan이 승인 한 답변으로 작동하지 않는 바이올린을 업데이트하여 작동 시켰습니다. http://jsfiddle.net/gvcLoz20/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.