Given the html
<meter value="0.55" high="0.999" optimum="1"> <span class="meter-value">0.5491</span> </meter>
I would like text 0.5491 on top of the meter
. I tried to style the text using usual CSS techniques, but it won't show at all. In inspector it just says width and height is 0 no matter how much I say things like
.meter-value { display: block; width: 50px; height: 20px; }
I made more attempts, these examples are simplified. I use Firefox for tests and compatibility is not pressing issue (inhouse project).
I much more prefer "ugly css" solution above "ugly html" solution.
Update: (to sum up some comments)
There seems to be some magic which makes content from meter invisible (including the content from meter::after, meter span::after and simillar components) in Firefox. So the question is if there is a css which can override this. Setting width, height and visibility did not help.
5 Answers
Answers 1
Make use of CSS3's ::after
and add it to meter
tag as follows.
meter::after { content : "0.5491"; }
This will show the text below the meter
.
update
Since OP said that he want multiple elements, updated the code. Changed position from absolute
to relative
so the text will be always relative to the meter
In order to make it appear on the meter
, style it using position:absolute
and give top
or margin-top
and left
as follows
meter{ width:100px; } meter::after { content : attr(value); top:-17px; left:40px; position:relative; }
For more reference on ::after
, Visit MDN
Also using that, you can remove the span
element.
Here, we make use of attr()
function in css. Read about it in MDN
Try the below snippet
meter{ width:100px; } meter::after { content : attr(value); top:-17px; left:40px; position:relative; }
<meter value="0.55" high="0.999" optimum="1"> </meter> <meter value="0.45" high="0.999" optimum="1"> </meter> <meter value="0.85" high="0.999" optimum="1"> </meter> <meter value="0.95" high="0.999" optimum="1"> </meter> <br /> <meter value="0.55" high="0.999" optimum="1"> </meter> <meter value="0.45" high="0.999" optimum="1"> </meter> <meter value="0.85" high="0.999" optimum="1"> </meter> <meter value="0.95" high="0.999" optimum="1"> </meter>
The above code doesn't work on Firefox. It is a known issue that ::after
and ::before
pseudos work only in webkit browsers.
For firefox, try the following code (This is global. It will work on all browsers)
meter{ width:100px; } span{ } span::after { content : attr(data-value); top:0px; left:-70px; position:relative; }
<meter value="0.55" high="0.999" optimum="1"> </meter> <span data-value="0.55"></span> <meter value="0.45" high="0.999" optimum="1"> </meter> <span data-value="0.45"></span> <br /> <meter value="0.55" high="0.999" optimum="1"> </meter> <span data-value="0.55"></span> <meter value="0.45" high="0.999" optimum="1"> </meter> <span data-value="0.45"></span>
Answers 2
There might be other way of doing this. I can see this works: add separate code and use that.
<meter value="0.55" high="0.999" optimum="1"> <span class="meter-value">0.5491</span> </meter> <span class="meter-value">0.5491</span>
Answers 3
Whelp, that's an interesting question. The only thing that I can think of is to use content
property, used in ::before
and ::after
pseudo-selector.
Yet, the problem is the value, assuming if you have multiple meters. Well, I have a solution for it I think: the content's attr(...)
keyword.
So you only have to provide a value as attribute, like the data-value
here below.
<meter value="0.55" high="0.999" optimum="1" data-value="0.5491"></meter>
Then it's simply adding and adjusting the positions of the added content.
But ... sadly it's not widely supported (yet). Only chrome I think...
meter::after { content: attr(data-value); position:relative; left: 1.2em; top: -1em; }
<meter value="0.55" high="0.999" optimum="1" data-value="0.5491"></meter> <meter value="0.22" high="0.999" optimum="1" data-value="0.2219"></meter>
Answers 4
adding ::before selector to css you can view the text on top of meter
CSS:
meter::before { content : "0.5491"; }
HTML:
<meter value="0.55" high="0.999" optimum="1"> <span class="meter-value">0.5491</span> </meter>
Answers 5
I think this is the best solution, put in the value of the meter the data
meter:before{ content:attr(value); }
0 comments:
Post a Comment