CSS 테이블 셀 너비


148

테이블 컨테이너 안에 불확실한 수의 테이블 셀 요소가 있습니다.

<div style="display:table;">
  <div style="display:table-cell;"></div>
  <div style="display:table-cell;"></div>
</div>

표 셀의 크기가 다른 콘텐츠라도 테이블 셀의 너비를 동일하게 유지하는 순수한 CSS 방법이 있습니까?

감사.

편집 : 최대 너비를 가짐으로써 내가 생각하는 셀 수를 알 수 있습니까?


클라이언트 또는 서버 측의 열 수는 어떻게 결정됩니까?
iambriansreed

나는 몇 가지 방법을 시도 후, 나는 당신이 사용하는 대신 테이블의 인 flexbox 여러 행을 갖고 싶어하고 동일한 폭을하려면 생각
에릭

답변:


299

다음은 불확실한 셀 수를 가진 작동하는 바이올린입니다. http://jsfiddle.net/r9yrM/1/

각 부모 div( 테이블 )에 너비를 고정 할 수 있습니다 . 그렇지 않으면 평소와 같이 100 %가됩니다.

트릭은 table-layout: fixed;각 셀의 너비와 너비 를 사용 하여 트리거하는 것입니다. 여기서는 2 %입니다. 그러면 다른 표 알고리즘 이 트리거됩니다.이 표는 브라우저가 표시된 크기를 존중하기 위해 매우 열심히 노력합니다.
Chrome으로 테스트하십시오 (필요한 경우 IE8). 최근 Safari에서는 괜찮지 만이 트릭과의 호환성을 기억할 수 없습니다.

CSS (관련 지침) :

div {
    display: table;
    width: 250px;
    table-layout: fixed;
}

div > div {
    display: table-cell;
    width: 2%; /* or 100% according to OP comment. See edit about Safari 6 below */
}

편집 (2013) : OS X의 Safari 6에 유의하십시오. table-layout: fixed; 잘못되었습니다 (또는 다른 브라우저와는 매우 다르거 나 CSS 브라우저가 다릅니다. CSS2.1 REC 테이블 레이아웃을 교정하지 않았습니다.)). 다른 결과에 대비하십시오.


1
고마워, 이것은 대답처럼 보인다. 왜 그런지 모르겠지만 너비를 2 %로 설정하면 실제로 각 열이 2 %로 축소됩니다. 그러나 100 %가 잘 작동하는 것 같습니다. 무슨 일인지 알 겠어?
Harry

3
테이블 셀에서 100 % 너비를 사용해야하는 것과 동일한 문제가 발생했습니다. display : table을 사용하여 상위 요소에 적용된 수정 사항으로 인해 발생했습니다. IE8에서는 100 % 너비 셀이 작동하지 않으므로 해결 방법은 clearfix를 제거하는 것이 었습니다. 잘하면 이것은 누군가를 돕는다.
Alex Barrett

이에 확장하려면 간단한 레이아웃 (1 × 1, 2 × 2, 3 × 3 등)하지만, 복잡한 레이아웃 (1x3x1, 1x2x3x4 등)이 작품을 추가로 필요 div로들 display:table그렇지 않은 행 것처럼 사용되는 display:tabl-row일부 예상대로. 여기에 예가 있습니다 .
filoxo

2
100 % 너비는 IE8 (놀람)에서 작동하지 않았지만 2 %에 대한 초기 제안은 올바른 결과를 제공합니다.

1
IE10에서는 100 % 너비도 작동하지 않았습니다. 그것은 IE11에서 일을. 또한 1 % 너비로 모바일 사파리는 매우 좁은 기둥을 보여줍니다. 그래서 IE9와 IE10을 대상으로하는 CSS 핵을 사용하게되었습니다 .my-cell { width: 100%; }; @media screen and (min-width:0\0) { .my-cell { width: 1%; } }. CSS 핵은 다음과 같습니다 : stackoverflow.com/a/24321386/6962
Henrik N

29

HTML

<div class="table">
    <div class="table_cell">Cell-1</div>
    <div class="table_cell">Cell-2 Cell-2 Cell-2 Cell-2Cell-2 Cell-2</div>
    <div class="table_cell">Cell-3Cell-3 Cell-3Cell-3 Cell-3Cell-3</div>
    <div class="table_cell">Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4Cell-4</div>
</div>

CSS

.table{
    display:table;
    width:100%;
    table-layout:fixed;
}
.table_cell{
    display:table-cell;
    width:100px;
    border:solid black 1px;
}

데모.


바이올린은 여기서 작동하지 않습니다. 세포는 항상 25 %입니다.
netAction

이 솔루션은 클라이언트가 제어하는 ​​사이트 탐색과 같이 동적으로 확장 할 수 없습니다.
Eric K

아마 당신은 옳고 btw, 그것은 거의 2 세 anser @QuantumDynamix입니다. 더 좋은 점이 있습니까? 왜 당신의 생각을 공유하지 말고 세상에 더 나은 것들을 알려주십시오 :-)
The Alpha

15

요소 max-width: 0에서 사용 하면 display: table-cell나를 위해 일했습니다.

.table {
  display: table;
  width: 100%;
}

.table-cell {
  display: table-cell;
  max-width: 0px;
  border: 1px solid gray;
}
<div class="table">
  <div class="table-cell">short</div>
  <div class="table-cell">loooooong</div>
  <div class="table-cell">Veeeeeeery loooooong</div>
</div>


1
여기서는 nitpicking을 사용하지만 0px유효한 단위는 아닙니다. 그냥 있어야합니다 0.
Gavin

이것은 나를 위해 일했지만 어떻게 작동하는지 설명 할 수 있습니까?
Emmanual

6

바꾸다

  <div style="display:table;">
    <div style="display:table-cell;"></div>
    <div style="display:table-cell;"></div>
  </div>

  <table>
    <tr><td>content cell1</td></tr>
    <tr><td>content cell1</td></tr>
  </table>

div가 테이블처럼 작동하도록 만드는 데 관련된 모든 문제를 살펴보십시오. 그들은 테이블 레이아웃을 모방하기 위해 table-xxx를 추가해야했습니다.

테이블은 모든 브라우저에서 지원되며 매우 잘 작동합니다. 왜 그들을 버리지? 그들이 모방해야한다는 사실은 그들이 일을 잘했다는 증거입니다.

제 생각에는 작업에 가장 적합한 도구를 사용하고 테이블 데이터 또는 테이블 데이터 테이블과 비슷한 것을 원한다면 작동합니다.

내가 늦었지만 답할만한 가치가있는 답장.


2
작동하고 CSS가 여전히 있기 때문에 +1 은 2014 년 에 모든 브라우저에서 올바르게 작동하지 않습니다.
Yuck

6
때로는 테이블 데이터가 아닌 것들에 대해 테이블과 같은 레이아웃을 원할 때가 있습니다. 사용한다 예를 들어 이동 요소 <nav>, <ul>

1
반응 형으로 div 기반 레이아웃을 사용하는 것이 이상적입니다. 모바일 장치에 테이블을 표시하는 것은 엉덩이에 고통입니다.
Pablo Rincon

테이블을 에뮬레이트하려고하면 반응 형 디자인이 불가능합니다. 반응 형 디자인을 원한다면 동의합니다. 테이블은 선택이 아닙니다.
DeveloperChris

2
테이블 형식의 데이터를 표시하기 위해 테이블이 만들어졌습니다. 테이블 형식의 데이터를 표시하는 데 사용되는 HTML 요소가 될 것입니다. 테이블 레이아웃은 모방 되지 않았습니다 : CSS2 명령 중 일부였습니다 .HTML 테이블의 기본 레이아웃은 display: table-etc(자연 스럽습니다) 발생합니다. 테이블, 스팬 또는 입력을 모방하는 div 또는 div를 모방하는 링크를 만드는 데 하루를 소비하지 않습니다. 스타일을 지정하기 위해 CSS를 사용하고 있습니다. 마지막으로 IE9를 사용 display하면 table, tr, td 요소에 다른 속성 값을 적용 할 수 있습니다.
FelipeAls 2012

1

이것은 모두를 위해 작동합니다

<table border="your val" cellspacing="your val" cellpadding="your val" role="grid" style="width=100%; table-layout=fixed">
<!-- set the table td element roll attr to gridcell -->
<tr>
<td roll="gridcell"></td>
</tr>
</table>

이것은 반복에 의해 생성 된 테이블 데이터에도 적용됩니다.


0

여기 있습니다 :

http://jsfiddle.net/damsarabi/gwAdA/

표시는 테이블 셀이므로 width : 100px를 사용할 수 없습니다. 그러나 최대 너비 : 100px를 사용할 수 있습니다. 그러면 상자가 100px보다 커지지 않습니다. 그러나 contect가 다른 셀에 번지지 않도록 overflow : hidden을 추가해야합니다. 높이를 늘리지 않으려면 공백을 추가하십시오.


0

이것은 표 셀 스타일을로 설정 width: auto하고 내용을 비워서 수행 할 수 있습니다 . 이제 열의 너비가 동일하지만 내용이 없습니다.

셀에 내용을 삽입하려면 divCSS 로 with를 추가하십시오 .

position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;

또한 position: relative셀 에 추가 해야합니다.

이제 실제 내용을 위에서 설명한 div에 넣을 수 있습니다.

https://jsfiddle.net/vensdvvb/

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