Ответ 1
Первая проблема заключается в том, что вы устанавливаете свой .svg-wrap
div на 100% высоту. 100% чего? В этом случае этот родительский элемент div является элементом body. Когда у вас есть контент уровня блока, который составляет 100% от высоты тела, и другие элементы в потоке, вы всегда будете иметь вертикальную полосу прокрутки. потому что у вас всегда будет содержимое 100% + ваших элементов .stuff
. Так же, как общий совет, постоянное переполнение, подобное этому, должно быть подсказкой, что что-то неудобно в вашем CSS.
Продолжая дальше в DOM, объявление 100% высоты в элементе svg
заставляет svg
расширяться до слишком высокой обертки. И эта другая часть виновника.
В используемом решении используются внутренние коэффициенты. CSS:
.svg-wrap {
background-color:red;
height:0;
padding-top:63.63%; /* 350px/550px */
position: relative;
}
svg {
background-color: cyan;
height: 100%;
display:block;
width: 100%;
position: absolute;
top:0;
left:0;
}
Протестировано в последнем, FF, Chrome, Safari (хотя и не в IE).
Недостатки этого подхода заключаются в следующем:
a) вы должны предварительно рассчитать коэффициенты для всех своих ящиков или написать script, который делает это. Не так уж плохо.
b) вы не можете использовать border-box
глобально с помощью селектора звездочек, или если вам нужно переопределить размер окна обратно на content-box
для ваших контейнеров svg. Выполнимо.
В качестве побочного примечания это, очевидно, не то, как должны работать вещи. Браузеры должны быть достаточно умны, чтобы посмотреть атрибут SVG viewBox, чтобы получить пропорции, вычислить вычисляемую ширину (после любых пределов максимальной ширины), а затем вычислить высоту.
Но в данный момент это не работает. Там еще одна странная ошибка в Chrome, где добавление max-width:100%
в svg создает ситуацию, когда svg всегда имеет размер до наименьшего отображаемого размера. Попробуйте загрузить эту скрипту в Chrome:
Вы не увидите никакого SVG! Weird. Еще более странно, отменив объявление max-width
в Dev Tools, а затем начните воспроизведение с ширины окна просмотра результата в jsfiddle. Возьмите его немного уже, затем шире, затем уже, затем шире. Обратите внимание, что после того, как svg получает подталкивание меньше, он не изменяет размер снова, когда область просмотра становится больше!
Это важно отметить, потому что:
* {max-width:100%}
- общий (и вполне законный) отзывчивый подход к дизайну, и он в настоящее время разрушает SVG в Blink. На данный момент придерживайтесь собственных коэффициентов.