Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to place HTML elements over inline SVG

Tags:

I'm able to use z-index to put various HTML elements over each other in whatever order I like, except when one of the elements in an inline SVG. For example, given the HTML

<div>     <p>Text before SVG. I'm some boring text. Such incredibly boring text. Who would possibly want to read such boring text?</p>     <svg version="1.1" baseProfile="full" width="200" height="200" xmlns="http://www.w3.org/2000/svg">         <circle cx="75" cy="40" r="20" fill="red" />     </svg> </div> <div>     <svg version="1.1" baseProfile="full" width="200" height="200" xmlns="http://www.w3.org/2000/svg">         <circle cx="75" cy="75" r="20" fill="red" />     </svg>     <p>SVG before text. I'm some boring text. Such incredibly boring text. Who would possibly want to read such boring text?</p> </div> 

and the matching CSS

p {     width: 200px;     z-index:10; } div {     position: relative; } svg {     position: absolute;     left: 0;     top: 0;     z-index: 1; } 

no matter how I order the two or adjust the z-index, the inline SVG renders on top of the text. How can I get the SVG behind the text?

The example above is available at https://jsfiddle.net/o0n10j78/1/ .

If it's relevant, in my actual application I'm generating nearly all of the document structure in Javascript with the assistance of jQuery, including the inline SVG and the HTML block I wish to have in front of it.

like image 215
Alan De Smet Avatar asked Oct 24 '15 01:10

Alan De Smet


People also ask

Can you embed SVG in HTML directly into an HTML page?

You can embed SVG elements directly into your HTML pages.

Is SVG element inline?

Just as an image there is space below a svg. Because they are, by default, inline-block elements (inline in some browsers). As such, they sit alongside text: the space that's visible under an svg is there for descenders on letters like 'p' and 'q'.

Can CSS be applied to SVGs?

Because SVGs are basically text, they can be gzipped, making the files smaller that their bitmap counterparts (JPEG and PNG). SVGs are interactive and styleable with CSS and JavaScript.

What does inline SVG mean?

Inline SVG simply refers to SVG markup that is included in the markup for a webpage.


1 Answers

The z-index property is only being applied on positioned elements. Adding position: relative; to the paragraph tag will correctly apply it.

Look at this page for a full reference of the property.

On a side note: As I first wrote in a comment, setting the svg z-index to -1 works as it lowers the priority of the element below the default that all elements have. This comes with the downside that the svg actually being placed behind the div as well. Try apply a background color to the div while having the svg z-index set to -1.

like image 177
Hoshts Avatar answered Sep 16 '22 11:09

Hoshts