Технически, все может идти в теге foreignObject
. Вопрос в том, будет ли это поддерживать пользовательский агент. Для этого, кажется, нет однозначного ответа. Спецификация SVG сама по себе (намеренно) расплывчата:
Элемент foreignObject позволяет включить внешнее пространство имен, графическое содержимое которого нарисовано другим пользовательским агентом. Включенный иностранный графический контент подвергается преобразованиям и компоновке SVG.
К счастью, спецификация также определяет атрибут requiredExtensions
, который принимает разделенный пробелами список URI пространства имен. Это в сочетании с оператором switch позволяет использовать полуинтеллектуальную резервную логику, основанную на возможностях агента пользователя. Пример :
<svg width="100" height="50" xmlns="http://www.w3.org/2000/svg">
<switch>
<!-- Render if extension is available -->
<foreignObject width="100" height="50"
requiredExtensions="http://example.com/foreign-object-spec-uri">
<!-- Foreign object content -->
</foreignObject>
<!-- Else, do fallback logic -->
<text x="0" y="20">Not available</text>
</switch>
</svg>
То, что фактически визуализируется, похоже, полностью зависит от пользовательского агента (браузера, батика и т. Д.). Таким образом, аналогично, спецификация HTML5 имеет короткую рекламу , что позволяет использовать любой контент, не относящийся к HTML, в пределах foreignObject
s.
Спецификация SVG включает в себя требования, касающиеся обработки элементов в DOM, которых нет в пространстве имен SVG, которые находятся во фрагментах SVG и которые не включены в элемент foreignObject. Эта спецификация не определяет какую-либо обработку для элементов в фрагментах SVG, которые не находятся в пространстве имен HTML; они не считаются ни соответствующими, ни несоответствующими с точки зрения настоящей спецификации.
В оригинальном сообщении говорится, что «HTML может быть отображен ... как и MathML». Поскольку элементы <math>
теперь стандартны HTML5 , я считаю, что браузер интерпретирует этот код как HTML. Таким образом, технически правильнее было бы сказать, что браузер отображает MathML как часть HTML.
И по моему опыту, использование [X] HTML будет наиболее совместимым ... и, вероятно, всем, что вам действительно нужно. Оба приведенных выше примера работают с использованием родительского пространства имен HTML. Как видите, вы можете вставлять фрагменты HTML-документа как из контекста SVG , так и из контекста HTML , поэтому он может быть достаточно универсальным.