วิธีการตั้งค่าความกว้างคงที่สำหรับ <td>


513

รูปแบบง่าย ๆ :

  <tr class="something">
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
  </tr>

<td>ฉันจำเป็นต้องตั้งค่าความกว้างคงที่สำหรับ ฉันได้พยายาม:

tr.something {
  td {
    width: 90px;
  }
}

ด้วย

td.something {
  width: 90px;
}

สำหรับ

<td class="something">B</td>

และแม้กระทั่ง

<td style="width: 90px;">B</td>

แต่ความกว้างของ<td>ยังคงเหมือนเดิม


1
ฉันลองและใช้งานได้ - บางทีปัญหาอาจแตกต่างกัน Firebug บอกอะไรคุณเกี่ยวกับองค์ประกอบนี้บ้าง
Rockbot

ในเว็บไซต์นี้มีคนบอกเกี่ยวกับหัวข้อนี้ด้วยวิดีโอ มันชัดเจนมาก
egemen

ใช้style="width: 1% !important;"เพื่อทำให้ความกว้างแน่นเท่ากับคำที่ยาวที่สุดในคอลัมน์มันมีประโยชน์สำหรับคอลัมน์ ID / # แรก ทดสอบใน Chrome (เดสก์ท็อปและมือถือ), Opera (เดสก์ท็อป), IE (เดสก์ท็อป), Edge (เดสก์ท็อป), firefox (เดสก์ท็อป)
vinsa

คำตอบ:


1084

สำหรับ Bootstrap 4.0:

ใน Bootstrap 4.0.0 คุณไม่สามารถใช้col-*คลาสที่เชื่อถือได้ (ใช้ได้กับ Firefox แต่ไม่สามารถใช้กับ Chrome ได้) คุณต้องใช้คำตอบของ OhadR :

<tr>
  <th style="width: 16.66%">Col 1</th>
  <th style="width: 25%">Col 2</th>
  <th style="width: 50%">Col 4</th>
  <th style="width:  8.33%">Col 5</th>
</tr>

สำหรับ Bootstrap 3.0:

ด้วย twitter bootstrap 3 ให้ใช้: class="col-md-*"โดยที่ * คือจำนวนคอลัมน์ของความกว้าง

<tr class="something">
    <td class="col-md-2">A</td>
    <td class="col-md-3">B</td>
    <td class="col-md-6">C</td>
    <td class="col-md-1">D</td>
</tr>

สำหรับ Bootstrap 2.0:

เมื่อใช้ twitter bootstrap 2: class="span*"โดยที่ * คือจำนวนคอลัมน์ความกว้าง

<tr class="something">
    <td class="span2">A</td>
    <td class="span3">B</td>
    <td class="span6">C</td>
    <td class="span1">D</td>
</tr>

** หากคุณมี<th>องค์ประกอบกำหนดความกว้างที่นั่นและไม่ได้อยู่ใน<td>องค์ประกอบ


79
จะเกิดอะไรขึ้นถ้าคุณมีคอลัมน์มากกว่า 12 คอลัมน์
ClearCloud8

33
คุณสามารถใช้สิ่งนี้ได้เฉพาะใน <head> ในแต่ละแท็ก <th> และทุกแถวจะตรงกัน
Diego Fernando Murillo Valenci

7
มีเอกสารเกี่ยวกับเรื่องนี้ในเว็บไซต์ Bootstrap หรือไม่
Luis Perez

26
วิธีนี้ใช้งานได้ แต่ไม่ได้อยู่ในไซต์ bootstrap เนื่องจากคลาส col- * เหล่านั้นไม่ได้มีไว้สำหรับใช้ในวิธีนี้ มีไว้เพื่อใช้ในกริดบูตสแตรปแบบตอบสนอง หากคุณชอบสิ่งเหล่านี้ลองพิจารณาที่ CSS สำหรับพวกเขาและคัดลอกมันเพื่อสร้าง CSS ของคุณเอง
DustinA

1
นอกจากนี้แทนที่จะตั้งค่าคลาสเพื่อเข้าถึงแถวเราสามารถตั้งค่าเพียงครั้งเดียวสำหรับส่วนหัว <th> และส่วนที่เหลือจะได้รับการดูแลโดยอัตโนมัติ!
dopplesoldner

133

ฉันมีปัญหาเดียวกันฉันทำตารางคงที่แล้วระบุความกว้าง td ของฉัน หากคุณมีที่คุณสามารถทำเช่นนั้น

table {
    table-layout: fixed;
    word-wrap: break-word;
}

แม่แบบ:

<td style="width:10%">content</td>

โปรดใช้ CSS เพื่อจัดโครงสร้างเค้าโครงใด ๆ



นี่เป็นสิ่งที่ดี แต่เป็นการเพิ่มเติมให้ใช้classในtdแท็กแทนที่จะใช้สไตล์โดยตรง
Ramses

1
ใช้งานได้ดีขอบคุณ มากพอที่จะเพิ่มความกว้างของth<th style="width: 25%;"></th>
ไลค์

ขอบคุณ! ฉันได้ตั้งคลาส col-md-x สำหรับ Bootstrap 3 แล้วแต่ไม่ได้ผล การตั้งค่าเค้าโครงตารางเป็น "แก้ไข" จะช่วยแก้ไขปัญหาของฉัน
maurisrx

วิธีนี้ใช้ได้ผล table-layout: fixedที่สำคัญคือ จำเป็นต้องใช้เพราะเทมเพลตจำนวนมากที่สร้างด้วย BS4 จะปรับใช้กับทุกอย่างรวมถึงตาราง
Ivan

73

แทนที่จะใช้col-md-*คลาสกับแต่ละรายการtdในแถวคุณสามารถสร้างcolgroupและใช้คลาสกับcolแท็ก

    <table class="table table-striped">
        <colgroup>
            <col class="col-md-4">
            <col class="col-md-7">
        </colgroup>
        <tbody>
        <tr>
            <td>Title</td>
            <td>Long Value</td>
        </tr>
        </tbody>
    </table>

ตัวอย่างที่นี่


1
ฉันชอบสิ่งนี้ แต่ดูเหมือนว่าจะไม่ส่งผลกระทบต่อกรณีของฉันความกว้างคอลัมน์ไม่ขยายโดย col-
md-

ฉันชอบวิธีนี้ทำไมถึงถูกบังคับให้ใช้คลาส col-md- * และไม่ใช่ col-lg- *, col-sm- * หรือ col-xs- *
LucioB

1
@LucioB คุณสามารถใช้สิ่งใดก็ได้ที่คุณต้องการและใช้หลายคอลัมน์ด้วยกัน (ตัวอย่าง<col class="col-md-4 col-sm-6">จะมีความกว้าง 33% ในขนาดหน้าจอขนาดกลางและ 50% ในขนาดหน้าจอขนาดเล็ก)
VDarricau

1
Colgroup ไม่ทำงานใน Chrome (Bootstrap v4.1) สำหรับความสม่ำเสมอในเบราว์เซอร์ใช้ความกว้าง% สำหรับองค์ประกอบ <td>
AnkitK

57

หวังว่าคนนี้จะช่วยใครซักคน:

<table class="table">
  <thead>
    <tr>
      <th style="width: 30%">Col 1</th>
      <th style="width: 20%">Col 2</th>
      <th style="width: 10%">Col 3</th>
      <th style="width: 30%">Col 4</th>
      <th style="width: 10%">Col 5</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Val 1</td>
      <td>Val 2</td>
      <td>Val 3</td>
      <td>Val 4</td>
      <td>Val 5</td>
    </tr>
  </tbody>
</table>

https://github.com/twbs/bootstrap/issues/863


1
คำตอบที่ง่ายที่สุดในการใช้
GavinBelson

54

หากคุณใช้<table class="table">บนโต๊ะคลาสตารางของ Bootstrap จะเพิ่มความกว้าง 100% ลงในตาราง คุณต้องเปลี่ยนความกว้างเป็นอัตโนมัติ

นอกจากนี้หากแถวแรกของตารางของคุณเป็นแถวส่วนหัวคุณอาจต้องเพิ่มความกว้างให้กับ th แทนที่จะเป็น td


1
นอกจากนี้ใน Bootstrap 3 คุณจะต้องตั้งค่าคุณสมบัติ white-space ของ a ให้เป็นthปกติเนื่องจากตอนนี้ไม่มี nowrap เนื่องจากส่วนหัวดังกล่าวจะไม่แตก
Sammaye

41

ในกรณีของฉันฉันก็สามารถที่จะแก้ไขปัญหาโดยใช้min-width: 100pxแทนwidth: 100pxสำหรับเซลล์หรือthtd

.table td, .table th {
    min-width: 100px;
}

13
สิ่งนี้อาจรักษาสิ่งที่เหลือไว้จากสติของฉัน
Joel

ใช่ ชุดนี้ดีความกว้างขั้นต่ำสำหรับคอลัมน์ในตารางตอบสนอง ขอบคุณ
O. Jones

1
มันทำงานได้ดีกว่าคำถามที่ตอบแล้วขอบคุณ!
อิสราเอล

38

สำหรับ Bootstrap 4 คุณสามารถใช้ตัวช่วยคลาสได้:

<table class="table">
  <thead>
    <tr>
      <td class="w-25">Col 1</td>
      <td class="w-25">Col 2</td>
      <td class="w-25">Col 3</td>
      <td class="w-25">Col 4</td>
    </tr>
  </thead>
  <tbody>
    <tr>
      ...

5
พอดีสำหรับกรณีการใช้งานของฉันนี้ ขอบคุณ!
tonny

16
สิ่งสำคัญที่ควรทราบว่าตัวเลือก w- * คือ: .w-25, .w-50, .w-75, .w-100, .w-autoดังนั้นหากคุณต้องการสิ่งอื่นพูดw-10คุณจะต้องเพิ่มลง.w-10 { width: 10% !important; }ในไฟล์ css ที่แปลแล้ว
Abela

10

ลองนี้ -

<style>
 table { table-layout: fixed; }
 table th, table td { overflow: hidden; }
</style>

3
นี่เป็นคำเดียวที่ทำงานได้จากคำตอบอื่น ๆ ทั้งหมด
0bserver07

ฉันยังเพิ่มtext-overflow: ellipsisเพื่อให้แน่ใจว่าข้อความที่ถูกตัดออกชัดเจน
weeksdev

@ Observer07 แน่นอน
TheRandomGuy

9

Bootstrap 4.0

ใน Bootstrap 4.0 เราต้องประกาศแถวของตารางเป็น flex-box โดยเพิ่ม class d-flex และปล่อย xs, md, ต่อท้ายเพื่อให้ Bootstrap ทำการสืบทอดมาจาก viewport โดยอัตโนมัติ

ดังนั้นจะมีลักษณะดังต่อไปนี้:

<table class="table">
    <thead>
        <tr class="d-flex">
            <th class="col-2"> Student No. </th>
            <th class="col-7"> Description </th>
            <th class="col-3"> Amount </th>
        </tr>
    </thead>

    <tbody>
        <tr class="d-flex">
            <td class="col-2">test</td>
            <td class="col-7">Name here</td>
            <td class="col-3">Amount Here </td>
        </tr>
</table>

หวังว่านี่จะเป็นประโยชน์กับคนอื่นที่นั่น!

ไชโย!


7

โซลูชันที่รวมกันนี้เหมาะกับฉันฉันต้องการคอลัมน์ความกว้างเท่ากัน

<style type="text/css">

    table {
        table-layout: fixed;
        word-wrap: break-word;
    }

        table th, table td {
            overflow: hidden;
        }

</style>

ผลลัพธ์ :-

ป้อนคำอธิบายรูปภาพที่นี่


3

ตกลงฉันเพิ่งทราบว่าปัญหาเกิดขึ้นที่ใด - ใน Bootstrap ถูกตั้งค่าเป็นค่าเริ่มต้นwidthสำหรับselectองค์ประกอบดังนั้นการแก้ปัญหาคือ:

tr. something {
  td {
    select {
      width: 90px;
    }
  }
}

มีอะไรอีกที่ไม่ได้ผลกับฉัน


2

ยากที่จะตัดสินโดยไม่มีบริบทของหน้า html หรือ CSS ที่เหลือของคุณ อาจมีเหตุผลเป็นล้าน ๆ เหตุผลที่กฎ CSS ของคุณไม่ส่งผลกระทบต่อองค์ประกอบ td

คุณได้ลองใช้ตัวเลือก CSS ที่เฉพาะเจาะจงมากขึ้นเช่น

tr.somethingontrlevel td.something {
  width: 90px;
}

เพื่อหลีกเลี่ยง CSS ของคุณที่ถูกแทนที่โดยกฎที่เฉพาะเจาะจงมากขึ้นจาก bootstrap css

(โดยวิธีการในตัวอย่าง css แบบอินไลน์ของคุณด้วยแอตทริบิวต์ style คุณสะกดผิดความกว้าง - ซึ่งสามารถอธิบายได้ว่าทำไมความพยายามนั้นล้มเหลว!)


2

ฉันได้รับการดิ้นรนกับปัญหาในขณะที่ดังนั้นในกรณีที่มีคนทำผิดพลาดโง่เช่นเดียวกับฉัน ... ภายใน<td>ฉันมีองค์ประกอบที่มีwhite-space:preสไตล์ที่ใช้ นั่นทำให้เคล็ดลับตาราง / tr / td ของฉันถูกยกเลิก tdเมื่อฉันออกสไตล์ที่จู่ข้อความทั้งหมดของฉันถูกจัดรูปแบบเป็นอย่างดีภายใน

ดังนั้นตรวจสอบภาชนะหลักเสมอ (เช่นtableหรือtd) แต่ตรวจสอบเสมอว่าคุณไม่ได้ยกเลิกรหัส beautifull ที่ใดที่หนึ่งที่ลึกกว่า :)


1

ใช้ d-flex แทนแถวสำหรับ "tr" ใน Bootstrap 4

สิ่งนี้คือคลาส "row" จะมีความกว้างมากกว่าคอนเทนเนอร์หลักซึ่งแนะนำปัญหา

<table class="table">
  <tbody>
    <tr class="d-flex">
      <td class="col-sm-8">Hello</td>
      <td class="col-sm-4">World</td>
    </tr>
    <tr class="d-flex">
      <td class="col-sm-8">8 columns</td>
      <td class="col-sm-4">4 columns</td>
    </tr>
  </tbody>
</table>


ฉันหมายถึง "แถว" แทนที่จะเป็น "tr" เนื่องจากคลาสแถวมาพร้อมกับรางน้ำทั้งสองด้าน หรือถ้าคุณไม่ต้องการใช้คลาส "row" เพียงเพิ่มคลาส "no-gutters"
Usman Anwar

1

ใน bootstarp 4 คุณสามารถใช้rowและcol-*ในตารางฉันใช้มันดังต่อไปนี้

<table class="table">
    <thead>
        <tr class="row">
            <th class="col-sm-3">3 row</th>
            <th class="col-sm-4">4 row</th>
            <th class="col-sm-5">5 row</th>
        </tr>
    </thead>
    <tbody>
        <tr class="row">
            <td class="col-sm-3">some text</td>
            <td class="col-sm-4">some text</td>
            <td class="col-sm-5">some text</td>
        </tr>
    </tbody>
</table>

1

นี่คือวิธีที่ฉันมักจะทำเมื่อฉันไม่ต้องจัดการกับ IE

    <tr>
      <th scope="col" style="width: calc(1 * 100% / 12)">#</th>
      <th scope="col" style="width: calc(4 * 100% / 12)">Website</th>
      <th scope="col" style="width: calc(3 * 100% / 12)">Username</th>
      <th scope="col" style="width: calc(3 * 100% / 12)">Password</th>
      <th scope="col" style="width: calc(1 * 100% / 12)">Action</th>
    </tr>

ด้วยวิธีนี้คุณสามารถมีตาราง 12-col ที่คุ้นเคย


0

ไม่มีงานนี้สำหรับฉันและมี cols จำนวนมากใน DataTable เพื่อให้% หรือ sm class เท่ากับ 12 องค์ประกอบเค้าโครงใน bootstrap

ฉันทำงานกับ DataTables Angular 5 และ Bootstrap 4 และมีคอลัมน์จำนวนมากในตาราง ทางออกสำหรับฉันคือการTHเพิ่มDIVองค์ประกอบที่มีความกว้างเฉพาะ ตัวอย่างเช่นสำหรับ cols "ชื่อบุคคล" และ "วันที่จัดกิจกรรม" ฉันต้องการความกว้างเฉพาะจากนั้นใส่divในส่วนหัวคอลัมน์ความกว้าง col ทั้งหมดจากนั้นปรับขนาดตามความกว้างที่ระบุจาก div บนTH:

<table datatable [dtOptions]="dtOptions" *ngIf="listData" class="table table-hover table-sm table-bordered text-center display" width="100%">
    <thead class="thead-dark">
        <tr>
            <th scope="col">ID </th>
            <th scope="col">Value</th>
            <th scope="col"><div style="width: 600px;">Person Name</div></th>
            <th scope="col"><div style="width: 800px;">Event date</div></th> ...

-1

ใช้. บางสิ่งโดยไม่มีtdหรือth

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title> 
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">  
  <style>
    .something {
      width: 90px;
      background: red;
    }
  </style>
</head>
<body>

<div class="container">
  <h2>Fixed width column</h2>            
  <table class="table table-bordered">
    <thead>
      <tr>
        <th class="something">Firstname</th>
        <th>Lastname</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>John</td>
        <td>Doe</td>
        <td>john@example.com</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>mary@example.com</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>july@example.com</td>
      </tr>
    </tbody>
  </table>
</div>

</body>
</html>


-2

<div class="row" id="divcashgap" style="display:none">
                <div class="col-md-12">
                    <div class="table-responsive">
                        <table class="table table-default" id="gvcashgapp">
                            <thead>
                                <tr>
                                    <th class="1">BranchCode</th>
                                    <th class="2"><a>TC</a></th>
                                    <th class="3">VourNo</th>
                                    <th class="4"  style="min-width:120px;">VourDate</th>
                                    <th class="5" style="min-width:120px;">RCPT Date</th>
                                    <th class="6">RCPT No</th>
                                    <th class="7"><a>PIS No</a></th>
                                    <th class="8" style="min-width:160px;">RCPT Ammount</th>
                                    <th class="9">Agging</th>
                                    <th class="10" style="min-width:160px;">DesPosition Days</th>
                                    <th class="11" style="min-width:150px;">Bank Credit Date</th>
                                    <th class="12">Comments</th>
                                    <th class="13" style="min-width:150px;">BAC Comment</th>
                                    <th class="14">BAC Ramark</th>
                                    <th class="15" style="min-width:150px;">RAC Comment</th>
                                    <th class="16">RAC Ramark</th>
                                    <th class="17" style="min-width:120px;">Update Status</th>
                                </tr>
                            </thead>
                            <tbody id="tbdCashGapp"></tbody>
                        </table>
                    </div>
                </div>
            </div>


เพิ่มคำอธิบายบางอย่างด้วย
Akash Dubey

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