Как избавиться от лишнего места под svg в элементе div


88

Вот иллюстрация проблемы (проверено в Firefox и Chrome):

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

Посмотреть на JSFiddle

Обратите внимание на дополнительное redпространство divпод синим svg.

Уже пробовал устанавливать paddingи marginоба элемента 0, но безуспешно .


Похоже, это связано с аналогичной проблемой с изображениями, например stackoverflow.com/questions/7774814/… .
Daniel

Ответы:


174

Вам нужно display: block;на вашем svg.

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

Это связано с тем, что элементы встроенного блока (например, <svg>и <img>) располагаются на базовой линии текста. Дополнительное пространство, которое вы видите, - это пространство, оставшееся для размещения нижних элементов символов (хвост на 'y', 'g' и т. Д.).

Вы также можете использовать, vertical-align:topесли вам нужно его оставить inlineилиinline-block


Удивительный. Так все ли встроенные элементы добавляют пустое пространство внизу?
clapas

2
Объяснение заключается в том, что inline-blockэлементы (например, <svg>и <img>) располагаются на базовой линии текста. Дополнительное пространство, которое вы видите, - это пространство, оставшееся для размещения нижних элементов символов (хвост на 'y', 'g' и т. Д.).
Paul LeBeau,

1
Я бы предпочелvertical-align:top
Джон Сяо

Я был уверен, что дополнительное пространство связано с этим line-height, но установка line-height: 0svg и / или его контейнера не имела никакого значения. Только display: blockрешил это. Это такая ошибка, если вам случится работать с большим 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>

0

Измени свой стиль на

style = "цвет фона: красный; высота строки: 0;"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.