Làm thế nào để sửa chữa chiều cao của TR?


102

Có thể sửa chiều cao của hàng (tr) trên bảng không?

Sự cố xuất hiện khi tôi thu nhỏ cửa sổ của trình duyệt, một số hàng bắt đầu chạy xung quanh và tôi không thể sửa chiều cao của hàng.

Tôi đã thử một số cách: tr width="20" / tr style="height:20px" / td height="20" / td style="height:20px"

Tôi đang sử dụng IE7

Phong cách

.tableContainer{
    color:#0076BF;
    margin: -10px 0px -10px 0px;
    border-spacing: 10px;
    empty-cells:show;
    width:90%;
    text-align:left;
} 

.tableContainer tr td{
    white-space:nowrap;
    text-align:left;
}

Mã HTML.

<table class="tableContainer" cellspacing="10px">
    <tr style="height:15px;">
        <td>NHS Number</td>
        <td>&#160;</td>
        <td>Date of Visit</td>
        <td>&#160;</td>
        <td colspan="3">Care Time Started</td>
        <td>&#160;</td>
        <td rowspan="2" style="text-align:right;vertical-align:bottom;">&#9745;</td>
        <td rowspan="2" style="font-weight:bold;vertical-align:bottom;">Tick when<br/>                        care starts</td>
    </tr>
    <tr>
        <td width="90" class="tableContainerRow2">&#160;</td>
        <td >&#160;</td>
        <td width="80" class="tableContainerRow2">&#160;</td>
        <td >&#160;</td>
        <td width="40" class="tableContainerRow2">&#160;</td>
        <td  width="5">:</td>
        <td width="40" class="tableContainerRow2">&#160;</td>        
        <td >&#160;</td>
    </tr>
</table>

Câu trả lời:


97

Các bảng không phù hợp (ít nhất là trong IE) khi nói đến việc cố định độ cao và không gói văn bản. Tôi nghĩ bạn sẽ thấy rằng giải pháp duy nhất là đặt văn bản bên trong một divphần tử, như sau:

td.container > div {
    width: 100%;
    height: 100%;
    overflow:hidden;
}
td.container {
    height: 20px;
}
<table>
    <tr>
        <td class="container">
            <div>This is a long line of text designed not to wrap 
                 when the container becomes too small.</div>
        </td>
    </tr>
</table>

Bằng cách này, divchiều cao của ô chứa và văn bản không thể phát triển div, giữ cho ô / hàng có cùng chiều cao bất kể kích thước cửa sổ là bao nhiêu.


1
Cảm ơn vì lời khuyên, Nó có vẻ hoạt động, nhưng nó trông hơi lộn xộn.
Amra

Rất vui khi được giúp đỡ :-) Thật không may, mã lộn xộn thường là trường hợp xảy ra trong các vụ hack và cách giải quyết.
Andy E

Tôi sử dụng [mã] .container {width: 100%; chiều cao tối đa: 40px; tràn: ẩn; } [/ code] và [code] <div class = 'container'> </div> [/ code].
Cees Timmerman

Tôi đã thực hiện phương pháp tương tự, đặt một div bên trong thẻ <th> và nó hoạt động tốt. Tôi chỉ gặp sự cố này trên Chrome. FFox, Safari và IE đã hỗ trợ tốt chiều cao được đặt trên tiêu đề bảng. Cám ơn vì đã chia sẻ! :)
Mário Rodrigues

không làm việc trong safari ... bạn cần phải thiết lập chiều cao thực tế và chiều rộng trên div là tốt, không chỉ là td
Radu Simionescu

15

Hãy thử đặt chiều cao vào một trong các ô, như sau:

<table class="tableContainer" cellspacing="10px">
 <tr>
  <td style="height:15px;">NHS Number</td>
  <td>&#160;</td>

Tuy nhiên, lưu ý rằng bạn sẽ không thể làm cho ô nhỏ hơn nội dung yêu cầu. Trong trường hợp đó, bạn sẽ phải thu nhỏ văn bản trước.


1
Tôi khá chắc rằng bạn không sử dụng "px" trong các thuộc tính html.
phát hành

10
Tôi khá chắc rằng bạn có thể sử dụng trong thuộc tính style.
Burak Dobur

11

Đặt tdchiều cao nhỏ hơn mức tự nhiên chiều cao của nội dung

Vì các ô trong bảng muốn ít nhất phải đủ lớn để bao bọc nội dung của chúng, nên nếu nội dung không có chiều cao rõ ràng, các ô có thể được thay đổi kích thước tùy ý.

Bằng cách thay đổi kích thước các ô, chúng ta có thể kiểm soát chiều cao của hàng.

Một cách để làm điều này là đặt nội dung với một absolutevị trí trong relativeô, và đặt heightô cũng như lefttopcủa nội dung.

table {
  width: 100%;
}
td {
  border: 1px solid #999;
}
.set-height td {
  position: relative;
  overflow: hidden;
  height: 3em;
}
.set-height p {
  position: absolute;
  margin: 0;
  top: 0;
}
/* table layout fixed */
.layout-fixed {
  table-layout: fixed;
}
/* td width */
.td-width td:first-child {
  width: 33%;
}
<table><tbody>
  <tr class="set-height">
    <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></td>
    <td>Foo</td></tr><tr><td>Bar</td><td>Baz</td></tr><tr><td>Qux</td>
    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</td>
  </tr>
</tbody></table>
<h3>With <code>table-layout: fixed</code> applied:</h3>
<table class="layout-fixed"><tbody>
  <tr class="set-height">
    <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></td>
    <td>Foo</td></tr><tr><td>Bar</td><td>Baz</td></tr><tr><td>Qux</td>
    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</td>
  </tr>
</tbody></table>
<h3>With <code>&lt;td&gt; width</code> applied:</h3>
<table class="td-width"><tbody>
  <tr class="set-height">
    <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></td>
    <td>Foo</td></tr><tr><td>Bar</td><td>Baz</td></tr><tr><td>Qux</td>
    <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</td>
  </tr>
</tbody></table>

Các table-layout sản

Bảng thứ hai trong đoạn mã trên có table-layout: fixed được áp dụng, làm cho các ô có chiều rộng bằng nhau, bất kể nội dung của chúng, bên trong ô gốc.

Theo caniuse.com , không có vấn đề tương thích đáng kể nào liên quan đến việc sử dụngtable-layout kể từ ngày 12 tháng 9 năm 2019.

Hoặc chỉ cần áp dụng widthcho các ô cụ thể như trong bảng thứ ba.

Các phương pháp này cho phép ô chứa nội dung không kích thước hiệu quả được tạo bằng cách áp dụng position: absolute để được cung cấp một số chu vi tùy ý.

Đơn giản hơn nhiều ...

Tôi thực sự nên nghĩ về điều này ngay từ đầu; chúng ta có thể thao tác nội dung ô trong bảng cấp độ khối theo tất cả các cách thông thường và không phá hủy hoàn toàn kích thước tự nhiên của nội dung position: absolute, chúng ta có thể rời khỏi bảng để tìm ra chiều rộng nên là bao nhiêu.

table {
  width: 100%;
}
td {
  border: 1px solid #999;
}
table p {
  margin: 0;
}
.cap-height p {
  max-height: 3em;
  overflow: hidden;
}
<table><tbody>
  <tr class="cap-height">
    <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></td>
    <td>Foo</td>
  </tr>
  <tr class="cap-height">
    <td><p>Bar</p></td>
    <td>Baz</td>
  </tr>
  <tr>
    <td>Qux</td>
    <td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></td>
  </tr>
</tbody></table>


Cuối cùng là một câu trả lời có vẻ đầy hứa hẹn! Gotta thử nó ngay khi tôi sẽ làm việc, tôi sẽ phản hồi nếu tôi không quên.
jeromej

1
Làm việc như người ở! (Cảnh báo rằng nó remove text-align: centervà thủ thuật định tâm khác mặc dù ... vì nó phụ thuộc vào position: absolute)
jeromej

Điều này phù hợp với chiều cao trong trường hợp của tôi, nhưng khi sử dụng postion: absolute, tôi sẽ mất chiều rộng ô tự động. Cố gắng tìm cách để bảng vẫn tính toán đúng chiều rộng ô trong khi kiểm soát chiều cao hàng. Có suy nghĩ gì không?
ash

@ash - Tôi không nghĩ ngay đến bất kỳ cách nào để giữ độ rộng hoàn toàn tự động sau khi phá hủy kích thước của nội dung một cách hiệu quả, nhưng chúng ta có thể buộc các ô trong bảng phải rộng tùy ý. Tôi đã mở rộng đoạn mã ví dụ để hiển thị một phương pháp có thể giúp bạn. Tôi sẽ suy nghĩ thêm về nó và bổ sung thêm chi tiết nếu có bất cứ điều gì hữu ích trong tâm trí bạn :)
Fred Gandt 12/09/19

Cảm ơn Fred. Lưu ý rằng tôi có thể có tiêu đề (<th>) để cung cấp kích thước cố định cho các cột, nhưng sau đó tôi lo ngại rằng tiêu đề có thể quá hẹp hoặc quá rộng.
ash

8

Đặt div bên trong một td làm cho nó hoạt động cho tôi.

<table width="100%">
    <tr><td><div style="font-size:2px; height:2px; vertical-align:middle;">&nbsp;</div></td></tr>

2

Chiều rộng bảng của bạn là 90% so với vùng chứa của nó.

Nếu bạn bóp trang, có thể bạn cũng đang ép chiều rộng bảng. Chiều rộng của các ô cũng giảm và trình duyệt bù đắp bằng cách tăng chiều cao.

Để có chiều cao không bị ảnh hưởng, bạn phải đảm bảo chiều rộng của các ô có thể chứa nội dung dự định. Sửa chiều rộng bảng có lẽ là điều bạn muốn thử. Hoặc có thể thử với chiều rộng tối thiểu của bảng.


1

Tôi phải làm điều này để có được kết quả mà tôi muốn:

<td style="font-size:3px; float:left; height:5px; vertical-align:middle;" colspan="7"><div style="font-size:3px; height:5px; vertical-align:middle;"><b><hr></b></div></td>

Nó từ chối hoạt động chỉ với ô hoặc div và cần cả hai.


-5

Đó là bởi vì các từ đang bao bọc và đang đi trên các dòng mới do đó kéo dài TR. Điều này sẽ khắc phục vấn đề của bạn:

overflow:hidden;

Đặt nó trong các kiểu TR Mặc dù nó nên hoạt động, tại sao không chỉ để nó kéo dài o0

Tái bút. Tôi đã thử nghiệm nó nên không ghét XD


3
Không ghét, nhưng có một danh sách các kiểu được phần tử TD hỗ trợ trong IE tại msdn.microsoft.com/en-us/library/ms535911(VS.85).aspx . overflowkhông phải là một trong số họ.
Andy E
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.