![](https://habrastorage.org/storage2/01e/f6e/e8c/01ef6ee8c3382cfcbe277bce82593fa3.png)
В этой статье я покажу один из вариантов создания градиента для границ у любого блока с помощью CSS3.
В конечном варианте у нас получится кнопка, которая на скриншоте выше.
Работать мы будем с такой вёрсткой:
<html>
<body>
<a href="http://google.com" class="magicButton">I am a button!</a>
</body>
</html>
Сначала зададим простую стилизацию для кнопки
.magicButton
{
color: #444;
font: bold 16px arial;
background: #e4e4e4;
border: 1px solid transparent; /* граница будущего градента */
border-radius: 3px;
padding: 8px 12px;
text-decoration: none;
text-shadow: 0 1px 1px rgba(255,255,255,0.75);
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.5), 0 3px 6px -3px rgba(0,0,0,0.25);
}
Затем приступаем, собственно, к хаку.
Для того чтобы создать градиент на месте нашей границы нам понадобится в первую очередь его расположить там (background-origin: border-box;), а затем обрезать чтобы он находился точно в этом месте (background-clip: border-box;).
Основная часть готова, теперь осталось лишь прописать наш градиент. В данном примере я использую градиент в светло-серых тонах, если вы используете кнопку не на светлом фоне, то цвета градиента надо будет соответственно изменить.
linear-gradient(#e4e4e4, #ccc);
Но после установки градиента появляется проблема в том что залито так же и весь фон кнопки. Для этого мы наложим ещё один градиент, только на этот раз расположим и обрежем его в пределах padding-box.
И в тоге получим вот такую кнопку: jsfiddle.net/CyberAP/DzHUj
Минусы данного приёма:
- Нельзя использовать полупрозрачный градиент для основного фона, произойдёт наложение. Зато прозрачную обводку делать вполне возможно.
- Есть проблема с border-radius, при значении более 3px по краям градиент начинает заметно обрезаться. Пока что не нашёл решения.
Но есть и плюсы:
- Никаких изображений и лишнего трафика.
- Можно ставить какой угодно градиент для обводки, даже радиальный, их комбиниорвать.
- Работает с любой шириной границы.