Есть несколько механизмов калибровки в работе;один для элемента <svg>
, один для элемента <image>
.
Тот, который вы установили для элемента <svg>
, не очень полезен.Атрибут viewBox
соответствует системе координат 100 на 100 пользовательских единиц внутри контейнера.Эта система координат является тогда областью просмотра для определения размера <image>
с неявным preserveAspectRatio="xMidYMid meet"
.Если вы считаете, что это сбивает с толку: да, это проблема.
Вместо этого просто измените размер элемента <svg>
, чтобы заполнить контейнер.Удалите viewBox
, установите width
и height
на 100%.Без viewBox
, preserveAspectRatio
также не будет влиять на элемент <svg>
.
Теперь только механизм изменения размера изображения (поместите изображение в ширину и высоту окна просмотра 100%,как описано в preserveAspectRatio
), вступает в силу и работает так, как вы хотите.
Общее примечание : JPG, используемый в вашем <image>
, имеет собственное соотношение сторон.Поэтому preserveAspectRatio
всегда будет иметь эффект.Элемент <svg>
не имеет.Только у viewBox
есть такой.и это то, над чем работает атрибут.
body {
margin: 0;
padding: 0;
display: flex;
width: 100%;
height: 100vh;
justify-content: center;
align-items: center;
}
#section-1, .background-clipped {
width: 100%;
height: 100%;
}
<section id="section-1">
<div class="background-clipped background-clipped-1">
<svg id="home-image-1" width="100%" height="100%">
<image xlink:href="https://i.postimg.cc/9XdQKYF1/dimon-blr-309444-unsplash.jpg"
x="0" y="0" width="100%" height="100%" preserveAspectRatio="xMidYMid slice"/>
</svg>
</div>
</section>