How can I style a part of a single character with overlays using a dynamic width?
Great work on your solution. I’ve got a version that uses :after
(instead of duplicating the content in the HTML) working in Chrome 19.
- http://jsfiddle.net/v5xzJ/4/
Basically:
- Set
position:relative
on.content
- Position
:after
absolutely - Set
:after
tooverflow:hidden
- Adjust the width, height, text-indent and line-height of
:after
to hide bits of it.
I’m not sure if it’ll work well cross-browser though — the em
values will probably work out a bit differently. (Obviously it definitely won’t work in IE 7 or below.)
In addition, you end up having to duplicate the content in your CSS file instead of the HTML, which might not be optimal depending on the situation.
While playing around with a demo fiddle, i figured it out myself and wanted to share my solution. It's quite simple.
First things first: The DEMO
To partly style a single character, you need extra markup for your content. Basically, you need to duplicate it:
<div class="content">
<span class="overlay">X</span>
X
</div>
Using pseudo-elements like :after or :before would be nicer, but i didn't found a way to do that.
The overlay needs to be positioned absolutely to the content element:
.content {
display: inline-block;
position: relative;
color: black;
}
.overlay {
width: 50%;
position: absolute;
color: red;
overflow: hidden;
}
Do not forget overflow: hidden;
in order to cut off the remaing part of the "X".
You can use any width instead of 50%
which makes this approach very flexible. You can even use a custom height, other CSS attributes or a combination of multiple attributes.