ความกว้างของเซลล์ตารางคงที่


175

ผู้คนจำนวนมากยังคงใช้ตารางเพื่อควบคุมการจัดวางข้อมูลและอื่น ๆ - ตัวอย่างหนึ่งของนี้คือ jqGrid ที่เป็นที่นิยม อย่างไรก็ตามมีเวทมนตร์บางอย่างเกิดขึ้นที่ฉันไม่สามารถเข้าใจได้ (ตารางของมันสำหรับการร้องไห้ออกมาดัง ๆ ว่ามีเวทมนตร์ได้มากแค่ไหน?)

เป็นไปได้อย่างไรที่จะตั้งค่าความกว้างคอลัมน์ของตารางและให้เป็นไปตามที่ jqGrid ทำเช่นนั้น! ถ้าฉันพยายามที่จะทำซ้ำสิ่งนี้แม้ว่าฉันจะตั้งค่าทุก<td style='width: 20px'>ทันทีที่เนื้อหาของหนึ่งในเซลล์เหล่านั้นมีค่ามากกว่า 20px เซลล์จะขยายตัว!

ความคิดหรือข้อมูลเชิงลึกใด ๆ

คำตอบ:


249

คุณสามารถลองใช้การ<col>จัดการแท็กจัดแต่งทรงผมของตารางสำหรับทุกแถว แต่คุณจะต้องกำหนดtable-layout:fixedสไตล์ใน<table>หรือคลาส css ตารางและกำหนดoverflowสไตล์สำหรับเซลล์

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>

และนี่คือ CSS ของคุณ

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }

15
col จะไม่ทำงานใน html5, ตั้งค่าความกว้างของแต่ละ td แทนโดยแบบอินไลน์ css หรือ css
Pankaj Phartiyal

10
คำตอบที่ยอมรับไม่ทำงานจนกว่าคุณจะใช้ความกว้างสำหรับตารางที่ต้องการอย่างชัดเจน ทำงานได้อย่างสมบูรณ์แบบไม่ว่าคุณจะใช้หน่วยหรือเปอร์เซ็นต์ คิดว่าฉันจะชี้ประเด็นนี้เนื่องจากคำตอบของ @ totymedli ไม่ได้รับการลงคะแนนใด ๆ และฉันไม่ต้องการให้ผู้ใช้เพิกเฉย อย่างไรก็ตามคำแนะนำการแบ่งคำไม่จำเป็นเว้นแต่ว่าเป็นสิ่งที่คุณต้องการ
thebdawk05

จะเกิดอะไรขึ้นเมื่อคุณมีแถวที่มีองค์ประกอบ TD เพียงองค์ประกอบเดียวที่มีหลายคอลัมน์ ใช้รหัสตัวอย่างของคุณถ้าคุณมี<TD colspan="3">แถวด้วยตัวเองมันจะเป็น 90px?
sab669

ขอบคุณมันช่วย table.fixed td { word-wrap: break-word; }สำหรับข้อมูลที่ทับซ้อนกันเพิ่มนี้
Parag Tyagi

คำแนะนำการแบ่งคำไม่จำเป็น แต่มีประโยชน์สำหรับผู้ใช้ SO ส่วนที่เหลือและค่อนข้างเกี่ยวข้องกับคำถามเนื่องจากเนื้อหาที่ล้นในตารางความกว้างคงที่นั้นเกือบจะแน่ใจได้ว่าจะเกิดขึ้นในสถานการณ์ส่วนใหญ่
Amy Pellegrini

101

ตอนนี้ใน HTML5 / CSS3 เรามีทางออกที่ดีกว่าสำหรับปัญหา ในความคิดของฉันแนะนำ CSS โซลูชันนี้อย่างหมดจด:

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>

คุณจำเป็นต้องกำหนดตารางเป็นwidthแม้จะอยู่ในวิธีการแก้ปัญหาของ Haunter มิฉะนั้นมันจะไม่ทำงาน
นอกจากนี้มีคุณสมบัติ CSS3 ใหม่ที่vSyncword-break:break-all;ที่แนะนำคือ: นี่จะเป็นการแบ่งคำที่ไม่มีช่องว่างในนั้นออกเป็นหลายบรรทัดเช่นกัน เพียงแก้ไขรหัสเช่นนี้:

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}

ผลสุดท้าย

แสดงผลตาราง


หากคุณขว้างแถวด้วย a colspanนี่จะเป็นการแก้ปัญหานี้ คำแนะนำใด ๆ เกี่ยวกับวิธีการใช้โซลูชันนี้ด้วยตารางที่มีcolspan> 1 หรือไม่
Eric K

@QuantumDynamix ฉันแก้ไขสิ่งนี้โดยรวมเป็นแถวแรกแถวที่ไม่มี colspans เฉพาะคอลัมน์ทั้งหมดที่มีความกว้าง ฉันซ่อนแถวนั้นด้วยความสูง 0, เส้นขอบ: ไม่มี, ทัศนวิสัย: ซ่อน, ช่องว่าง: 0px เป็นต้น, จากนั้นแถวที่สองเป็นแถวแรกที่ฉันต้องการเห็นที่ซึ่งมี colspans แถวแรกที่มีเซลล์ความกว้างคงที่แต่ละรายการจะกำหนดความกว้าง
AaronLS

@totymedli แนวคิดใดที่จะทำให้ตารางของฉันแสดงผลรวมของความกว้างคอลัมน์ทั้งหมดของฉันได้อย่างไร ตารางของฉันสร้างขึ้นแบบไดนามิกเล็กน้อยและฉันไม่สามารถคำนวณความกว้างของตารางล่วงหน้าได้ แต่ฉันไม่ต้องการใช้ 100% เพราะมันยืดองค์ประกอบบางอย่าง
AaronLS

14
table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}

9
คุณแน่ใจหรือว่าคุณสามารถใช้table-layoutกับองค์ประกอบ td?
นิค

@Nick - มันใช้ได้ดี Hovewer ฉันต้องเพิ่มคุณสมบัติความกว้างขั้นต่ำและความกว้างสูงสุด (เช่นเดียวกับความกว้าง) และจากนั้นมันก็กลายเป็นความกว้างคงที่อย่างแท้จริง
Denis Khay

11

ฉันมีเซลล์ยาวหนึ่งตาราง td นี่บังคับให้โต๊ะไปที่ขอบของเบราว์เซอร์และดูน่าเกลียด ฉันแค่อยากให้คอลัมน์นั้นมีขนาดคงที่เท่านั้นและทำลายคำเมื่อถึงความกว้างที่ระบุ ดังนั้นสิ่งนี้ทำงานได้ดีสำหรับฉัน:

<td><div style='width: 150px;'>Text to break here</div></td>

คุณไม่จำเป็นต้องระบุรูปแบบใด ๆ กับองค์ประกอบของตาราง คุณอาจใช้โอเวอร์โฟลว์: ซ่อนอยู่; ตามคำแนะนำอื่น ๆ แต่ทำให้ข้อความส่วนเกินหายไป


2
หรือคุณสามารถใช้ความกว้างสูงสุดแทนความกว้างได้ตามต้องการ การทำเช่นนี้จะช่วยให้คุณไม่แยกข้อความเว้นเสียแต่ว่าคุณมีความกว้างถึงขีด จำกัด และเซลล์ตารางจะไม่มีที่ว่างหากข้อความของคุณมีขนาดเล็กกว่าความกว้างที่ระบุ <td> <div style = 'ความกว้างสูงสุด: 150px;'> ข้อความที่จะพักที่นี่ </div> </td>
Tarik


0

สำหรับตารางความกว้าง FULLSCREEN:

  • ความกว้างของตารางต้องเป็น 100%

  • ถ้าต้องการ N colunms ดังนั้นต้องเป็น N + 1

ตัวอย่างสำหรับ 3 คอลัมน์:

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
    table.fixed td {
      overflow: hidden;
    }
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.