ใช้ CSS td width absolute ตำแหน่ง


103

โปรดดูJSFIDDLEนี้

td.rhead { width: 300px; }

เหตุใดความกว้าง CSS จึงไม่ทำงาน

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

นอกจากนี้ผลกระทบของตำแหน่ง: fixed, absolute etc มีความกว้าง td อย่างไรถ้ามี? ฉันกำลังมองหาเหตุผลที่มากกว่าการแก้ไข ฉันหวังว่าจะเข้าใจวิธีการทำงาน

ความกว้าง td ไม่ใช่ 300px ตามที่ต้องการ


display: table-cellไม่เคารพwidth(ในลักษณะเดียวกับที่จะใช้ไม่ได้display: inline) ฉันไม่เข้าใจว่าคุณกำลังถามอะไรposition fixed|absolute
Explosion Pills

@ExplosionPills เพราะในรหัสจริงของฉันฉันได้กำหนดตารางให้คงที่ อย่างที่คุณเดาได้ฉันกำลังพยายามบรรลุไทม์ไลน์ที่ด้านบนของหน้า ดังนั้นฉันแค่ระบุในกรณีที่แอตทริบิวต์ตำแหน่งมีผลต่อความกว้าง
Jake

คำตอบ:


144

นี่อาจไม่ใช่สิ่งที่คุณต้องการฟัง แต่display: table-cellไม่เคารพความกว้างและจะยุบตามความกว้างของตารางทั้งหมด คุณสามารถแก้ไขสิ่งนี้ได้อย่างง่ายดายเพียงแค่มีdisplay: blockองค์ประกอบภายในเซลล์ตารางเองซึ่งมีความกว้างที่คุณระบุเช่น

<td><div style="width: 300px;">wide</div></td>

สิ่งนี้ไม่ควรสร้างความแตกต่างมากนักหาก<table>ตัวมันเองเป็นposition: fixedหรือค่าสัมบูรณ์เนื่องจากตำแหน่งของเซลล์ทั้งหมดคงที่เมื่อเทียบกับตาราง

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

แก้ไข: ฉันไม่สามารถรับเครดิตได้ แต่เนื่องจากความคิดเห็นบอกว่าคุณสามารถใช้min-widthแทนwidthเซลล์ตารางแทนได้


31
+1 - ฉันเคยใช้วิธีแก้ปัญหานี้มาก่อน ผิดปกติพอmin-widthบนTDดูเหมือนจะทำงานใน Chrome และ FF: jsfiddle.net/Mkq8L/7
ทิม Medora

2
ที่จริงเช่นเคยหลังจากโพสต์คำถามฉันพบว่ามันได้min-width: 300pxผล! (@TimMedora คุณเร็วขึ้นไม่กี่วินาที!)
Jake

ฉันคิดว่าคำตอบที่ดีที่สุดคือการกล่าวถึงการแสดงผล: พฤติกรรมของเซลล์ตาราง ขอบคุณ!
Jake

พฤติกรรมนี้สมเหตุสมผลสำหรับฉัน: จะเกิดอะไรขึ้นถ้าคุณตั้งค่าความกว้างที่แตกต่างกันสองแบบสำหรับสองเซลล์ในคอลัมน์เดียวกัน ด้วยmin-widthไม่มีปัญหาแม้ว่าจะใช้เวลาที่ใหญ่ที่สุด
Ciro Santilli 郝海东冠状病六四事件法轮功

3
นี่คือการแฮ็กฉันไม่แนะนำ ความกว้าง td รวมกันเกินความกว้างของตาราง ปัญหานี้เป็นปัญหา. คุณไม่ควรแก้ไขปัญหานี้ด้วยการเพิ่มโครงสร้าง HTML เพิ่มเติม
เดวิด

28

คุณควรใช้ table-layout: fixed

อัตโนมัติเป็นค่าเริ่มต้นและด้วยตารางขนาดใหญ่อาจทำให้เกิดความล่าช้าด้านไคลเอ็นต์เล็กน้อยเนื่องจากเบราว์เซอร์วนซ้ำเพื่อตรวจสอบขนาดทั้งหมดที่พอดี

คงที่ดีกว่ามากและแสดงผลได้เร็วขึ้นในหน้า โครงสร้างของตารางขึ้นอยู่กับความกว้างโดยรวมของตารางและความกว้างของแต่ละคอลัมน์

ที่นี่ใช้กับตัวอย่างดั้งเดิม: JSFIDDLEคุณจะทราบว่าคอลัมน์ที่เหลือถูกทับและทับซ้อนกันของเนื้อหา เราสามารถแก้ไขได้ด้วย CSS เพิ่มเติม (สิ่งที่ฉันต้องทำคือเพิ่มคลาสให้กับ TR ตัวแรก):

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

เห็นในการดำเนินการที่นี่: JSFIDDLE


11

สาเหตุที่ไม่สามารถใช้งานได้ในลิงก์ที่คุณให้มาเนื่องจากคุณพยายามแสดงคอลัมน์ 300px บวก 52 คอลัมน์ในแต่ละช่วง 7 คอลัมน์ ลดจำนวนคอลัมน์และใช้งานได้ คุณไม่สามารถพอดีกับจำนวนมากบนหน้าจอ

หากคุณต้องการบังคับให้คอลัมน์พอดีลองตั้งค่า:

body {min-width:4150px;}

ดู jsfiddle ของฉัน: http://jsfiddle.net/Mkq8L/6/ @mike ฉันยังไม่สามารถแสดงความคิดเห็นได้


2
+1 สำหรับการค้นพบว่าเกณฑ์ความกว้างของตารางจะเพิ่มขึ้นตามความกว้างของร่างกาย
Jake

8

เหตุผลก็คือเพราะคุณไม่ได้ระบุความกว้างของตารางและ td ทั้งหมดของคุณก็ล้น

ตัวอย่างเช่นฉันกำหนดความกว้างของตารางไว้ที่ 5,000px ซึ่งฉันคิดว่าจะตรงกับความต้องการของคุณ

table{
    width:5000px;
}

เป็นรหัสเดียวกับที่คุณระบุซึ่งฉันเพิ่มเข้าไปในความกว้างของตารางเท่านั้น

ฉันเชื่อว่าสิ่งที่เกิดขึ้นเป็นเพราะ TD ของคุณผ่านความกว้างของตารางเริ่มต้น ซึ่งคุณจะเห็นได้ว่าถ้าคุณดึง td ออกมาประมาณ 45 ตัวในแต่ละ tr (เช่นรหัสที่คุณระบุในคำถามไม่ใช่ jsfiddle) มันก็ใช้ได้ดี


2
+1 สำหรับการระบุว่ามีเกณฑ์ความกว้างของตาราง ปัญหาคือบางครั้งเราไม่รู้ความกว้างโดยรวมก่อนถึงมือ ความกว้างของตารางเริ่มต้นคืออะไร?
Jake

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

ฉันเชื่อว่าฉันแก้ปัญหานี้ได้แล้วstackoverflow.com/questions/14767459/…
He Hui

นี่คือคำตอบที่แท้จริงแทนที่จะเป็นคำตอบที่ได้รับคะแนนสูง สามารถกำหนดความกว้างได้ก็ต่อเมื่อเนื้อหาไม่เกินความกว้างของตารางทั้งหมด
เดวิด

5

ลองใช้งานได้

<table>
<thead>
<tr>
<td width="300">need 300px</td>

1
ว้าว! ขอบคุณ♥
ivahidmontazer

โปรดเพิ่มคำอธิบายเกี่ยวกับสาเหตุ / วิธีที่รหัสนี้ช่วย OP สิ่งนี้จะช่วยให้คำตอบที่ผู้ชมในอนาคตสามารถเรียนรู้ได้ ดูคำถาม Meta นี้และคำตอบสำหรับข้อมูลเพิ่มเติม
ลิงนอกรีต

1
โปรดทราบว่าแอตทริบิวต์ width ของเลิกใช้แล้วใน HTML5
simhumileco

5

ลองนำไปใช้

table {
  table-layout: auto;
}

หากคุณใช้ Bootstrap คลาสtableจะมีtable-layout: fixed;ค่าเริ่มต้น


4

ใช้คุณสมบัติเค้าโครงตารางและค่า "คงที่" บนโต๊ะของคุณ

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

หลังจากตั้งค่าความกว้างทั้งหมดของตารางตอนนี้คุณสามารถตั้งค่าความกว้างเป็น% ของ td

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

คุณสามารถเรียนรู้เพิ่มเติมได้ที่ลิงค์นี้: http://www.w3schools.com/cssref/pr_tab_table-layout.asp


3

วิธีแก้ปัญหาบ้าๆของฉัน)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

ถ้าตัวอย่างเช่นความกว้างของตารางคือ 100% ให้ลองใช้ความกว้างเปอร์เซ็นต์ใน td เช่น 20%


2

ตัดเนื้อหาจากเซลล์แรกใน div เช่น:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

นี่คือjsfiddle


1

คุณยังสามารถใช้:

.rhead {
    width:300px;
}

แต่จะใช้ได้กับบางเบราว์เซอร์เท่านั้นถ้าจำไม่ผิด IE8 ไม่อนุญาตให้ทำเช่นนี้ โดยรวมแล้วการใส่width=""แอตทริบิวต์ใน<td>ตัวมันเองจะปลอดภัยกว่า

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