Reputation: 35
I want to add triangles onto the sides of a block to shape it into an arrow like so. But it needs to be flexible and adapt to different lengths of text. I'm thinking that the traditional css-triangles-made-from-borders technique isn't going to work, but that's all I've got so far (demo). Does anyone else have a more robust solution?
Cutting-edge css is fine as long as it degrades nicely.
Upvotes: 1
Views: 3059
Reputation: 37169
I think the best compatibility solution would be http://dabblet.com/gist/3184227
It uses just pseudo-elements and CSS transform
s (so it works in IE9 and it may be adapted to IE8, where the pseudo-elements could be skewed using a matrix filter
- I've never checked whether that actually works... I only know that gradient filters don't work on pseudo-elements).
The idea is really simple: use two pseudo-elements, each having half the height
, absolutely position
them, one taking up the upper half and the other one the lower half and finally skew
them in opposite directions.
HTML:
<div class="t">
<p>Add text to see how it scales</p>
</div>
Relevant CSS:
.t {
position: relative;
}
.t:before,
.t:after {
left: 0;
right: 0;
position: absolute;
z-index: -1;
content: '';
}
.t:before {
top: 0;
bottom: 50%;
transform: skewX(10deg);
}
.t:after {
top: 50%;
bottom: 0;
transform: skewX(-10deg);
}
It can be done without pseudo-elements, using just CSS gradients
. Unfortunately, IE9 does not support them.
Upvotes: 5