Подтвердить что ты не робот

Паразитный запас на элементе svg

У меня очень простой документ (см. также JSFiddle):

<style>
html, body, svg, div {
    margin: 0;
    padding: 0;
    border: 0;
}
</style>
<body>
<svg id="foo"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1"
   style="width: 768px; height: 1004px;">
</svg>
</body>

По какой-то причине элемент svg получает нижнее поле 3px или 4px (то есть элемент body получает высоту 1007px, 1008px или даже 1009px; сам край svg равен 0 при проверке с использованием инструменты отладки браузера.)

Если я заменил svg на div, ложный запас исчезнет. Поведение согласовано между Opera 12, Chrome 33, Firefox 26 и Internet Explorer 11, поэтому я уверен, что поведение по дизайну и стандартам совместимо, я просто не понимаю.

4b9b3361

Ответ 1

Это обычная проблема с элементами inline. Чтобы решить эту проблему, просто добавьте vertical-align:top.

ОБНОВЛЕНО ПРИМЕР ЗДЕСЬ

#foo {
    background: #fff;
    vertical-align:top;
}

Стоит отметить, что значением по умолчанию для свойства vertical-align является baseline. Это объясняет поведение по умолчанию. Значения, такие как top, middle и bottom, будут корректировать выравнивание.

В качестве альтернативы вы можете сделать уровень элемента block. (пример)

Ответ 2

У меня была связанная проблема, когда у меня был div, содержащий SVG:

<div id=contents>
    <svg exported from illustrator>
</div>

и были большие границы над SVG в DIV и ниже, даже с вертикальным выравниванием: сверху в DIV и отображать: блок в SVG.

Я установил "width: 100%" для SVG, чтобы они заполнили страницу.

Решением было установить "height: 100%" для SVG. Они уже отображались на правильной высоте, но добавив, что это избавилось от странных полей.

Я хотел бы знать, как и почему это сработало.

Ответ 3

В моем документе был один элемент svg, размер которого изменился с помощью окна. Я использовал CSS переполнение: скрытый, чтобы предотвратить появление полос прокрутки. IE:

    body {
        overflow: hidden;
    }