Проблема с высотой окна просмотра SVG на ios Safari
При использовании svg я заметил странную вещь на ios. Как представляется, svgs отлично работает во всех других браузерах, но на Safari ipad/iphone в окне просмотра есть странное пространство вверху и внизу svg. Кто-нибудь еще сталкивался с этим, и смогли ли вы это исправить? Используя простой код svg, например:
<svg width="100%" viewBox="0 0 20 10">
<polygon fill=red stroke-width=0 points="0,10 20,10 10,0" />
</svg>
На ipad/iphone, если я поставлю границу на svg там странное пространство выше и ниже svg...??
fiddle goodness выглядит нормально на рабочем столе, но если вы посмотрите на него на ipad и т.д., вы увидите проблемы.
http://jsfiddle.net/InVAMPED/hck5gg1a/
Ответы
Ответ 1
Проблема в том, что вы устанавливаете только ширину, а не высоту окна макета SVG. Затем viewBox устанавливается внутри этого макета, используя стандартную настройку xMidYMid meet
, которая масштабирует его только для того, чтобы соответствовать более ограниченному размеру и центрирует его в другом направлении.
Firefox и последние версии Chrome (и я думаю, что рабочий стол Safari также) масштабирует SVG, чтобы соответствовать пропорциям viewBox, когда вы оставляете одно измерение как auto
. Тем не менее, другие браузеры будут применять высоту/ширину по умолчанию, а затем масштабируют изображение до соответствия:
- IE применяет ширину 150px height/300px, которая по умолчанию используется для внедренных объектов.
- Safari mobile должен применять старый webkit по умолчанию 100vh (высота окна браузера).
Это не "ошибка" в браузерах, а просто функция, которая никогда не была четко определена в спецификациях.
Найдите информацию о "прокладке нижнего соотношения сторон", чтобы заставить браузер соблюдать соотношение сторон, но при этом позволяя шире реагировать.
Ответ 2
AmeliaBR полностью прав, большое спасибо за то, что он вел меня в правильном направлении!
Вот что показал мне google: взломать нижний слой
Поскольку процентное значение для padding-bottom
получает его высоту от ширины элемента, а не самую высоту, мы можем использовать это для создания чувствительных элементов без указанной высоты.
В контейнере SVG:
.container {
padding-bottom: 70%; /*this is your height/width ratio*/
height: 0;
}
На самом элементе SVG:
.container svg {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
Ответ 3
Для меня установка ширины и высоты на 100% для всех svgs сделала трюк:
svg {
width: 100%;
height: 100%;
}
Чувствует себя намного чище, чем прокладка.
Ответ 4
Это сработало для меня:
.mapContainer svg{
max-height: 60vw; /* This will depend on the aspect ratio */
}
Вам необходимо установить max-height
(в единицах vw
), чтобы svg находился в пределах границ. Тогда это хорошо масштабируется везде. Обратите внимание, что max-height
будет отличаться для разных SVG, в зависимости от соотношения сторон.