26 March 2012

CSS3 градиент для границ блока

CSS


В этой статье я покажу один из вариантов создания градиента для границ у любого блока с помощью 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 по краям градиент начинает заметно обрезаться. Пока что не нашёл решения.

Но есть и плюсы:
  • Никаких изображений и лишнего трафика.
  • Можно ставить какой угодно градиент для обводки, даже радиальный, их комбиниорвать.
  • Работает с любой шириной границы.
Tags:css3linear-gradient
Hubs: CSS
+23
58.2k 357
Comments 32
Top of the last 24 hours