Как я могу настроить положение SVG?

#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. Этот код не связан с кодом в примере.