Check the page:
http://www.cssarrowplease.com/
In HTML: {{type}} is tow way binding in Angular, three types: text, data, voice
<div class="chart-area {{type}} arrow_box">
SASS:
According to different media and class type, change the position :
@mixin respond-to($type: min-width, $query: 960px) { @media ($type: $query) { @content; } } .arrow_box { padding: 5px; position: relative; background: #FFF !important; border: 2px solid #FFBE00; } .arrow_box:after, .arrow_box:before { bottom: 100%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; } .voice.arrow_box:after, .voice.arrow_box:before { left: 10%; @include respond-to(max-width, 599px) { left: 15%; } } .text.arrow_box:after, .text.arrow_box:before { left: 30%; @include respond-to(max-width, 599px) { left: 50%; } } .data.arrow_box:after, .data.arrow_box:before { left: 50%; @include respond-to(max-width, 599px) { left: 85%; } } .arrow_box:after { border-color: rgba(255, 255, 255, 0); border-bottom-color: #FFF; border-width: 20px; margin-left: -20px; } .arrow_box:before { border-color: rgba(255, 190, 0, 0); border-bottom-color: #FFBE00; border-width: 23px; margin-left: -23px; }