테이블 열 너비 설정


202

받은 편지함에 사용되는 간단한 테이블이 다음과 같습니다.

<table border="1">
        <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
        </tr>

시작 및 날짜가 페이지 너비의 15 %이고 주제가 70 %가되도록 너비를 설정하는 방법 또한 테이블이 전체 페이지 너비를 차지하기를 원합니다.

답변:


319

<table style="width: 100%">
    <colgroup>
       <col span="1" style="width: 15%;">
       <col span="1" style="width: 70%;">
       <col span="1" style="width: 15%;">
    </colgroup>
    
    
    
    <!-- Put <thead>, <tbody>, and <tr>'s here! -->
    <tbody>
        <tr>
            <td style="background-color: #777">15%</td>
            <td style="background-color: #aaa">70%</td>
            <td style="background-color: #777">15%</td>
        </tr>
    </tbody>
</table>


5
이 솔루션의 청결과 같습니다. 그러나 <col span = "1"style = "width : 15 %;"열을 닫으십시오. /> 또는 <col span = "1"style = "width : 15 %;"> </ col>
lsu_guy 0시 22 분에서

23
@Isu_guy XHTML을 사용할 때 <col> 만 닫습니다. HTML에서 <col> 태그는 닫히지 않습니다 . 자세한 내용은 링크 를 참조하십시오. HTML5에서 <col>은 void 요소이므로
닫혀서는

4
w3schools.com/tags/att_col_width.asp 에 따른 @Zulu "<col> width 속성은 HTML5에서 지원되지 않습니다."
Caltor

30
@Caltor : 코드가 <col>을 사용 하지 않습니다width attribute . CSS *style* width<col> width 속성을 대체 한을 사용하고 있습니다. (여러 사람들이 그 의견을 찬성 투표에도 불구하고 !!)
ToolmakerSteve

4
span="1"1이 기본값이므로 불필요합니다.
Madbreaks

128

HTML :

<table>
  <thead>
    <tr>
      <th class="from">From</th>
      <th class="subject">Subject</th>
      <th class="date">Date</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>[from]</td>
      <td>[subject]</td>
      <td>[date]</td>
    </tr>
  </tbody>
</table>

CSS :

table {
  width: 100%;
  border: 1px solid #000;
}
th.from, th.date {
  width: 15%
}
th.subject {
  width: 70%; /* Not necessary, since only 70% width remains */
}

가장 좋은 방법은 코드 중복을 줄이고 관심을 분리하기 위해 HTML과 CSS를 분리하여 유지하는 것입니다 (구조 및 의미론을위한 HTML, 프리젠 테이션을위한 CSS).

이전 버전의 Internet Explorer에서 작동하려면 표에 특정 너비 (예 : 900px)를 제공해야 할 수도 있습니다. 해당 랩퍼의 크기가 정확한 경우 해당 브라우저에는 백분율 크기의 요소를 렌더링하는 데 문제가 있습니다.


첫 번째 행의 colspans있는 경우이 솔루션은 실패
mark1234

3
HTML5에서는 <col width = "">이 더 이상 사용되지 않기 때문에 좋습니다. developer.mozilla.org/en/docs/Web/HTML/Element/col
Richard

30

아래 CSS를 사용하면 첫 번째 선언으로 테이블이 제공 한 너비에 고정됩니다 (HTML에 클래스를 추가해야 함).

table{
  table-layout:fixed;
}
th.from, th.date {
  width: 15%;
}
th.subject{
  width: 70%;
}

실제로 두 열의 너비 만 지정하면됩니다. 세 번째는 자동으로 계산되므로 table{table-layout:fixed};.from,.date{width:15%}충분합니다. 클래스가 다른 요소에서도 사용되지 않는 한 쓰기 th.from는 중복되며 just로 단축 될 수 있습니다 .from.
tomasz86

14

IE7에서도 작동하는 CSS 파일에 스타일을 유지하면서 하나의 클래스 만 사용하는 대체 방법 :

<table class="mytable">
    <tr>
        <th>From</th>
        <th>Subject</th>
        <th>Date</th>
    </tr>
</table>
<style>
    .mytable td, .mytable th { width:15%; }
    .mytable td + td, .mytable th + th { width:70%; }
    .mytable td + td + td, .mytable th + th + th { width:15%; }
</style>

최근에는 nth-child()CSS3 (IE9 +) 의 셀렉터를 사용 하여 nr을 넣을 수도 있습니다. 인접한 셀렉터와 함께 문자열을 묶는 대신 괄호 안에 각 열을 추가합니다. 예를 들면 다음과 같습니다.

<style>
    .mytable tr > *:nth-child(1) { width:15%; }
    .mytable tr > *:nth-child(2) { width:70%; }
    .mytable tr > *:nth-child(3) { width:15%; }
</style>

제안 된 :nth-child솔루션은 성능면에서 끔찍합니다. 스타일을 지정할 요소가 세 개 ( th또는 col) 밖에없는이 예제에서는 특히 유니버설 선택기와 함께 사용할 이유가 없습니다 . 또한 th첫 번째 행의 너비만으로 설정하면됩니다 . .mytable td첫 번째 예제에서 중복됩니다.
tomasz86

"제안 된 n-child 솔루션은 성능면에서 끔찍합니다." -인용이 필요했습니다.
DanMan

이것으로 충분합니다 : CSS를 효율적으로 렌더링 . 유니버설 선택기를 사용하면 브라우저는 먼저 모든 요소가 다른 요소의 n 번째 자식인지 여부를 확인한 다음 직접 상위 요소가 tr있는지 여부에 속하는지 여부를 확인합니다 .mytable. 정말로 "nth"를 사용하려면 다음과 같은 것이 훨씬 나을 것입니다 : .mytable th:nth-of-type(1) {width: 15%}; .mytable th:nth-of-type(2) {width: 70%};. 이 경우 세 번째 열 너비를 지정할 필요도 없습니다.
tomasz86

개인적으로 나는 수업을 사용하거나 그냥 .mytable th+th{width: 70%}.mytable th+th+th{width:15%}. "n 번째"셀렉터 자체는 매우 유용하지만이 특별한 경우 (열이 3 개인 작은 테이블)는 실제로 필요하지 않습니다. 사용 table-layout: fixed하면 다음과 같이 할 수도 있습니다 table{table-layout:fixed}th:first-child+th{width:70%}.
tomasz86

알고 있습니다. 그러나 그 기사는 몇 년 전부터 작성되었으며 오늘날 많은 이미지 및 JS 코드와 같은 CSS 선택기에서 더 큰 문제가 있습니다.
DanMan

8

이것들은 나의 두 가지 제안입니다.

  1. 수업 이용하기. 다른 두 열의 너비는 브라우저에서 자동으로 각각 15 %로 설정되므로 너비를 지정할 필요가 없습니다.

        table { table-layout: fixed; }
        .subject { width: 70%; }
        <table>
          <tr>
            <th>From</th>
            <th class="subject">Subject</th>
            <th>Date</th>
          </tr>
        </table>

  2. 수업을 사용하지 않고. 세 가지 방법이 있지만 결과는 동일합니다.

    ㅏ)

        table { table-layout: fixed; }
        th+th { width: 70%; }
        th+th+th { width: 15%; }
        <table>
          <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
          </tr>
        </table>

    비)

        table { table-layout: fixed; }
        th:nth-of-type(2) { width: 70%; }
        <table>
          <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
          </tr>
        </table>

    c) 이것은 내가 가장 좋아하는 것입니다. b)와 동일하지만 더 나은 브라우저 지원.

        table { table-layout: fixed; }
        th:first-child+th { width: 70%; }
        <table>
          <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
          </tr>
        </table>


5

몸 (또는 테이블을 감싸고있는 div) '설정'에 따라 다음을 수행 할 수 있어야합니다.

body {
  width: 98%;
}

table {
  width: 100%;
}


th {
  border: 1px solid black;
}


th.From, th.Date {
  width: 15%;
}

th.Date {
  width: 70%;
}


<table>
  <thead>
    <tr>
      <th class="From">From</th>
      <th class="Subject">Subject</th>
      <th class="Date">Date</th>
    </tr>
   </thead>
   <tbody>
     <tr>
       <td>Me</td>
       <td>Your question</td>
       <td>5/30/2009 2:41:40 AM UTC</td>
     </tr>
   </tbody>
</table>

데모


5

    table { table-layout: fixed; }
    .subject { width: 70%; }
    <table>
      <tr>
        <th>From</th>
        <th class="subject">Subject</th>
        <th>Date</th>
      </tr>
    </table>


4
<table>
  <col width="130">
  <col width="80">
  <tr>
    <th>Month</th>
    <th>Savings</th>
  </tr>
  <tr>
    <td>January</td>
    <td>$100</td>
  </tr>
  <tr>
    <td>February</td>
    <td>$80</td>
  </tr>
</table>

데모


8
HTML5에서는 col 너비 ​​속성이 지원되지 않습니다.

4

대신 사용해보십시오.

<table style="width: 100%">
    <tr>
        <th style="width: 20%">
           column 1
        </th>
        <th style="width: 40%">
           column 2
        </th>
        <th style="width: 40%">
           column 3
        </th>
    </tr>
    <tr>
        <td style="width: 20%">
           value 1
        </td>
        <td style="width: 40%">
           value 2
        </td>
        <td style="width: 40%">
           value 3
        </td>
    </tr>
</table>

3

border 속성을 사용하지 말고 모든 스타일링 요구에 CSS를 사용하십시오.

<table style="border:1px; width:100%;">
    <tr>
            <th style="width:15%;">From</th>
            <th style="width:70%;">Subject</th>
            <th style="width:15%;">Date</th>
    </tr>
... rest of the table code...
</table>

그러나 이와 같은 CSS를 삽입하는 것은 좋지 않습니다. 대신 CSS 클래스를 사용하고 CSS 규칙을 외부 CSS 파일에 넣어야합니다.


1
OP와 유용한 stackoverflowians가 게시 한 예제 코드가 가독성과 단순성을위한 것이라고 생각하지는 않습니다. 인라인 스타일에 대한 격려는 아닙니다.
Tass

2

CSS를 지원하는 또 다른 최소 방법은 다음과 같습니다 :nth-child. http://jsfiddle.net/3wZWt/를 지원하지 않는 구형 브라우저에서도 작동합니다 .

HTML :

<table>
    <tr>
        <th>From</th>
        <th>Subject</th>
        <th>Date</th>
    </tr>
    <tr>
        <td>Dmitriy</td>
        <td>Learning CSS</td>
        <td>7/5/2014</td>
    </tr>
</table>

CSS :

table {
    border-collapse: collapse;
    width: 100%;
}

tr > * {
    border: 1px solid #000;
}

tr > th + th {
    width: 70%;
}

tr > th + th + th {
    width: 15%;
}

2

테이블 태그 뒤에 colgroup을 추가하십시오. 여기에서 열의 너비와 수를 정의하십시오. 그리고 tbody 태그를 추가하십시오. 당신의 tr을 tbody 안에 넣으십시오.

<table>
    <colgroup>
       <col span="1" style="width: 30%;">
       <col span="1" style="width: 70%;">
    </colgroup>


    <tbody>
        <tr>
            <td>First column</td>
            <td>Second column</td>
        </tr>
    </tbody>
</table>

0
style="column-width:300px;white-space: normal;"

안녕하세요-스택 오버플로에 오신 것을 환영합니다. 일반적으로 코드가 아닌 텍스트가 포함 된 답변 및 일부 설명은 코드 전용 답변보다 나은 것으로 간주됩니다. 이 질문은 더 오래되었고 다른 답변이 많으므로 향후 답변을 안내하는 데 도움이 될 수 있습니다.
jwheron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.