CSS

3D кнопки на CSS



Исходник: demo_1470.zip

Разметка HTML

Для навигационной панели используем неупорядоченный список с тегом <nav>:

<nav>
    <ul class="nav">
        <li><a href="#" class="icon-home"></a></li>
        <li><a href="#" class="icon-cog"></a></li>
        <li><a href="#" class="icon-cw"></a></li>
        <li><a href="#" class="icon-location"></a></li>
    </ul>
</nav>


CSS для создания иконок

Для создания иконок будем использовать специальный шрифт:

@font-face {
  font-family: 'fontello';
  src: url('../fonts/fontello.eot');
  src: url('../fonts/fontello.eot?#iefix') format('embedded-opentype'),
       url('../fonts/fontello.woff') format('woff'),
       url('../fonts/fontello.ttf') format('truetype'),
       url('../fonts/fontello.svg#fontello') format('svg');
  font-weight: normal; font-style: normal;
}
 
[class*="icon-"] {
  font-family: 'fontello';
  font-style: normal;
  font-size: 3em;
  speak: none;
}

.icon-home:after { content: "\2302"; }
.icon-cog:after { content: "\2699"; }
.icon-cw:after { content: "\27f3"; }
.icon-location:after { content: "\e724"; }


CSS для кнопок

Кнопки выравниваются горизонтально с помощью свойства inline-block для пунктов списка. Мы сдвигаем их плотно с помощью отрицательного значения для поля.

.nav {
  list-style: none;
  text-align: center;
}

.nav li {
  position: relative;
  display: inline-block;
  margin-right: -4px;
}


Объемность для кнопок получается с помощью небольшого градиента и формирования выступа парой свойств box-shadows (одного для обычной тени и другого - для внутренней). Ширина и высота кнопок одинаковая для создания квадрата, который превращается в круг с помощью свойства border-radius. Значение свойства line-height равно высоте, а text-align установлено на выравнивание по центру, поэтому иконки центрированы горизонтально и вертикально.

.nav a {
  display: block;
  background-color: #f7f7f7;
  background-image: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#e7e7e7));
  background-image: -webkit-linear-gradient(top, #f7f7f7, #e7e7e7);
  background-image: -moz-linear-gradient(top, #f7f7f7, #e7e7e7);
  background-image: -ms-linear-gradient(top, #f7f7f7, #e7e7e7);
  background-image: -o-linear-gradient(top, #f7f7f7, #e7e7e7);
  color: #a7a7a7;
  margin: 36px;
  width: 144px;
  height: 144px;
  position: relative;
  text-align: center;
  line-height: 144px;
  border-radius: 50%;
  box-shadow: 0px 3px 8px #aaa, inset 0px 2px 3px #fff;
}


Можно придать кнопке плоский вид для состояния :hover, чтобы имитировать нажатие.

.nav a:hover {
  text-decoration: none;
  color: #555;
  background: #f5f5f5;
}


Теперь наши кнопки будут выглядеть так:



Отлично, но нужно двигаться дальше.

Теперь воспользуемся псевдо-элементами для формирования дополнительных эффектов. Для формирования горизонтальной выгравированной линии задействуем псевдо-селектор :before для пунктов списка. С помощью свойства z-index можно поместить его ниже всех остальных элементов. Двойная рамка создает линии отличный вдавленный вид. А отрицательное значение полей (установленное ранее для пунктов списка) позволяет сделать линию сплошной. Также воспользуемся преимуществом абсолютного позиционирования для центрирования линии.

.nav li:before {
  content: "";
  display: block;
  border-top: 1px solid #ddd;
  border-bottom: 1px solid #fff;
  width: 100%;
  height: 1px;
  position: absolute;
  top: 50%;
  z-index: -1;
}


Для придания дополнительного объема создадим обводку вокруг каждой кнопки. Также воспользуемся псевдо-элементом.

.nav a:before {
  content: "";
  display: block;
  background: #fff;
  border-top: 2px solid #ddd;
  position: absolute;
  top: -18px;
  left: -18px;
  bottom: -18px;
  right: -18px;
  z-index: -1;
  border-radius: 50%;
  box-shadow: inset 0px 8px 48px #ddd;
}


Размер обводки (немного больше самой кнопки) получается с помощью абсолютного позиционирования псевдо-элемента позади кнопки и растягивания его с помощью отрицательных значений положения (top/bottom/left/right). 3D вид получается с помощью свойства border и внутренней тени box-shadow.



Поддержка в браузерах

Данные кнопки используют CSS3 и несколько псевдо-элементов из CSS 2.1. Последние версии браузеров Safari, Chrome, Opera, или Firefox выводят их без искажений. IE 8 не поддерживает CSS3, и внешний вид несколько изменяется:

Теги:
3D, кнопки
Добавлено: 25 Февраля 2015 21:05:14 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...