Чистое решение CSS
Вот пример jsFiddle со сравнением с исходным изображением и CSS:
span.tag {
margin:4px 5px;
position:relative;
border-radius:5px;
background:red;
display:inline-block;
padding:.6em 4.5em;
text-align:center;
}
span.tag-gray {
background: #7c7d80; /* Old browsers */
background: -moz-linear-gradient(top, #7c7d80 0%, #7c7d80 50%, #66686b 51%, #66686b 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#7c7d80), color-stop(50%,#7c7d80), color-stop(51%,#66686b), color-stop(100%,#66686b)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #7c7d80 0%,#7c7d80 50%,#66686b 51%,#66686b 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #7c7d80 0%,#7c7d80 50%,#66686b 51%,#66686b 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #7c7d80 0%,#7c7d80 50%,#66686b 51%,#66686b 100%); /* IE10+ */
background: linear-gradient(top, #7c7d80 0%,#7c7d80 50%,#66686b 51%,#66686b 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7c7d80', endColorstr='#66686b',GradientType=0 ); /* IE6-9 */
color:#fff;
font-family:sans-serif;
font-size:.7em;
font-weight:bold;
}
span.tag:after {
/* right, height, and width should equal eachother */
right:-18px;
height:18px;
width:18px;
content:".";
display:block;
position:absolute;
top:0;
font-size:0;
overflow:hidden;
background:#fff;
-moz-transform-origin:0 0;
-moz-transform:rotate(-45deg) translate(-50%, -50%);
-webkit-transform-origin:0 0;
-webkit-transform:rotate(-45deg) translate(-50%, -50%);
transform-origin:0 0;
transform:rotate(-45deg) translate(-50%, -50%);
}
Предполагается, что HTML-код:
<span class="tag tag-gray">FRETE GRÁTIS</span>
Gotchas
- Чтобы заставить его работать со старыми (и другими) браузерами, вы можете добавить префиксные версии
border-radius
- Чтобы заставить его работать в браузерах, отличных от webkit / moz, просто добавьте соответствующие префиксные версии
transform
и transform-origin
- «Вырез» не может быть прозрачным, но вы можете сделать так, чтобы он выглядел так же, как цвет фона (фона)
- Из-за использования
border-radius
вы не можете установить div.cut
s overflow
на hidden
, так как фон div
будет просвечивать по внешнему краю радиуса, поэтому вы должны убедиться, что у вас есть достаточно места за пределами элемента, чтобы избежать покрытия других элементов / текста. Обходной путь - установить фон для градиента и сделать внешний край прозрачным (он же справа)