设置表列宽度

ala*_*dey 187 html css html-table

我有一个简单的表用于收件箱,如下所示:

<table border="1">
        <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
        </tr>
Run Code Online (Sandbox Code Playgroud)

如何设置宽度,使"从"和"日期"为页面宽度的15%,"主题"为70%.我也希望表占用整个页面宽度.

Gor*_*son 293

<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>
Run Code Online (Sandbox Code Playgroud)

  • @Caltor:代码是**不是**使用<col>`width属性`; 它使用`CSS*style*width`,它取代了<col> width属性.(尽管有多人投票评论!!) (25认同)
  • @Isu_guy你只在使用XHTML时关闭<col> - 在HTML中,<col>标签没有关闭...请参阅[link](http://www.w3schools.com/tags/tag_col.asp)获取更多信息.在HTML5中,<col>是一个void元素,意味着它[不得关闭](http://www.w3.org/TR/html-markup/col.html) (22认同)
  • 喜欢这个解决方案的清洁度.但是,请关闭col例如<col span ="1"style ="width:15%;" />或<col span ="1"style ="width:15%;"> </ col> (5认同)
  • @Zulu根据http://www.w3schools.com/tags/att_col_width.asp"HTML5中不支持<col> width属性." (4认同)
  • `span ="1"`是多余的,因为1是默认值. (4认同)
  • 这里有一个消磨 10 分钟时间的好方法:使用这个解决方案,并观察它根本不起作用,因为无论感觉有多长,你的桌子都会不断地制作列。问题询问如何设置宽度 - 不建议宽度并希望像这个答案那样得到最好的结果! (3认同)
  • 如另一个答案中所述,您可能需要将"table-layout:fixed"添加到表的CSS中.另请参见https://css-tricks.com/fixing-tables-long-strings/ (2认同)

Ron*_*era 120

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>
Run Code Online (Sandbox Code Playgroud)

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 */
}
Run Code Online (Sandbox Code Playgroud)

最佳做法是将HTML和CSS分开,以减少代码重复,并分离关注点(HTML用于结构和语义,CSS用于表示).

请注意,要在旧版本的Internet Explorer中使用此功能,您可能必须为表格指定特定宽度(例如,900px).如果浏览器的包装器没有精确的尺寸,那么浏览器在渲染具有百分比尺寸的元素时会出现问题.

  • 很好,因为<col width ="">在HTML5中已经过时了:https://developer.mozilla.org/en/docs/Web/HTML/Element/col (2认同)

小智 26

使用下面的CSS,第一个声明将确保您的表格坚持您提供的宽度(您需要在HTML中添加类):

table{
  table-layout:fixed;
}
th.from, th.date {
  width: 15%;
}
th.subject{
  width: 70%;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢."table-layout"位使CSS工作. (3认同)

Dan*_*Man 13

只有一个类的替代方式,同时将样式保存在CSS文件中,甚至可以在IE7中使用:

<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>
Run Code Online (Sandbox Code Playgroud)

最近,您还可以使用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>
Run Code Online (Sandbox Code Playgroud)

  • “建议的 :nth-child 解决方案在性能方面很糟糕。” - 需要引用。 (2认同)

Abd*_*zad 8

添加colgroup在您的标签之后table。在此定义width列数,并添加标签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>
Run Code Online (Sandbox Code Playgroud)


tom*_*z86 6

这是我的两个建议.

  1. 使用类.无需指定其他两列的宽度,因为它们将由浏览器自动设置为15%.

        table { table-layout: fixed; }
        .subject { width: 70%; }
    Run Code Online (Sandbox Code Playgroud)
        <table>
          <tr>
            <th>From</th>
            <th class="subject">Subject</th>
            <th>Date</th>
          </tr>
        </table>
    Run Code Online (Sandbox Code Playgroud)

  2. 不使用类.三种不同的方法,但结果是相同的.

    一个)

        table { table-layout: fixed; }
        th+th { width: 70%; }
        th+th+th { width: 15%; }
    Run Code Online (Sandbox Code Playgroud)
        <table>
          <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
          </tr>
        </table>
    Run Code Online (Sandbox Code Playgroud)

    b)

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

    c)这是我的最爱.与b)相同,但浏览器支持更好.

        table { table-layout: fixed; }
        th:first-child+th { width: 70%; }
    Run Code Online (Sandbox Code Playgroud)
        <table>
          <tr>
            <th>From</th>
            <th>Subject</th>
            <th>Date</th>
          </tr>
        </table>
    Run Code Online (Sandbox Code Playgroud)


Bor*_*éry 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>
Run Code Online (Sandbox Code Playgroud)

演示


Mil*_*lan 5

试试这个吧。

<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>
Run Code Online (Sandbox Code Playgroud)


小智 5

    table { table-layout: fixed; }
    .subject { width: 70%; }
Run Code Online (Sandbox Code Playgroud)
    <table>
      <tr>
        <th>From</th>
        <th class="subject">Subject</th>
        <th>Date</th>
      </tr>
    </table>
Run Code Online (Sandbox Code Playgroud)