[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] Request: change SVG embedding in exported HTML
From: |
Christian Moe |
Subject: |
Re: [O] Request: change SVG embedding in exported HTML |
Date: |
Sun, 24 Jul 2016 18:50:10 +0200 |
User-agent: |
mu4e 0.9.17; emacs 24.5.1 |
I disagree. A switch to <img> for SVG export (1) is not necessary for
scaling, and (2) would disable other useful features that are presently
available out of the box.
(1) It *is* a bit easier to scale SVG with <img> in HTML. But you *can*
scale SVG with <object> by putting the <object> in a container <div> and
scaling the container width and height.
This is actually simple with Org, which natively wraps the <object> in a
<div class="figure"> tag, and passes any attributes to the latter. To
scale an arbitrary image.svg e.g. to 100px width, try:
#+attr_html: :width 100px
[[path/to/image.svg]]
Alternatively, you can use #+attr_html to set an id on the figure <div>,
and style it with CSS.
(2) You can also do other things with <object> that you cannot with
<img>, like manipulating the SVG with Javascript and styling it with an
external stylesheet (linked from the SVG, not the web page).
Raw SVG in the exported HTML is a third option that is very plain-texty
and supports all the mentioned features, but it tends to bloat files,
and doesn't encourage caching and re-using of an image across web pages.
To sum up, <img> makes the most common task simpler (scaling the
graphic), but at the cost of features such as interactive animated
graphics, which are possible with <object> or SVG islands.
Yours,
Christian
Scott Randby writes:
> On 07/23/2016 08:53 AM, Jarmo Hurri wrote:
>>
>> Greetings.
>>
>> Request: An SVG file embedded in exported HTML should be embedded using
>> the <img> tag instead of <object>.
>
> I second this request. Right now, I use HTML code for SVG images, and
> I'd rather use Org markup instead.
>
> Scott Randby
>
>>
>> Short reasoning: The displayed size of the SVG image can not be
>> controlled from outside the SVG file when embedded using <object>, but
>> size can be controlled when embedded using <img>.
>>
>> Here is the longer explanation.
>>
>> The HTML exporter currently embeds SVG as an object. Here is an example
>> of the HTML produced by the exporter:
>>
>> <div class="figure">
>> <p><object type="image/svg+xml" data="kolmio-nelio.svg" >
>> Sorry, your browser does not support SVG.</object>
>> </p>
>> </div>
>>
>> I have in the past couple of days found out that there is a serious
>> disadvantage to this: the displayed size of the resulting web page image
>> can not be controlled in any reasonable manner; see, for example
>>
>> https://css-tricks.com/scale-svg/
>>
>> However, the size _can_ be controlled if embedding is done with an
>> <img>. For example, the exported code above could be
>>
>> <div class="figure">
>> <img class="org-svg" src="kolmio-nelio.svg">
>> </div>
>>
>> I have included 'class="org-svg"' above so that embedded SVG images can
>> then be distinguished from other images in CSS files. For example, the
>> following CSS then sets the width of SVG images to be 80% of the width
>> of the viewport.
>>
>> .org-svg
>> {
>> width: 80vw;
>> }
>>
>> Current embedding using <object> has a nice textual fallback property
>> for browsers not capable of SVG (I have no idea if this support is
>> necessary nowadays). If need be, such fallback could also be added to
>> embedding using <img>. See
>>
>> http://www.w3schools.com/jsref/event_onerror.asp
>>
>> Jarmo
>>
>>
>>
Re: [O] Request: change SVG embedding in exported HTML, Nicolas Goaziou, 2016/07/24