Преобразовать SVG внутрь SVG

Итак, у меня есть два примера. Сначала это один svg, к которому я применяю преобразование, чтобы перевернуть svg по горизонтали:

http://jsfiddle.net/p3L95rcb/

<svg id = "Layer_1" data-name = "Layer 1" xmlns = "http://www.w3.org/2000/svg" 
viewBox = "0 0 109.55 40.51" transform = "scale(-1,1)">

Во-вторых, тот же svg, только теперь он заключен в другой svg (созданный с помощью snap svg):

http://jsfiddle.net/dFTtd/650/

<svg id = "combinationDrawSvg" width = "100%" height = "254" class = "overlap-annotations"><g transform = "matrix(1,0,0,1,0,0)"><svg id = "Layer_1" data-name = "Layer 1" xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 109.55 40.51" transform = "scale(-1,1)">

Теперь, если я применяю то же преобразование к внутреннему svg, преобразование не применяется. Любые мысли о том, почему преобразование работает в примере 1, а в примере 2 - нет? Я как бы застрял на этом, так что некоторая помощь может быть полезна.

Вы пробовали это в Firefox? Не все браузеры поддерживают преобразование элемента <svg>, но Firefox поддерживает. Для кроссбраузерной поддержки используйте элемент <g> вместо элемента <svg>.

Robert Longson 25.10.2018 15:16

Чтобы расширить то, что сказал Роберт, если вы оберните рисунок в свой внутренний svg с помощью <g/> и примените к нему преобразование, это сработает. Преобразования вложенных тегов <svg/> делают браузеры раздражительными

Ted 25.10.2018 16:06

Я бы use первый svg во втором через <use xlink:href = "#Layer_1"/> и применил преобразование к оригиналу. Как правило, не очень хорошая практика (насколько я знаю) встраивать svg непосредственно в svg, хотя я бы порекомендовал подробнее об этом от Роберта.

Chris W. 25.10.2018 16:21

@RobertLongson: если я попробую это во втором примере, изображение исчезнет. Или это потому, что svg находится за пределами экрана?

Willem van Beem 25.10.2018 23:13

@ChrisW. мы объединяем несколько svg в один, поэтому нам нужно встраивать svg друг в друга ...

Willem van Beem 25.10.2018 23:15

@WillemvanBeem Конечно, но лучше всего было бы создать базовый svg с библиотекой defs и реализовать их с помощью useнравится.

Chris W. 25.10.2018 23:20

@WillemvanBeem, правильно, это вне области просмотра.

Robert Longson 26.10.2018 00:33

@RobertLongson Я все еще не понимаю, как это исправить. Вы можете показать мне, как это исправить во второй скрипке?

Willem van Beem 26.10.2018 09:07

Тед предоставил более подробную информацию в комментарии после моего, с какой проблемой вы сталкиваетесь, подписавшись на них?

Robert Longson 26.10.2018 09:09

Теперь у меня в firefox работает следующее: <g> <svg xmlns = "w3.org/2000/svg" viewBox = "0 0 406.93 140.65" preserveAspectRatio = "none" width = "341.38235294117646" height = "129.6115" x = "184.8416176470588" y = "76.507903" style = "transform-origin: 275.576904296875px; transform: scale (-1, 1);"> Но в Chrome это работает, только если я помещаю стиль в <g>, но это не вариант, поскольку есть больше элементов внутри группы, и я хочу отразить только один из них. Есть мысли о том, как заставить это решение работать как в Firefox, так и в Chrome?

Willem van Beem 29.10.2018 13:03
Создание фильтров для вашего сайта
Создание фильтров для вашего сайта
Фильтры - удобный инструмент в арсенале веб-дизайнера. Они позволяют изменять элементы на странице с помощью всего нескольких строк кода. Эти...
Анимация SVG-узоров без единой строки CSS
Анимация SVG-узоров без единой строки CSS
Недавно я работал над веб-проектом, который позволил мне поэкспериментировать с шаблонами SVG. С SVG очень приятно работать, как только вы получите...
Как использовать d3.js для рисования 2D SVG-элементов в приложении Angular?
Как использовать d3.js для рисования 2D SVG-элементов в приложении Angular?
D3.js - это обширная библиотека, используемая для привязки произвольных данных к объектной модели документа (DOM). Мы разберем основные варианты...
0
10
73
1

Ответы 1

используйте элемент <условное обозначение>

<!-- id with lowercase -->
<symbol id = "layer_1" data-name = "Layer 1" preserveAspectRatio = "xMidYMid meet" viewBox = "0 0 109.55 40.51">
    <!-- your paths -->
</symbol>

<g transform = "matrix(1,0,0,1,0,0)">
    <use xlink:href = "#layer_1" x = "0" y = "0" transform-origin = "50% 50%" transform = "scale(-1, 1)" />
</g>

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