dr.Brain

doctor Brain

мир глазами веб-разработчика

Кнопка со смещенными границами

Анимированная кнопка со смещенными границами на чистом CSS

dr.Brain

время чтения 2 мин.

Photo by James Orr on Unsplash

Я считаю, что маленькие вещи могут доставлять нам большую радость. В моем последнем проекте такой маленькой вещью стала кнопка. Я много читал о веб-дизайне и хотел, чтобы основные кнопки моего веб-проекта не были похожи на массу других, возможно неплохих, кнопок. Ранее я уже видел изображение квадратной кнопки со смещенными границами, но у меня никак не хватало времени на создание такой реализации. Итак, несколько недель я пытался выкроить время, чтобы создать это чудо. И ожидания того стоили.

div или не div

Я рассмотрел несколько способов создания кнопки со смещенными границами. Каждый из них позволял мне избежать создания блока-обертки. Но, в конечном итоге, я хотел создать анимацию, при которой кнопка вставала бы четко в рамки установленных границ.

Если Вас устраивает тот факт, что смещенные границы при анимации будут двигаться вместе с кнопкой, достаточно использовать position: absolute; и z-index: -1; для самой кнопки, а псевдо-селектор ::before - для создания смещенных границ кнопки.

Следует помнить, что CSS-эффекты анимации и переходов не будут работать для ::before в таких браузерах, как IE и Safari.

Так же, для создания эффекта смещенных границ можно использовать box-shadow. Но и в этом случае при создании эффектов анимации границы будут смещаться вместе с самой кнопкой.

Решение

Для начала создадим контейнер div, а с помощью position: relative и left установим этот контейнер в нужном нам положении. Меняя значение свойства left контейнер можно смещать по горизонтали, а с помощью свойств top или bottom - по вертикали. Так же позиционировать контейнер можно и манипулируя значением свойства margin:

.primary-button-container {
  position: relative;
  display: block;
  left: 5px;
  width: 90px;
  margin-top: 30px;
  padding: 30px;
  border: 2px solid #EBCBAD;
  box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.25);
}

Теперь перейдем к самой кнопке:

.primary-button {
  display: block;
  height: 58px;
  width: 82px;
  background-color: #EBCBAD;
  border: solid #EBCBAD;
  border-width: 0 10px;
  color: #123440;
  font-size: 18px;
  margin: -37px 0px -25px -37px;
  padding: 15px;
  padding-left: 10px;
}

И, наконец, создадим анимацию:

.primary-button:active {
  transform: translateY(9px) translateX(9px);
}

Если нужно избавиться от появления обводящей линии при выделении объекта (focus outline), добавим:

button:focus {    
   outline: none;    
}

Теперь можно добавить и другие украшения, например background-color.


Спасибо за внимание


По материалам статьи Abbey Perini “CSS Animated Button with Offset Border”.

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.