모든 열을 정렬


385

td태그를 어떻게 지정하면 모든 열에 걸쳐 있어야 합니까 (테이블의 정확한 열 수가 HTML 렌더링 시점을 결정하기 위해 가변적이거나 어려운 경우)? w3schools 는 사용할 수 colspan="0"있다고 언급 하지만 브라우저가 해당 값을 지원하는 브라우저를 정확하게 말하지는 않습니다 (IE 6이 지원 목록에 있습니다).

colspan이론적 인 열 수보다 큰 값으로 설정 하면 효과가 있지만로 table-layout설정 하면 작동하지 않습니다 fixed. 자동 레이아웃을 사용하는 데 단점이 colspan있습니까? 더 올바른 방법이 있습니까?


받아 들여지는 대답은 이것을하지 않는 방법에 관한 것이며 심각한 성능 / 일관성 단점이있는 것 같습니다. 그래서 대답은 다음과 같습니다. 열 수를 하드 코딩하십시오. 실행 가능한 대안이 없습니다.
앤드류 코스터

답변:


268

IE 7.0, Firefox 3.0 및 Chrome 1.0이 있습니다.

TD의 colspan = "0"속성 이 위의 브라우저 에서 모든 TD에 걸쳐 있지는 않습니다 .

적절한 마크 업 방법으로 권장되지는 않지만 가능한 최대 값보다 colspan 값이 더 높은 경우 . 다른 행에있는 열의 경우 TD는 모든 열에 걸쳐 있습니다.

테이블 레이아웃 CSS 속성이 fixed로 설정되어 있으면 작동하지 않습니다.

다시 한번, 이것은 완벽한 솔루션은 아니지만 table-layout CSS 속성이 automatic 일 때 위에서 언급 한 3 가지 브라우저 버전에서 작동하는 것 같습니다 . 도움이 되었기를 바랍니다.


html Firefox 3의 맨 처음에 엄격한 doctype을 지정하면 html 4.01 사양에서 요구하는대로 colspan을 렌더링합니다.
Eineki

253
나는 colspan="42"전체 범위에 걸쳐 팬입니다 . 분명히 이것은 42 열 이상에서 문제이지만, 내가 승인 한 몇 가지 마법 수 중 하나입니다.
Martin Carney

40
colspan = <정확한 정확한 숫자>를 사용하는 것이 좋습니다. 방금 Firefox에서 엄청난 성능 버그가 발생하여 하루 종일 알아 냈습니다. 임의로 큰 colspan은 border-collapse : collapse가있는 큰 테이블에서 FF 초크를 만듭니다. 행 800 개와 열 8 개가있는 테이블을 렌더링하는 데 5 초가 걸렸습니다. 올바른 colspan을 사용하면 합리적인 1 초로 돌아갑니다. bugzilla.mozilla.org/show_bug.cgi?id=675417
InfinitiesLoop

2
이 방법을 사용하지 않는 것이 좋습니다. OSX의 Chrome (열이 서로 겹칩니다)에서 매우 이상한 결과를 얻었습니다.
Tzach

"크기 초과"TD를 포함하는 TR 요소에 테두리를 제공하려고하면 Chrome에서 발견 된 또 다른 문제인 경우 오른쪽 테두리가 표시되지 않습니다.
Massimo

272

이것을 사용하십시오 :

colspan="100%"

Firefox 3.6, IE 7 및 Opera 11에서 작동합니다! (그리고 나는 다른 사람들을 시도 할 수 없다고 생각한다)


경고 : 아래 주석에서 언급했듯이 이것은 실제로 동일합니다 colspan="100". 따라서이 솔루션은 css table-layout: fixed또는 100 개가 넘는 열이있는 테이블에서 중단됩니다 .


16
IE6에서 테스트 됨-IE8, IE8, Chrome [PC 및 Mac], Firefox 4.0 [PC 및 Mac], Safari 5 [PC 및 Mac]
hndcrftd

11
이것이 여전히 어떻게 모호한가? 이것은 모든 길 모퉁이에서 소리 질러야합니다! 나는 꽤 오랫동안 다른 시간에이 저주받은 colspan 문제로 고투 해왔다
hndcrftd

30
크롬 및 파이어 폭스에서 colspan = "3 %"는 colspan = "3"과 동일하게 처리됩니다.
zpmorgan

98
@zpmorgan과 @Sprog, 당신 말이 맞아요! colspan="100%"정확히 의미합니다 colspan="100".
NemoStein

37
Lol, 나는이 문제에 대한 일관된 크로스 브라우저 솔루션을 마침내 보게되어 매우 기뻤습니다. 이것은 실제로기만적인 작동하지 않는 것입니다. (나는 더 많은 공언을받을 자격이 없다고 생각합니다) 허용 답변보다 = /
Francisco

64

모든 열에 걸쳐있는 '제목'셀을 테이블의 헤더로 만들려면 캡션 태그 ( http://www.w3schools.com/tags/tag_caption.asp / https : // developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)이 요소는이 목적을위한 것입니다. 그것은 div처럼 행동하지만 테이블의 부모의 전체 너비에 걸쳐 있지 않습니다 (div가 동일한 위치에서 수행하는 것처럼 (집에서 시도하지 마십시오!)) 대신에 표. 테두리와 같은 브라우저 간 문제가 있습니다 (나에게 허용되었습니다). 어쨌든 모든 열에 걸쳐있는 셀처럼 보이게 할 수 있습니다. 안에 div 요소를 추가하여 행을 만들 수 있습니다. tr 요소 사이에 삽입 할 수 있는지 확실하지 않지만 추측할만한 해킹 일 것입니다. 또 다른 옵션은 부동 div로 혼란 스러울 것입니다.

하다

<table>
    <caption style="gimme some style!"><!-- Title of table --></caption>
    <thead><!-- ... --></thead>
    <tbody><!-- ... --></tbody>
</table>

하지마

<div>
    <div style="float: left;/* extra styling /*"><!-- Title of table --></div>
    <table>
        <thead><!-- ... --></thead>
        <tbody><!-- ... --></tbody>
    </table>
    <div style="clear: both"></div>
</div>

1
정확히 내가 검색 한 것은 데이터 테이블의 맨 아래에 페이지 매김 컨트롤을 배치했습니다. 완벽하게 작동합니다. 대단히 감사합니다.
Comencau

5
관련 행 그룹 사이의 구분 기호로 그룹과 같은 테이블 중간에 모든 열을 확장하려는 경우에는 작동하지 않습니다. (Chrome)
David Hempy

17

부분 답변으로 colspan="0"질문에 언급 된에 대한 몇 가지 사항이 있습니다.

tl; dr 버전 :

colspan="0"어떤 브라우저에서도 작동하지 않습니다. W3Schools가 잘못되었습니다 (평소와 같이). HTML 4에 따르면 colspan="0"열이 전체 테이블에 걸쳐 있어야하지만 아무도 이것을 구현하지 않았으며 HTML 4 이후 사양에서 제거되었습니다.

더 자세한 내용과 증거 :

  • 모든 주요 브라우저는이를 colspan="1".

    이것을 보여주는 데모가 있습니다; 원하는 브라우저에서 사용해보십시오.

    td {
      border: 1px solid black;
    }
    <table>
      <tr>
        <td>ay</td>
        <td>bee</td>
        <td>see</td>
      </tr>
      <tr>
        <td colspan="0">colspan="0"</td>
      </tr>
      <tr>
        <td colspan="1">colspan="1"</td>
      </tr>
      <tr>
        <td colspan="3">colspan="3"</td>
      </tr>
      <tr>
        <td colspan="1000">colspan="1000"</td>
      </tr>
    </table>

  • (이 질문은 질문 할 때 지금은 과거와 오래된,하지만 현재 다시)를 HTML 4 스펙 않았다 실제로 말을 하는이 colspan="0"모든 열을 걸쳐으로 취급되어야한다 :

    값 0 ( "0")은 셀이 현재 열에서 셀이 정의 된 열 그룹 (COLGROUP)의 마지막 열까지 모든 열에 걸쳐 있음을 의미합니다.

    그러나 대부분의 브라우저는 이것을 구현하지 않았습니다.

  • HTML 5.0 (2012 년 후보 추천으로 변경), WhatWG HTML 생활 표준 (오늘날 주요 표준) 및 최신 W3 HTML 5 사양에는 모두 위의 HTML 4에서 인용 한 문구가 포함되어 있지 않으며 만장일치로 colspan0의 이 세 단어 모두에 나타나는이 문구와 함께 허용되지 않습니다.

    tdth요소가있을 수 colspan값이 0이 아닌 유효한 음이 아닌 정수 커야 콘텐츠 속성 지정을 ...

    출처 :

  • 질문에 링크 된 W3Schools 페이지 의 다음 주장은 적어도 오늘날에는 완전히 거짓입니다.

    Firefox만이 colspan = "0"을 지원하는데, 이는 특별한 의미가 있습니다 ... [It]는 브라우저가 셀을 열 그룹 (colgroup)의 마지막 열까지 확장하도록 지시합니다

    HTML 4.01과 HTML5의 차이점

    없음

    웹 개발자가 W3Schools가 일반적으로 부정확 한 것으로 자주 경멸하고 있다는 사실을 아직 모르는 경우, 이것이 왜 교훈인지 고려하십시오.


4
Haha 저는 API 기능을 구현할 사람이 없을 때 유용한 API 기능이 완전히 제거되는 것을 좋아합니다. 놀라운 과정.
앤드류 코스터

14

IE 6의 경우 colspan을 테이블의 열 수와 같습니다. 열이 5 개인 경우 다음이 필요 colspan="5"합니다..

그 이유는 IE가 colspan을 다르게 처리 하기 때문에 HTML 3.2 사양을 사용하기 때문입니다.

IE는 HTML 3.2 정의를 구현하며로 설정 colspan=0됩니다 colspan=1.

버그는 잘 문서화되어 있습니다.


1
열의 양은 가변적 일 수 있으므로 해당 의견을 포함하도록 질문을 업데이트하겠습니다.
Bob

상단 단락의 조언은 합리적이지만 여기의 많은 세부 사항이 옳지 않다고 생각합니다. HTML 3.2 스펙은 말한다 colspan들이어야 긍정적 하게 정수, colspan=0불법; IE 6이 실제로하는 것처럼 확실 colspan=0하게 처리 해야하는 곳은 어디에도 명시 colspan=1되어 있지 않습니다. 또한 인용문은 귀하가 링크하는 포럼 페이지의 어느 곳에서도 (더 이상) 있지 않으며, 대부분의 Google 검색 결과 (현재?)는 IE 6 colspan 관련 버그와 전혀 다릅니다 .
Mark Amery

11

jQuery를 사용하는 경우 (또는 추가하지 않아도되는 경우) 이러한 해킹보다 작업을 더 잘 수행 할 수 있습니다.

function getMaxColCount($table) {
    var maxCol = 0;

    $table.find('tr').each(function(i,o) {
        var colCount = 0;
        $(o).find('td:not(.maxcols),th:not(.maxcols)').each(function(i,oo) {
            var cc = Number($(oo).attr('colspan'));
            if (cc) {
                colCount += cc;
            } else {
                colCount += 1;
            }
        });
        if(colCount > maxCol) { maxCol = colCount };
    });

    return maxCol;

}

구현을 쉽게하기 위해 "maxCol"과 같은 클래스로 조정해야하는 모든 td / th를 장식 한 후 다음을 수행 할 수 있습니다.

$('td.maxcols, th.maxcols').each(function(i,o) {
    $t = $($(o).parents('table')[0]); $(o).attr('colspan',  getMaxColCount($t));
});

이것이 작동하지 않는 구현을 찾으면 답변을 슬램하지 말고 설명으로 설명하고 적용 가능한 경우 업데이트하겠습니다.


1
당신은 바닐라 JS 버전이 있다면 좋을 것
jpaugh

$ (selector) 지원이 부족하거나 사용하고 싶지 않은 일반적인 유스 케이스가 있습니까?
rainabba

1
둘 다. jQuery가 여기에 어떤 이점을 추가하는지 궁금합니다. 그것은 꽤 무거운 전제 조건이며 여기에서 최소한으로 사용되는 것처럼 보입니다.
jpaugh

그럴 수 있지. jQuery와 Angular 사이에는 도구가 없어서 기본적으로 사용하는 경우는 거의 없습니다. 나는 지금 바닐라 버전을 생각해 내기 위해 다른 사람에게 맡길 것입니다.
rainabba

1
jQuery가 다소 구식이기 때문에 es6 버전 / 답변을 추가했습니다 (이 답변을 완전히 다른 코드로 업데이트하고 싶지는 않습니다).
Sjeiti

5

또 다른 작동하지만 추악한 해결책 : colspan="100"100은 필요한 총 열보다 큰 값 colspan입니다.

W3C에 따르면 colspan="0"옵션은 COLGROUP태그 에서만 유효합니다 .


colspan = "100"(예 : 한계를 초과) 경우에 따라 매우 이상한 테이블 렌더링이 발생할 수 있습니다 (일부 테스트 케이스를 찾아 URL을 게시하려고합니다)
scunliffe

-1. 마지막 단락에서 주장을 결정할 수있는 한 거짓이기 때문입니다. HTML 4 수를 <td>가지고이야 colspan="0"(참조 w3.org/TR/REC-html40/struct/tables.html#adef-colspan를 HTML 5.0 허용하지 않는 동안) span="0"A의 colgroup(참조 w3.org/TR/html50/tabular- data.html # attr-colgroup-span"span content attribute [ 's] 값은 0보다 큰 유효한 음이 아닌 정수 여야합니다"라고 말합니다 .
Mark Amery

2

아래는 간결한 es6 솔루션입니다 ( Rainbabba의 답변 과 유사 하지만 jQuery는 없습니다).

Array.from(document.querySelectorAll('[data-colspan-max]')).forEach(td => {
    let table = td;
    while (table && table.nodeName !== 'TABLE') table = table.parentNode;
    td.colSpan = Array.from(table.querySelector('tr').children).reduce((acc, child) => acc + child.colSpan, 0);
});
html {
  font-family: Verdana;
}
tr > * {
  padding: 1rem;
  box-shadow: 0 0 8px gray inset;
}
<table>
<thead>
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
    <th>Header 3</th>
    <th>Header 4</th>
    <th>Header 5</th>
    <th>Header 6</th>
  </tr>
</thead>
<tbod><tr>
  <td data-colspan-max>td will be set to full width</td>
</tr></tbod>
</table>


-1

내 경험을 추가하고 이에 대답하고 싶습니다.
참고 : 사전 정의 tabletrwith with를 가지고 th있지만 행 (예 : AJAX)을 동적으로로드 하는 경우에만 작동합니다 .

이 경우 th첫 번째 헤더 행에 있는 수를 계산 하고 전체 열에 걸쳐 사용할 수 있습니다.

결과를 찾을 수 없을 때 메시지를 릴레이하려는 경우에 필요할 수 있습니다.

jQuery에서 다음과 같은 table것이 있습니다. 입력 테이블은 어디에 있습니까 ?

var trs = $(table).find("tr");
var numberColumns = 999;
if (trs.length === 1) {
    //Assume having one row means that there is a header
    var headerColumns = $(trs).find("th").length;
    if (headerColumns > 0) {
        numberColumns = headerColumns;
    }
}

이 전에 게시 된 JavaScript 솔루션 과 마찬가지로 이것은 잘 일반화되지 않습니다. ths 의 수는 반드시 열 수는 아니지만 일부는 colspan세트를 가질 수 있으므로 모든 사람에게 작성된대로 작동하지는 않습니다.
Mark Amery

-2

어쩌면 나는 똑같은 사상자이지만 조금 당황 스럽습니다. 테이블의 열 번호를 모르십니까?

그런데 IE6는 colgroup이 정의되거나 정의되지 않은 colspan = "0"을 존중하지 않습니다. 열 그룹을 생성하기 위해 thead와 th를 사용하려고 시도했지만 브라우저가 colspan = "0"형식을 인식하지 못합니다.

Windows 및 Linux에서 Firefox 3.0을 사용해 보았으며 엄격한 doctype에서만 작동합니다.

당신은 몇 가지 bowser에서 테스트를 확인할 수 있습니다

http://browsershots.org/http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

여기에서 테스트 페이지를 찾았습니다 http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

편집 : 링크를 복사하여 붙여 넣으십시오. 서식이 링크의 이중 프로토콜 부분을 허용하지 않습니다 (또는 올바르게 형식을 지정하는 것이 현명하지 않습니다).


첫 번째 부분에 동의합니다. 행에 몇 개의 셀이 있는지 알아낼 수 있습니까? 다른 방법으로 생성 하시겠습니까?
nickf September

13
반드시 AJAX 동적으로 생성 된 테이블이있는 앱이 있고 콜백에서 콜백으로 열 수를 변경할 수 있습니다. 당신을 개발할 때 또한, 열 수를 "알"수 있지만이 변경 될 수 있습니다 그리고 당신은 알고 당신이 이들 중 하나 놓칠 것
미친 하플링

11
또한 나중에 열을 추가하면 colspan을 변경하는 것을 잊어 버릴 수 있습니다. 항상 최대 값을 유지하는 것이 좋습니다.
Adam

-2

사양 colspan="0"에 따라 테이블 너비 td가 발생해야합니다.

그러나 테이블 너비가있는 경우에만 해당됩니다! 테이블에는 너비가 다른 행이 포함될 수 있습니다. 따라서 colgroup정의 하면 렌더러가 테이블의 너비를 알고있는 유일한 경우입니다 ! 그렇지 않으면 colspan = "0"의 결과를 결정할 수 없습니다 ...

http://www.w3.org/TR/REC-html40/struct/tables.html#adef-colspan

구형 브라우저에서 테스트 할 수는 없지만 4.0 이후 사양의 일부입니다 ...


"이것은 4.0 이후 사양의 일부입니다" -아뇨, 정확하지 않습니다. 그것은 이었다 사양의 일부, 그러나 이것은 HTML 5에서 제거하고 colspan0의 불법되었다. 두 w3.org/TR/html50/... 합니다 (HTML 5.0 규격) 및 html.spec.whatwg.org/multipage/... (최신 WHATWG HTML 생활 수준) 상태 colspan0보다 커야합니다. 그리고 다른 답변에서 언급했듯이 브라우저는 실제로 사용자가 인용 한 이전 HTML 4 동작을 구현하지 않았습니다.
Mark Amery

-6

"colspan"대신 "colSpan"을 사용해보십시오. IE는 camelBack 버전을 좋아합니다 ...


4
IE를 사용하고 JavaScript 및 .setAttribute ( 'colSpan', int)를 통해 설정하는 경우에만; 이 (성병 모드에서만) IE8에서 수정되었습니다 참고
scunliffe

1
+1-나는 이것을 몰랐고 그것은 큰 도움이었다! colSpan은 IE6에서도 작동하지 않았다고 생각했습니다.
mwilcox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.