Для того, чтобы сделать треугольник на чистом CSS достаточно использовать всего один блок
и пару строк стилей.
<div class="arrow-box"></div>
.arrow-box { width: 100px; height: 50px; position: relative; } .arrow-box:before { position: absolute; left: 100%; top: 50%; margin-top: -12px; content: ' '; width: 0px; height: 0px; border-style: solid; border-width: 12px 0 12px 8px; border-color: transparent transparent transparent #007bff; }
Результат:
Советы
IE6 ничего не знает о прозрачности для border
, поэтому для него можно применить следующй трюк: задать рамкам розовый цвет и через фильтр chroma сделать их прозрачными.
.arrow-box:before { position: absolute; left: 100%; top: 50%; margin-top: -12px; content: ' '; width: 0px; height: 0px; border-style: solid; border-width: 12px 0 12px 8px; border-color: transparent transparent transparent #007bff; _border-color: pink pink pink #007bff; /* IE6 */ _filter: chroma(color=pink); line-height: 0px; }
Браузер Firefox отрисовывает треугольник с серой рамкой. Исправляется заданием inset для прозрачных сторон рамки.
.arrow-box:before { position: absolute; left: 100%; top: 50%; margin-top: -12px; content: ' '; width: 0px; height: 0px; border-style: inset solid inset solid; /* FF */ border-width: 12px 0 12px 8px; border-color: transparent transparent transparent #007bff; _border-color: pink pink pink #007bff; /* IE6 */ _filter: chroma(color=pink); line-height: 0px; }
Браузеры на основе движка webkit рендерят треугольник с кривым anti-aliasing. Для них можно применить такой подход: повернуть фигуру на 360 градусов.
.arrow-box:before { position: absolute; left: 100%; top: 50%; margin-top: -12px; content: ' '; width: 0px; height: 0px; border-style: inset solid inset solid; /* FF */ border-width: 12px 0 12px 8px; border-color: transparent transparent transparent #007bff; _border-color: pink pink pink #007bff; /* IE6 */ _filter: chroma(color=pink); line-height: 0px; -webkit-transform:rotate(360deg) /* webkit */ }
Чтобы треугольник был поверх блока, но не мешал событиям мыши hover, click, задействуем CCS4 свойство pointer-events.
.arrow-box:before { position: absolute; left: 100%; top: 50%; margin-top: -12px; content: ' '; width: 0px; height: 0px; border-style: inset solid inset solid; /* FF */ border-width: 12px 0 12px 8px; border-color: transparent transparent transparent #007bff; _border-color: pink pink pink #007bff; /* IE6 */ _filter: chroma(color=pink); line-height: 0px; -webkit-transform:rotate(360deg) /* webkit */ pointer-events: none; }
See the Pen zjhDo by mihdan (@mihdan) on CodePen.0