2017-07-31 60 views
0

我有一張桌子,各種各樣的列和一個固定的寬度。前提是某些列應始終完全顯示。因此,無論何時表格的寬度超出容器限制,選定的列都會減小寬度,以免其他人受到影響。如何選擇哪個列縮小以適合表寬?

從這個例子中,期望的結果將是第一列和最後一列總是顯示他們的內容,而中間一列則縮短以表示它們的內容。

https://jsfiddle.net/quz7jdk8/1/

#content { 
 
    border: 1px solid; 
 
    max-width: 220px; 
 
    overflow: hidden; 
 
} 
 

 
table th, 
 
table td { 
 
    white-space: nowrap; 
 
    text-overflow: ellipsis; 
 
}
<div id="content"> 
 
    <table> 
 
    <thead> 
 
     <tr> 
 
     <th>qnty</th> 
 
     <th>desc.</th> 
 
     <th>total</th> 
 
     </tr> 
 
    </thead> 
 
    <tbody> 
 
     <tr> 
 
     <td>0.2222222</td> 
 
     <td>weigth product</td> 
 
     <td>255555.00</td> 
 
     </tr> 
 
     <tr> 
 
     <td>1</td> 
 
     <td>prod</td> 
 
     <td>1.00</td> 
 
     </tr> 
 
    </tbody> 
 
    </table> 
 
</div>

可選:如果有可能縮短列應該有一個text-overflow: ellipsis;行爲。

附加信息我忘了提及:

  • 容器寬度不能在任何情況下進行修改。

  • 由於結果將以紙張打印,因此不應顯示卷軸。

  • tbody行的內容是動態的。因此,當單元格內容的長度使表大於容器時(如示例中所示),問題就會顯現出來。

+0

給你的輸出更好地理解 – Bhargav

+0

你應該嘗試'溢出:auto' – Bhargav

+0

@Bhargav忘了提不容許卷軸,因爲結果用於打印目的 – Grirg

回答

0

我覺得不好張貼這個答案,因爲我仍然不明白爲什麼它的工作原理......我只是想荒謬的東西...對不起那個。

解決這個問題的第一部分是用td替換標頭中的th(th可能有一些未知屬性會混淆所有內容)。然後爲每個標題單元格width:1%;設置一個樣式,除了中間和中間的tbody單元格爲max-width:0;(不要問我爲什麼或者它是如何工作的)。

在更新的例子中,你可以看到我打算做的事: https://jsfiddle.net/quz7jdk8/5/

故取其內容是,第一,最後一列將始終可見,同時減少中間一列的寬度。

事實上,它在Chrome和Firefox上運行穩定。

(obiously如果first_column_length + last_column_length> container_width預期的結果變得IMPOSIBLE)

+0

對不起每個人都讀這個問題的所有爛攤子和隨機sh * t。如果有人能夠解釋我爲什麼會工作或能提供更合理的答案,請讓我知道。 – Grirg

+0

將th改爲td,基本上只是改變了表的語義。從表頭到表格數據。它會在不同的瀏覽器上更改,但表格標題通常在單元格中間呈現,並且粗體顯示,因爲td具有默認設置。 在間距方面,它不受最大寬度控制:0;它是由未使用此值設置的列標題控制的。 由於溢出屬性和省略號被設置,它仍然會執行所要求的內容,但它是基於列標題,正如我所說的,以演示如何向該區域添加更多文本。 –

+0

所以,在你看來,tbody單元的最大寬度並沒有做任何事情,因爲它是估計列寬的頭......嘗試去掉示例中的最大寬度。 此外,如果向文本標題單元格添加文本,表格會增加其寬度,但是如果向標題單元格添加最大寬度,則希望的行爲會再次跳出,這顯然不是最大寬度的原始行爲:0。我們可以看到它不是0. – Grirg

1

這個問題不是很清楚,但我想你試圖隱藏在一定的屏幕寬度的中間單元格的寬度?

但這是一個可能的解決方案?

https://codepen.io/stefan24/pen/ZJWYXK

  #content{ 
      border:1px solid; 
      max-width:220px; 
      overflow: hidden; 
     } 
     table th, table td{ 
      white-space:nowrap; 
      text-overflow: ellipsis; 
     } 


     @media (max-width: 1200px) { 
      .mid_row { 
       text-overflow: ellipsis; 
       width: 30px; 
       display: block; 
       white-space: nowrap; 
       overflow: hidden; 
      } 
     } 


<div id="content"> 
<table> 
<thead> 
<tr> 
    <th>qnty</th> 
    <th class="mid_row">desc.</th> 
    <th>total</th> 
</tr> 
</thead> 
<tbody> 
<tr> 
    <td>0.2222222</td> 
    <td class="mid_row">weigth product</td> 
    <td>255555.00</td> 
</tr> 
<tr> 
    <td>1</td> 
    <td class="mid_row">product</td> 
    <td>1.00</td> 
</tr> 
</tbody> 
</table> 
</div> 
+0

謝謝,但我的問題不是關於分辨率,而是關於單元格內容的長度。你的回答仍然幫助我理解我的問題出了什麼問題......現在就編輯它。 – Grirg

+1

好吧有點含糊。 但是,你想要一列是一個固定的寬度,然後截斷一定的寬度? https://codepen.io/stefan24/pen/ZJWYXK –

+0

tbody中的所有單元數據都是動態的。因此,即使截斷中間的內容,其他內容也可能會使數據不完全可見。中間列的截斷應該是某種動態的,以確保無論內容長度是多少,第一個和最後一個字段總是可見的。 – Grirg