#html #css #svg
#HTML #css #svg
Вопрос:
Я хочу настроить SVG правильно, но мне не удалось right: 0;
преобразовать, позиционирование в таких случаях часто бывает довольно сложным, я не знаю, какой из них выбрать.
Какие настройки позиционирования используются для SVG? Также я был бы признателен, если бы вы порекомендовали полезные сайты для SVG.
*,
*::before,
*::after {
padding: 0px;
margin: 0px;
box-sizing: border-box;
}
body {
font-family: sans-serif;
overflow-x: hidden;
text-align: center;
width: 100vw;
height: 100vh;
}
ul {
list-style: none;
}
a {
text-decoration: none;
color: black;
}
.page-1 {
position: relative;
background-color: black;
height: 80vh;
}
.custom-shape {
position: absolute;
width: 100%;
}
.custom-shape svg {
position: relative;
display: block;
width: calc(100% 1.3px);
height: 121px;
}
.custom-shape .shape-fill {
fill: #EC2424;
}
<div class="page-1">
<div class="custom-shape">
<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 120" preserveAspectRatio="none">
<path d="M0,0V46.29c47.79,22.2,103.59,32.17,158,28,70.36-5.37,136.33-33.31,206.8-37.5C438.64,32.43,512.34,53.67,583,72.05c69.27,18,138.3,24.88,209.4,13.08,36.15-6,69.85-17.84,104.45-29.34C989.49,25,1113-14.29,1200,52.47V0Z" opacity=".25" class="shape-fill"></path>
<path d="M0,0V15.81C13,36.92,27.64,56.86,47.69,72.05,99.41,111.27,165,111,224.58,91.58c31.15-10.15,60.09-26.07,89.67-39.8,40.92-19,84.73-46,130.83-49.67,36.26-2.85,70.9,9.42,98.6,31.56,31.77,25.39,62.32,62,103.63,73,40.44,10.79,81.35-6.69,119.13-24.28s75.16-39,116.92-43.05c59.73-5.85,113.28,22.88,168.9,38.84,30.2,8.66,59,6.17,87.09-7.5,22.43-10.89,48-26.93,60.65-49.24V0Z" opacity=".5" class="shape-fill"></path>
<path d="M0,0V5.63C149.93,59,314.09,71.32,475.83,42.57c43-7.64,84.23-20.12,127.61-26.46,59-8.63,112.48,12.24,165.56,35.4C827.93,77.22,886,95.24,951.2,90c86.53-7,172.46-45.71,248.8-84.81V0Z" class="shape-fill"></path>
</svg>
</div>
</div>
Комментарии:
1. Какой элемент вы пытаетесь установить
right: 0
?right: 0
В вашем примере этого нет.2. Было бы полезно, если бы вы описали, чего вы на самом деле пытаетесь достичь. Из вашего вопроса не очень понятно.
3. @Sean Я хочу, чтобы svg был размещен справа от экрана
Ответ №1:
Я не уверен, какой именно результат вам нужен из вашего примера кода, но некоторые вещи следует принять во внимание…
Стиль SVG
- По умолчанию SVG отображает CSS
inline
, но вы уже изменили его наblock
идеальный, поэтому теперь он ведет себя как DIV. - Соотношение SVG по умолчанию
viewBox
зависит от настроек атрибута, поэтому независимо от того, какойwidth
илиheight
CSS вы установили в элементе SVG, соотношение сторон SVG будет фиксированным на основеviewBox
значения. - Возможно (не могу вспомнить наверняка), если вы установите оба
width
иheight
CSS, это может переопределитьviewBox
настройки соотношения и привести SVG к тому, что вы когда-либо определяли. - Очевидно, что любые встроенные атрибуты CSS, такие как
width
илиheight
, возможно, могут переопределять любой установленный вами CSS таблицы стилей. - Вы установили атрибут
preserveAspectRatio="none"
, поэтомуviewBox
настройки будут игнорироваться.
Позиционирование SVG
<svg>
Поведение позиционирования элемента SVG в значительной степени похоже на позиционирование любого другого элемента html на основе того, какойdisplay
режим CSS илиposition
вы определяете.- Внутренние дочерние элементы SVG (
path
,rect
,circle
, и т.д.) позиционируются абсолютными (относительно элемента SVG), используя встроенные атрибуты, такие какd
или с префиксомx
/y
. - В идеале никогда не пытайтесь переопределить расположение дочерних элементов SVG с помощью CSS, если вы действительно не понимаете их поведение в позиции.
- Когда вы размещаете элементы SVG напрямую, соотношение будет оставаться верным
viewBox
настройкам, если вы не применяете иное.
Несколько особенностей CSS-браузера SVG
- При таргетинге на элементы SVG и дочерние элементы в вашем CSS рекомендуется использовать для них
class
id
data
атрибут or . - В основном iOS safari не распознает таргетинг на дочерние элементы SVG по имени элемента, например
SVG PATH { fill: blue; }
, из-за некоторых проблем в safari / mobile и, возможно, других браузерах. Способ, который вы использовалиclass="shape-fill"
на своем<path>
, идеален 👍🏼 . - Возможно, стоит переключить способ таргетинга
.custom-shape svg
, нацелившись на SVG напрямую сid
class
помощью селектора или, просто чтобы быть уверенным. - Я думаю, что ориентация на фактический родительский элемент SVG, как у вас в вашем примере, может нормально работать на iOS, но стоит протестировать на всех настольных и мобильных браузерах, чтобы быть уверенным.. особенно старые IE перед Edge, если они вам нужны.
Для ссылки на SVG библия для SVG находится здесь https://developer.mozilla.org/en-US/docs/Web/SVG
Если вам нужна дополнительная помощь с вашим примером кода в вашем вопросе, пожалуйста, уточните более подробно в своем вопросе, чтобы решить вашу проблему.
Кроме того, почему вы добавляете
1.3px
100%
ширину SVG?
Ответ №2:
Мне удалось переместить некоторый текст SVG в браузере Chrome, и я упоминаю свой код ниже
text.identity{
transform: translate(74px,0px);
-ms-transform: translate(74px,0px); /* IE 9 */
-webkit-transform: translate(74px,0px); /* Chrome and Safari */
-moz-transform: translate(74px,0px); /* Firefox */
-o-transform: translate(74px,0px); /* Opera */
}
Счастливого кодирования!!!
я надеюсь
Комментарии:
1. Спасибо, брат, но это не так
2. Этот код не связан с кодом в примере.