Использование SVG в качестве фонового изображения
Я не могу заставить это работать так, как хотелось бы. Моя страница меняет высоту в зависимости от того, какой контент загружен, и если требуется прокрутка, svg, похоже, не растягивается...
html {
height: 100%;
background-image: url(http://www.horizonchampion.eu/themes/projectbase/images/bg.svg);
background-size: 100% 100%;
-o-background-size: 100% 100%;
-webkit-background-size: 100% 100%;
background-size: cover;
}
<svg width="1024" height="800" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient fy="0.04688" fx="0.48047" r="1.11837" cy="0.04688" cx="0.48047" id="svg_2">
<stop stop-color="#ffffff" offset="0"/>
<stop stop-opacity="0" stop-color="#eaeaea" offset="1"/>
</radialGradient>
<radialGradient fy="0.04688" fx="0.48047" r="1.71429" cy="0.04688" cx="0.48047" id="svg_5">
<stop stop-color="#ffffff" offset="0"/>
<stop stop-opacity="0" stop-color="#eaeaea" offset="1"/>
</radialGradient>
</defs>
<g display="inline">
<title>Layer 1</title>
<rect fill="#eaeaea" stroke-width="0" x="0" y="0" width="1024" height="800" id="svg_1"/>
</g>
<g>
<title>Layer 2</title>
<rect id="svg_3" height="282" width="527" y="1" x="1" stroke-width="0" fill="url(#svg_2)"/>
<rect id="svg_4" height="698" width="1021.99999" y="1" x="1" stroke-width="0" fill="url(#svg_5)"/>
</g>
</svg>
Возможно ли сделать это только с помощью CSS3? Я бы не хотел загружать другую библиотеку JS или звонить... Есть идеи? Спасибо!
6 ответов
С моим решением вы можете получить нечто подобное:
Вот решение bulletproff:
Ваш html:
<input class='calendarIcon'/>
Ваш SVG: я использовал fa-calendar-alt
(любая IDE может открыть изображение svg, как показано ниже)
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z"/></svg>
Чтобы использовать его в фоновом изображении css, вам нужно закодировать svg для адресации допустимой строки. Я использовал этот инструмент
Поскольку у вас есть все необходимое, вы переходите на css
.calendarIcon{
//your url will be something like this:
background-image: url("data:image/svg+xml,***<here place encoded svg>***");
background-repeat: no-repeat;
}
Примечание: эти стили не повлияют на закодированное изображение SVG.
.{
fill: #f00; //neither this
background-color: #f00; //nor this
}
потому что все изменения изображения должны применяться непосредственно к его svg-коду
<svg xmlns="" path="" fill="#f00"/></svg>
Чтобы получить местоположение справа, я скопировал некоторый интервал Bootstrap, и мой последний css получил следующий вид:
.calendarIcon{
background-image: url("data:image/svg+xml,%3Csvg...svg%3E");
background-repeat: no-repeat;
padding-right: calc(1.5em + 0.75rem);
background-position: center right calc(0.375em + 0.1875rem);
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
Вы можете попробовать удалить width
а также height
атрибуты корневого элемента svg, добавление preserveAspectRatio="none" viewBox="0 0 1024 800"
вместо. По крайней мере, в Opera есть разница, если предположить, что вы хотите, чтобы svg растягивался, чтобы заполнить весь регион, определенный стилями CSS.
Попробуйте разместить его на своем body
body {
height: 100%;
background-image: url(../img/bg.svg);
background-size:100% 100%;
-o-background-size: 100% 100%;
-webkit-background-size: 100% 100%;
background-size:cover;
}
Установите фоновый svg с содержимым / корзиной в центре
.login-container {
justify-content: center;
align-items: center;
display: flex;
height: 100vh;
background-image: url(/assets/images/login-bg.svg);
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
Вы установили фиксированную ширину и высоту в вашем теге SVG. Это, вероятно, корень вашей проблемы. Старайтесь не удалять их и установите ширину и высоту (если необходимо), используя CSS.
Проверьте, является ли svg прозрачным дизайном , попробуйте добавить цвет фона в контейнер и проверьте, отображается ли он для другого цвета фона.