php-svg-lib icon indicating copy to clipboard operation
php-svg-lib copied to clipboard

Unable to access references defined after an element

Open bsweeney opened this issue 2 years ago • 0 comments

SvgLib operates as a stream processor, rendering elements as they are encountered. This means that a reference element (e.g., defs) and styling must occur in the document prior to any other elements. Otherwise, the reference element or styling will not yet be available.

For example, the following SVG document:

<svg width="600" height="600" xmlns="http://www.w3.org/2000/svg">
    <rect width="400" height="400" x="100" y="100" />
    <style>
        rect { stroke: blue; stroke-width: 20px; fill: orange; }
    </style>
</svg>

should produce the following output:

image

but SvgLib renders the following:

image

Switching the order of elements in the SVG produces the correct output:

<svg width="600" height="600" xmlns="http://www.w3.org/2000/svg">
    <style>
        rect { stroke: blue; stroke-width: 20px; fill: orange; }
    </style>
    <rect width="400" height="400" x="100" y="100" />
</svg>

bsweeney avatar Feb 10 '24 22:02 bsweeney