Firefox에 표시되지 않는 테두리, 테이블의 테두리 축소, 위치 : tbody의 상대 또는 셀의 배경색


84

다음 HTML을 고려하십시오.

<html>
<head>
    <style>
        TABLE.data TD.priceCell
        {
            background-color: #EEE;
            text-align: center;
            color: #000;
        }
    
        div.datagrid table
        {
            border-collapse: collapse;
        }
    
        div.datagrid table tbody
        {
            position: relative;
        }
    </style>
</head>
<body>
    <div id="contents" class="datagrid">
        <table class="data" id="tableHeader">
            <thead>
                <tr class="fixed-row">
                    <th>Product</th>
                    <th class="HeaderBlueWeekDay">Price</th>
                    <th class="HeaderBlueWeekDay">Discount</th>
                </tr>
            </thead>
            <tbody>
                <tr style="font-style: italic;">
                    <td>Keyboard</td>
                    <td class="priceCell">20</td>
                    <td style="border-right: #3D84FF 1px solid; border-left: #3D84FF 1px solid;" class="priceCell">2</td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>

마지막 셀에는 인라인 스타일에 왼쪽 및 오른쪽 테두리가 있습니다. 당신 (또는 적어도 나는)이 이것이 보일 것이라고 기대할 것입니다. IE에서는 이것이 사실입니다. 그러나 Firefox (6)에서는 그렇지 않습니다. 다음 방법으로 해결할 수 있습니다.

  • div.datagrid table tbodyCSS에서 상대 위치 제거
  • 변경 div.datagrid table tbodydiv.datagrid tableCSS의에
  • CSS 에서 background-coloron 제거table.data td.priceCell
  • CSS 에서 border-collapseon 제거div.datagrid table

이것은 우리 코드의 단순화 된 버전입니다. 우리는 또한 그것을 해결했습니다 (옵션 2 선택). 그러나 내가 궁금한 것은 다음과 같습니다.

  • Firefox의 버그입니까?
  • IE의 버그입니까?

특히 : CSS가있는 그대로 Firefox가 테두리를 표시하지 않는 이유는 무엇입니까?


이유를 묻지 마십시오.하지만 위의 CSS에서 border-collapse속성을 자체 div.datagrid table로 옮겼을 때 table.data제대로 작동했습니다. 어쩌면 설명 할 수있는 다른 누군가가 여기 (내가 파이어 폭스 5에있어) ... 거기
compostus

1
귀하의 질문에 대한 답변이 없습니다. 상대적인 위치가 테두리에 영향을주지 않기 때문에 이것이 버그라고 생각하지만 간단한 테스트 케이스를 만들었고 4 개의 브라우저 모두 다르게 표시했습니다! (Fx6, Op 11.50, IE8, Chrome 15) 테스트 사례 : jsfiddle.net/76Qb7/9
Doug

방금이 문제가 발생했습니다. 이러한 기간 동안 파이어 폭스 버그가 지속된다는 사실이 재밌습니다.
GDY

답변:


65

이것은 나에게 Firefox 버그처럼 보입니다. 배경은 경계선 위에 그림을 그리고 있습니다. 반투명 배경색을 사용하면 알 수 있습니다.

나는 신청했다 https://bugzilla.mozilla.org/show_bug.cgi?id=688556을


2
나는 같은 문제에서 달렸다. Firefox에서는 아직 수정되지 않았습니다. : nth-child (odd) 선택기를 사용하여 홀수 행에만 배경을 추가 할 때 큰 디자인 문제이지만 충분히 심각하게 받아들이지 않는 것 같습니다. 완벽하게 만들려면 테두리도 필요합니다. 버그를 제출해 주셔서 감사합니다!
Jelmer

1
참고로, 9 년이 지난 지금도 마찬가지입니다.
Charles Merriam

183

방금이 문제가 발생하여 CSS 전용 솔루션에 도달했습니다 . 요소에 추가 background-clip: padding-box하기 만하면 td됩니다.

자세한 내용은 https://developer.mozilla.org/en-US/docs/CSS/background-clip 문서를 참조하십시오.


2
허, 이해가 안 돼요. 문서는 배경 이 테두리 아래로 확장되는지 여부를 지정한다고 말합니다 . 테두리 위에 렌더링 된 느낌을받습니다.
Peter

2
내가 찾은 최고의 CSS 전용 솔루션. 공유 @medoingthings 주셔서 감사합니다
helpse

15

모든 것을 한곳에 모으십시오.

접힌 테두리가있는 테이블 내부에 상대 위치가있는 셀이있을 때 문제가 발생합니다 (보리스가 지적하고 버그 https://bugzilla.mozilla.org/show_bug.cgi?id=688556 를 채웠습니다 ).

이것은 user2342963에 표시된대로 CSS를 사용하여 쉽게 해결할 수 있습니다 (셀에 background-clip 추가 : padding-box).

문제 (Firefox 사용)와 수정 사항은 http://jsfiddle.net/ramiro_conductiva/XgeAS/ 에서 확인할 수 있습니다.

table {border-spacing: 0px;}
td {border: 1px solid blue; background-color: yellow; padding: 5px;}
td.cellRelative {position: relative;}
td.cellRelativeFix {background-clip: padding-box;}
table.tableSeparate {border-collapse: separate;}
table.tableCollapse {border-collapse: collapse;}

<table class="tableSeparate">
    <tbody>
        <tr>
            <td class="cellRelative">position: relative</td>
            <td>position: static</td>
        </tr>
    </tbody>
</table>
<table class="tableCollapse">
    <tbody>
        <tr>
            <td class="cellRelative">position: relative</td>
            <td>position: static</td>
        </tr>
    </tbody>
</table>
<table class="tableCollapse">
    <tbody>
        <tr>
            <td class="cellRelative cellRelativeFix">position: relative</td>
            <td>position: static</td>
        </tr>
    </tbody>
</table>

2
이것은 FF의 버그를 수정하기 위해 작동하지만 IE에서는 일반 테두리 안에 못생긴 흰색 테두리가 있습니다. 어떻게 수정합니까?
Tony Brix

9

이것은 firefox의 버그이며 곧 수정되기를 바랍니다. 그러나 그 동안 나는 내 td세포를 로 설정하여이 문제를 해결할 수 있었다 position: static. 다른 사람에게 도움이되기를 바랍니다.

td {
    position: static;
}    

3
당신 같은 의사 요소를 사용하는 경우 ::before또는 ::after동일한에를 td, position: static이 stylings가를 망쳐 놨어요. background-clip: padding-box더 안전합니다.
Sebsemillia 2015-06-24

3

또 다른 가능한 해결책은 테이블 마크 업에서 colspan 오류를 수정하는 것입니다.

분명히 colspan 오류는 border-collapse를 사용할 때 숨겨진 테두리와 동일한 효과를 일으킬 수 있습니다.

http://www.codingforums.com/html-and-css/46049-border-collapse-hiding-some-outside-borders.html 을 통해 올바른 솔루션으로 안내되었습니다 .

내 테이블에는 8 개의 열만있을 때 <th colspan = "9">를 썼습니다.

이로 인해 오류 (오른쪽 테두리 숨김)가 발생했습니다.

  • Chrome 51.0.2704.103m (64 비트)
  • Vivaldi 1.2.490.43 () (32 비트)

하지만 오른쪽 테두리로 렌더링

  • Firefox 44.0.2
  • IE 11 (11.420.10586.0)
  • 가장자리 25.10586.0.0

1
국경 붕괴를 제거 : 테이블 요소의 붕괴는 우리에게 도움이
르노 Argillander을

다른 구문 오류도 분명히 이것을 유발합니다. pekaaw의 조언 @ 고려할 때, 나는 교정 문 내 HTML과 내가 남겼 <thead>내가 가지고있는 것을 의미 곳 </thead>. 오타를 수정하여 테두리 문제를 해결했습니다!
davidreedernst

1

이 문제를 해결하는 가장 좋은 방법은 이와 같이하는 것입니다.

위치 : "thead"및 "tbody"요소의 상대 속성은 중요합니다. border-collapse 및 background-clip 속성도 마찬가지입니다. 모든 행과 교대 행에서 배경색으로 작동합니다.

table {
  width: 100% !important;
  border-spacing: 0;
  border-collapse: unset !important;

  thead {
    position: relative;
    left: -1px;
    top: -1px;

    tr {
      th {
        background-clip: padding-box;
        border-top: 1px solid #737373!important;
        border-left: 1px solid #737373!important;
        border-right: none !important;
        border-bottom: none !important;

        &:last-child {
          border-right: 1px solid #737373!important;
        }
      }
    }
  }

  tbody {
    position: relative;
    left: -1px;
    top: -1px;

    tr {
      &:last-child {
        td {
          border-bottom: 1px solid #737373!important;
        }
      }

      td {
        background-clip: padding-box;
        border-top: 1px solid #737373!important;
        border-left: 1px solid #737373!important;
        border-right: none !important;
        border-bottom: none !important;

        &:last-child {
          border-right: 1px solid #737373!important;
        }
      }
    }
  }
}

0

이 (오래된) 문제에 대한 또 다른 해결책 추가 : 이것은 여러 tbody가있는 다소 복잡한 테이블이 있기 때문에 오늘 나에게 일어났습니다. 유일한 문제는 실제로 닫히지 않은 열린 tbody 태그가 있다는 것입니다. 내 CSS에서 아무것도 변경할 필요없이 태그를 삭제하고 테두리가 다시 나타납니다. 명확히하기 위해 내 구조는 다음과 같습니다.

<table>
  <thead>
    <tr><th>Col1</th><th>Col2</th></tr>
  </thead>
  <tbody>
  <tbody>
    <tr><td>Val1</td><td>Val2</td></tr>
    <tr><td>Val3</td><td>Val4</td></tr>
  </tbody>
</table>

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