Установите значение X и Y для элемента g SVG

Я относительно новичок в рисовании SVG с HTML5.

Что я хочу сделать, так это создать группу элементов в SVG с элемент g, чтобы все элементы внутри этого элемента граммграмм> могли работать как группа, и все базовые значения Икс и у элемента могли быть получены из верхний элемент g.

Итак, я сделал что-то вроде этого -

<svg width = "500" height = "300" xmlns = "http://www.w3.org/2000/svg">
  <g x = "1000" y = "1000">
    <title>SVG Title Demo example</title>
    <rect width = "200" height = "50"
    style = "fill:wheat; stroke:blue; stroke-width:1px"/>
    <text style = "text-anchor: middle;" class = "small">My Text</text>
  </g>
</svg>

Я ожидал, что все элементы внутри элемента g получат x = "1000" и y = "1000", поэтому мой ожидаемый результат будет таким:

Установите значение X и Y для элемента g SVG

Но я получаю это-

Установите значение X и Y для элемента g SVG

Повторно

Мне не нравится устанавливать элементы x и y в элементе text. Я просто хочу установить относительные x и y в элементе text, если это необходимо, но это должно быть относительно элемента g.

Может ли кто-нибудь помочь мне в том, что мне нужно сделать для достижения моей цели с группой в SVG?

Вы конкретно хотите использовать svg или просто хотите нарисовать поле в html5, у которого есть собственные инструменты рисования (холст)

cup 30.05.2018 06:25

Я использую SVG, а не Canvas

Abrar Jahin 03.06.2018 03:53

Это тоже было полезно! stackoverflow.com/questions/479591/svg-position

frederj 17.12.2019 17:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
3
10 663
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Элементы <g> не поддерживают атрибуты x или y. Однако вместо этого вы можете использовать преобразование.

Я уменьшил значения с 1000 до 100, иначе результат будет за пределами холста 500 x 300 внешнего элемента <svg>.

Я предоставил дополнительные атрибуты x и y для текстового элемента, чтобы он выглядел так, как в вашем примере. При желании вы можете поместить сам текст в элемент <g> или элемент <svg>.

<svg width = "500" height = "300" xmlns = "http://www.w3.org/2000/svg">
  <g transform = "translate(100, 100)">
    <title>SVG Title Demo example</title>
    <rect width = "200" height = "50"
    style = "fill:wheat; stroke:blue; stroke-width:1px"/>
    <text x = "100" y = "30" style = "text-anchor: middle;" class = "small">My Text</text>
  </g>
</svg>

или использование дополнительного элемента <g>, чтобы исключить x и y в самом тексте.

<svg width = "500" height = "300" xmlns = "http://www.w3.org/2000/svg">
  <g transform = "translate(100, 100)">
    <title>SVG Title Demo example</title>
    <rect width = "200" height = "50"
    style = "fill:wheat; stroke:blue; stroke-width:1px"/>
    <g transform = "translate(100, 30)">
        <text style = "text-anchor: middle;" class = "small">My Text</text>
    </g>
  </g>
</svg>

В качестве альтернативы вы можете использовать внутренний элемент <svg> вместо элемента <g>, поскольку он поддерживает атрибуты x и y.

<svg width = "500" height = "300" xmlns = "http://www.w3.org/2000/svg">
  <svg x = "100" y = "100">
    <title>SVG Title Demo example</title>
    <rect width = "200" height = "50"
    style = "fill:wheat; stroke:blue; stroke-width:1px"/>
    <text x = "100" y = "30" style = "text-anchor: middle;" class = "small">My Text</text>
  </svg>
</svg>

Не могли бы вы добавить некоторые относительные достоинства и соображения по каждому из них? Когда уместно вкладывать SVG? Есть ли недостатки в производительности? Как насчет использования преобразования по сравнению с собственными атрибутами x и y?

Alex Lenail 28.07.2018 15:12

Я бы не использовал ни один из них, вместо этого я бы установил атрибуты x и y в текстовом элементе. ОП по какой-то непостижимой причине не хочет делать что-то легким путем. Производительность зависит от браузеров, платформ и видеокарт.

Robert Longson 28.07.2018 15:23

У меня довольно сложная установка, в которой у меня есть вложенный выбор. Представьте себе таблицу со строками и ячейками внутри строк. Иногда мне нужно изменить порядок строк и изменить координату y элемента строки. У меня была строка как <g>, но теперь это <svg>, и поведение работает, но это не очень красиво. Учитывая мою структуру данных, было бы очень сложно обновить координаты y для каждого из элементов отдельно, и было бы неплохо, если бы я мог сделать это в строке ...

Alex Lenail 28.07.2018 15:28

Вероятно, вам следует задать отдельный вопрос, хотя вам нужно будет четко определить, что означает «некрасиво». Может быть, один из моих ответов для вас, попробуйте и убедитесь.

Robert Longson 28.07.2018 15:31

Другие вопросы по теме