ฉันจะตั้งค่าความกว้างสูงสุดของเซลล์ตารางโดยใช้เปอร์เซ็นต์ได้อย่างไร


103
<table>
<tr>
<td>Test</td>
<td>A long string blah blah blah</td>
</tr>
</table>

<style>
td{max-width:67%;}
</style>

ข้างต้นไม่ทำงาน ฉันจะตั้งค่าความกว้างสูงสุดของเซลล์ตารางโดยใช้เปอร์เซ็นต์ได้อย่างไร


กรุณาขยายความ"ไม่ทำงาน"
Sparky

1
คุณต้องตรวจสอบให้แน่ใจว่า PARENT ของ td ของคุณมีความกว้างที่เฉพาะเจาะจง (ไม่ว่าคุณจะส่ง width: 100% ตลอดทางจาก body ไปยัง td ของคุณหรือคุณสามารถให้ parent (ที่นี่: tr) 1000px หรืออะไรก็ได้ที่คุณต้องการ เมื่อใช้ %% ใน css จะใช้ px ที่แน่นอนที่กำหนดไว้ในพาเรนต์เสมอจากนั้นจะแปลง px เป็น %% สำหรับเด็กเนื่องจากมีขนาดเทียบกับพาเรนต์
Philipp Meissner

สำหรับบันทึกตอนนี้ความกว้างสูงสุดใช้งานได้ใน Safari และ Chrome ฉันไม่แน่ใจว่าได้รับการสนับสนุนมานานแค่ไหน
Jay

คำตอบ:


73

ตามคำจำกัดความของความกว้างสูงสุดในข้อมูลจำเพาะ CSS 2.1 "ผลของ" ความกว้างต่ำสุด "และ" ความกว้างสูงสุด "บนตารางตารางแบบอินไลน์เซลล์ตารางคอลัมน์ตารางและกลุ่มคอลัมน์ไม่ได้กำหนดไว้" ดังนั้นคุณจึงไม่สามารถตั้งค่าความกว้างสูงสุดบนองค์ประกอบ td ได้โดยตรง

หากคุณต้องการให้คอลัมน์ที่สองกินพื้นที่มากที่สุด 67% คุณสามารถตั้งค่าความกว้าง (ซึ่งมีผลต่อความกว้างขั้นต่ำสำหรับเซลล์ตาราง) เป็น 33% เช่นในกรณีตัวอย่าง

td:first-child { width: 33% ;}

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


ความกว้างสูงสุดใช้งานได้จริงใน Safari และ Chrome ตอนนี้ ฉันไม่แน่ใจว่าได้รับการสนับสนุนมานานแค่ไหน
Jay

117

คำถามเก่าที่ฉันรู้ แต่ตอนนี้ทำได้โดยใช้คุณสมบัติ css table-layout: fixedบนแท็กตาราง คำตอบด้านล่างจากคำถามนี้ความกว้างเปอร์เซ็นต์ CSS และข้อความล้นในเซลล์ตาราง

ทำได้ง่าย ๆ โดยใช้table-layout: fixedแต่ยุ่งยากเล็กน้อยเพราะไม่ค่อยมีใครรู้เกี่ยวกับคุณสมบัติ CSS นี้

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

ดูการใช้งานจริงได้ที่ซออัพเดตที่นี่: http://jsfiddle.net/Fm5bM/4/


2
ขอบคุณ! ฉันกลัวการแก้ไขหมายความว่ามันจะไม่คำนวณความกว้างของเซลล์ที่ไม่มีชุดความกว้าง แต่โชคดีที่ไม่เป็นเช่นนั้น
fassl

4
ใน jsfiddle ของคุณถ้าฉันลบคุณสมบัติความกว้างความกว้างสูงสุดก็ยังใช้ไม่ได้ดังนั้นไม่แน่ใจว่าวิธีนี้จะแก้ปัญหาได้อย่างไร
frezq

6
@superphonic ฉันคิดว่าคุณกำลังสับสน หากคุณลบmax-widthjsfiddle นั้นออกความกว้างจะยังคงเหมือนเดิมดังนั้นจึงไม่ใช่สิ่งmax-widthที่กำหนด อาจจะชัดเจนกว่าถ้าคุณแทนที่ด้วย a max-width: 10%สำหรับตัวแรกtd... คุณจะเห็นว่ามันไม่เปลี่ยนแปลง jsfiddle.net/w3f8ey22/1
frezq

5
เค้าโครงตาราง: แก้ไขแล้วไม่สามารถแก้ปัญหา OP ได้ มันไม่ทำให้ 'ความกว้างต่ำสุด' ทำงานบนเซลล์ตารางได้อย่างน่าอัศจรรย์ fiddles ที่อ้างอิงทั้งสองไม่มีความแตกต่างในการแสดงผลหาก table-layout: fixed ถูกลบออก
cmerriman

3
คำตอบนี้ทำให้เข้าใจผิดเนื่องจากไม่เกี่ยวข้องกับคำถาม
ZoltánSüle

9

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

ใส่ตารางใน div ของตัวเองจากนั้นตั้งค่าความกว้างความกว้างต่ำสุดและ / หรือความกว้างสูงสุดของ div ตามที่ต้องการสำหรับทั้งตาราง จากนั้นคุณสามารถทำงานและตั้งค่าความกว้างและความกว้างต่ำสุดสำหรับเซลล์อื่น ๆ และความกว้างสูงสุดสำหรับ div ที่ทำงานอย่างมีประสิทธิภาพทั้งรอบและหลังเพื่อให้ได้ความกว้างสูงสุดที่เราต้องการ

<div id="tablediv">
<table width="100%">
 <tr>
  <td class="tdleft">Test</td>
  <td>A long string blah blah blah</td>
 </tr>
</table>
</div>

จากนั้นในสไตล์ของคุณใส่:

#tablediv {
    width:90%;
    min-width:800px
    max-width:1500px;
}
.tdleft {
    width:20%;
    min-width:200px;
}

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


0

เปอร์เซ็นต์ควรสัมพันธ์กับขนาดที่แน่นอนลองทำดังนี้:

<table>
<tr>
<td>Testasdas 3123 1 dasd as da</td>
<td>A long string blah blah blah</td>
</tr>
</table>

<style>
table{width:200px;}
td{width:65%;border:1px solid black;}
</style>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.