고정 테이블 셀 너비


175

많은 사람들이 여전히 테이블을 사용하여 컨트롤, 데이터 등을 레이아웃합니다. 이것의 예로는 인기있는 jqGrid가 있습니다. 그러나 내가 설득 할 수없는 마술이 있습니다 (크게 울부 짖는 테이블, 얼마나 많은 마술이있을 수 있습니까?)

테이블의 열 너비를 설정하고 jqGrid처럼 준수하는 방법은 무엇입니까? 이것을 복제하려고하면 모든 <td style='width: 20px'>셀을 설정하더라도 셀 중 하나의 내용이 20px를 초과하면 셀이 확장됩니다!

아이디어 나 통찰력이 있습니까?

답변:


249

당신은 사용을 시도 할 수 <col>있는 모든 행에 대한 관리 태그를 테이블 스타일을하지만 당신은 설정해야합니다 table-layout:fixed온 스타일 <table>또는 테이블 CSS 클래스 및 설정 overflow세포에 대한 스타일을

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>

그리고 이것은 당신의 CSS입니다

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }

15
COL 것 HTML5에하지 작업, 대신 인라인 CSS 또는 CSS 클래스에 의한 개별 TD 세트 폭
판 카즈 Phartiyal

10
원하는 테이블에 너비를 명시 적으로 적용하지 않으면 허용되는 답변이 작동하지 않습니다. 단위를 사용하든 백분율을 사용하든 완벽하게 작동합니다. @totymedli의 답변에 투표가없고 사용자가 그것을 무시하지 않기를 원했기 때문에 이것을 지적했습니다. 그러나 단어 분리 제안은 그것이 당신이 목표로하지 않는 한 필요하지 않습니다.
thebdawk05

여러 열에 걸쳐있는 하나의 TD 요소 만있는 행이 있으면 어떻게됩니까? 샘플 코드를 사용하면 <TD colspan="3">자체적으로 행에 있다면 90px입니까?
sab669

도움을 주셔서 감사합니다. 데이터가 겹치려면 이것을 추가하십시오 table.fixed td { word-wrap: break-word; }.
Parag Tyagi

단어 분리 제안은 필요하지 않지만 대부분의 시나리오에서 고정 너비 테이블의 오버플로 내용이 거의 발생하기 때문에 나머지 SO 사용자에게 유용하며 질문과 관련이 있습니다.
Amy Pellegrini

101

이제 HTML5 / CSS3에서는 문제에 대한 더 나은 솔루션을 제공합니다. 제 생각에는이 순전히 CSS 솔루션이 권장됩니다.

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>

테이블을 설정해야합니다 width심지어 을 haunter의 솔루션 . 그렇지 않으면 작동하지 않습니다. vsync가 제안한
새로운 CSS3 기능 은 다음과 같습니다 . 공백없이 단어를 여러 줄로 나눕니다. 다음과 같이 코드를 수정하십시오.word-break:break-all;

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}

최종 결과

렌더링 된 테이블


로 행을 던지면 colspan이 솔루션을 깨뜨리는 것처럼 보입니다. colspan> 1 을 포함하는 테이블에서이 솔루션을 사용하는 방법에 대한 제안 사항이 있습니까?
Eric K

@QuantumDynamix 나는 첫 번째 행, colspans가없는 행, 너비가있는 모든 개별 열을 포함 하여이 문제를 해결했습니다. 그런 다음 높이가 0, 경계 : 없음, 가시성 : 숨김, 패딩 : 0px 등으로 해당 행을 숨기고 두 번째 행은 colspans가있는 곳에서 가장 먼저 보려는 것입니다. 개별 고정 너비 셀이있는 첫 번째 행은 너비를 설정합니다.
AaronLS

@totymedli 테이블을 모든 열 너비의 합계로 가져 오는 방법에 대한 아이디어가 있습니까? 내 테이블은 약간 동적으로 생성되므로 테이블 너비를 미리 계산할 수 없지만 일부 요소를 확장하기 때문에 100 %를 사용하고 싶지 않습니다.
AaronLS

14
table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}

9
table-layouttd 요소에 사용할 수 있습니까?
Nick

@ 닉-그것은 잘 작동합니다. Hovewer 나는 min-width 및 max-width 속성도 추가해야하며 (너비와 동일한 값) 너비가 실제로 고정되었습니다.
Denis Khay

11

나는 하나의 긴 테이블 td 셀을 가지고 있는데, 이것은 테이블을 브라우저의 가장자리로 향하게하고 추악하게 보였다. 방금 해당 열을 고정 크기로하고 지정된 너비에 도달하면 단어를 나누기를 원했습니다. 그래서 이것은 나를 위해 잘 작동했습니다 :

<td><div style='width: 150px;'>Text to break here</div></td>

table, tr 요소에 어떤 종류의 스타일도 지정할 필요가 없습니다. overflow : hidden;을 사용할 수도 있습니다. 다른 답변에서 제안한 것처럼 초과 텍스트가 사라집니다.


2
또는 필요한 경우 너비 대신 최대 너비를 사용할 수 있습니다. 너비 제한에 도달하지 않으면 텍스트를 나누지 않아도됩니다. 텍스트가 지정된 너비보다 작 으면 테이블 셀에 빈 공간이 없습니다. <td> <div style = 'max-width : 150px;'> 텍스트 나누기 </ div> </ td>
Tarik


0

FULLSCREEN 너비 테이블의 경우 :

  • 테이블 너비는 100 % 여야합니다.

  • 만약 N 개의 집단이 필요하다면, TH는 N + 1이어야한다

3 열의 예 :

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
    table.fixed td {
      overflow: hidden;
    }
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>


-2
table
{
  table-layout:fixed;
}
td,th
{
  width:20px; 
  word-wrap:break-word;
}

: first-child ... : nth-child (1) 또는 ...

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