วิธีกำจัดช่องว่างด้านล่าง svg ในองค์ประกอบ div


93

นี่คือภาพประกอบของปัญหา (ทดสอบใน Firefox และ Chrome):

<div style="background-color: red;"><svg height="100px" width="100" style="background-color: blue;"></svg></div>

ดูบน JSFiddle

ขอให้สังเกตเพิ่มredพื้นที่ภายในด้านล่างสีฟ้าdivsvg

ลองตั้งค่าpaddingและmarginองค์ประกอบทั้งสองเป็น0แล้ว แต่ไม่มีโชค


ดูเหมือนว่าจะเกี่ยวข้องกับปัญหาที่คล้ายกันกับภาพเช่นstackoverflow.com/questions/7774814/...
Daniel

คำตอบ:


182

คุณต้องบนdisplay: block;svg

<svg style="display: block;"></svg>

เนื่องจากองค์ประกอบอินไลน์บล็อก (เช่น<svg>และ<img>) อยู่บนเส้นฐานของข้อความ พื้นที่พิเศษที่คุณเห็นคือพื้นที่ที่เหลือเพื่อรองรับตัวละครที่สืบทอดมา (หางบน 'y', 'g' ฯลฯ )

คุณยังสามารถใช้vertical-align:topหากต้องการเก็บไว้inlineหรือinline-block


น่าอัศจรรย์. องค์ประกอบแบบอินไลน์ทั้งหมดจะเพิ่มพื้นที่สีขาวที่ด้านล่างหรือไม่?
ตบมือ

2
คำอธิบายคือinline-blockองค์ประกอบ (เช่น<svg>และ<img>) อยู่บนเส้นฐานของข้อความ พื้นที่พิเศษที่คุณเห็นคือพื้นที่ที่เหลือเพื่อรองรับตัวละครที่สืบทอดมา (หางบน 'y', 'g' ฯลฯ )
Paul LeBeau

1
ฉันอยากจะvertical-align:top
John Xiao

ฉันเชื่อว่าพื้นที่พิเศษเป็นสิ่งที่เกี่ยวข้องline-heightแต่การตั้งค่าline-height: 0บน svg และ / หรือคอนเทนเนอร์นั้นไม่แตกต่างกัน display: blockแก้ไขได้เท่านั้น นี่เป็น gotcha ถ้าคุณใช้ SVG ขนาดใหญ่เพราะคุณจะไม่คิดว่ามันเป็นแบบอินไลน์ หากคุณมีไอคอนเล็ก ๆ น้อย ๆ มันก็สมเหตุสมผลดี
devuxer

display: blockไม่ได้ผลสำหรับฉัน แต่vertical-alignทำ
Jay

12

svgเป็นinlineองค์ประกอบ inlineองค์ประกอบออกจากพื้นที่สีขาว

วิธีการแก้:

เพิ่มdisplay:blockไปsvgหรือทำให้ความสูงของผู้ปกครอง div svgเดียวกับ

สาธิตที่นี่




1

ลองเพิ่มheight:100pxการdivและการใช้height="100%"บนsvg:

<div style="background-color:red;height:100px">
    <svg height="100%" width="100" style="background-color:blue;"></svg>
</div>

4
ขอบคุณสำหรับความคิดเห็นของคุณ วิธีนี้ใช้ได้ผลดี แต่จะยุ่งยากเมื่อไม่ทราบความสูงsvgล่วงหน้า
Daniel

1

เพียงแค่เพิ่มความสูงให้กับองค์ประกอบ div หลัก

<div style="background-color: red;height:100px"><svg height="100px" width="100" style="background-color: blue;"></svg></div>

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