35

I'm using bootstrap, trying to make a div have a CSS triangle before it.

http://jsfiddle.net/B2XvZ/11/

Here is my non-working code:

.d:before {
  width: 0px;
  height: 0px;
  border-style: solid;
  border-width: 10px 15px 10px 0;
  border-color: transparent #dd4397 transparent transparent;  
}

The way I'd like it to look is for there to be a pink left-pointing triangle right before the text "this", with no gap between it and the div. I've tried to do this by floating the elements also, with no success.

web-tiki
  • 99,765
  • 32
  • 217
  • 249
amagumori
  • 667
  • 3
  • 8
  • 12

4 Answers4

56

You need to specify the content property.

For positioning, add position:relative to the parent, and then absolutely position the arrow -15px to the left.

jsFiddle example

.d {
    position:relative;
}

.d:before {
    content:"\A";
    border-style: solid;
    border-width: 10px 15px 10px 0;
    border-color: transparent #dd4397 transparent transparent;
    position: absolute;
    left: -15px;
}
Josh Crozier
  • 233,099
  • 56
  • 391
  • 304
  • 1
    thank you, this also solved my problem. But what does the CSS ISO \A stand for? – Frau Wolf Dec 01 '15 at 10:24
  • 3
    @FrauWolf `\A` is a carriage return. I think I did that for some older browser quirk (probably IE). It's not needed anymore, though. `content: ''` would work just fine. – Josh Crozier Dec 01 '15 at 13:53
12

You need content property and some other

.d:before {
  content: '';
  width: 0px;
  height: 0px;
  border-style: solid;
  border-width: 10px 15px 10px 0;
  border-color: transparent #dd4397 transparent transparent;  
  display: inline-block;
  vertical-align: middle;
  margin-right: 5px;
}
Slawa Eremin
  • 5,264
  • 18
  • 28
2
a:after {
content: '';
width: 0px;
height: 0px;
border-style: solid;
border-width: 15px 15px 0px 15px;
border-color: #fff transparent transparent transparent;
display: inline-block;
vertical-align: middle;
position: absolute;
bottom: -13px;
left: 0;
right: 0;
margin: 0 auto;

}

Adam Colton
  • 189
  • 2
  • 5
2

You can use UTF-8 Geometric Shapes.

a:before {
  content: '\25B2'
}

in your HTML need a meta charset:

<html>
<head>
<meta charset="utf-8" /> 
...
</head>
</html>

Geometric shapes list: https://www.w3schools.com/charsets/ref_utf_geometric.asp

Ayrton Krizan
  • 91
  • 1
  • 4