Рассмотрим этот фрагмент HTML:
<div class="container">
<svg class="graph" style="visibility: hidden">
<style type="text/css">
<![CDATA[
.arrow {
fill: none;
stroke-width: 2;
stroke: #000;
marker-end: url(#arrowhead);
}
]]>
</style>
<defs>
<marker id="arrowhead" viewBox="0 0 10 10" refX="10" refY="5" markerUnits="strokeWidth" markerWidth="6" markerHeight="6" orient="auto">
<path fill="#000" d="M 0 0 L 10 5 L 0 10 z"></path>
</marker>
</defs>
<path class="arrow" d="M 0 0 L 100 10"></path>
</svg>
<svg class="graph">
<style type="text/css">
<![CDATA[
.arrow {
fill: none;
stroke-width: 2;
stroke: #000;
marker-end: url(#arrowhead);
}
]]>
</style>
<defs>
<marker id="arrowhead" viewBox="0 0 10 10" refX="10" refY="5" markerUnits="strokeWidth" markerWidth="6" markerHeight="6" orient="auto">
<path fill="#000" d="M 0 0 L 10 5 L 0 10 z"></path>
</marker>
</defs>
<path class="arrow" d="M 0 0 L 100 10"></path>
</svg>
</div>
Содержит элемент SVG, который показывает короткую стрелку со стрелкой, определенную в разделе <defs>
элемента SVG.В частности, он содержит две копии этого изображения.
Обычно это выглядит так:
Однако первый SVGэлемент скрытВ Chrome результат выглядит следующим образом:
Похоже, определение маркера недействительно из-за того, что первый SVG скрыт, но существует избыточностьопределение во втором SVG (и по определению, каждое определение должно применяться только к своему элементу).
В Firefox я вижу идентичный рендеринг.Safari показывает стрелку.
Почему Chrome и Firefox не отображают стрелку?Это ошибка в обоих браузерах, или я неправильно понимаю спецификацию?