Я предпочитаю выбирать теги <button><input type="submit" />  Это может быть немного скучно … 
Давайте создадим лучшую кнопку, используя стили CSS3, анимацию и преобразования:
Посмотреть кнопку демонстрации …
HTML
Здесь нет сюрпризов — нам нужен только один тег кнопки:
 <button>Click me!</button>
Мы собираемся применить наши стили к каждой кнопке, но, если вы не хотите этого делать, добавьте класс и нацеливайте его в CSS соответственно.
CSS
Наша кнопка должна хорошо работать в последних версиях браузеров, но при этом изящно ухудшаться в старых приложениях Тем не менее, я собираюсь добавлять префиксы CSS только тогда, когда они абсолютно необходимы. Firefox, Opera и IE10 поддерживают переходы, преобразования и анимацию без префиксов, но нам все еще требуется -webkit- для Chrome и Safari.
Давайте начнем с некоторых основных стилей для форматирования кнопки:
 button
{
	display: block;
	font-size: 1.1em;
	font-weight: bold;
	text-transform: uppercase;
	padding: 10px 15px;
	margin: 20px auto;
	color: #ccc;
	background-color: #555;
	background: -webkit-linear-gradient(#888, #555);
	background: linear-gradient(#888, #555);
	border: 0 none;
	border-radius: 3px;
	text-shadow: 0 -1px 0 #000;
	box-shadow: 0 1px 0 #666, 0 5px 0 #444, 0 6px 6px rgba(0,0,0,0.6);
	cursor: pointer;
  Ничего сложного.  Я использовал довольно общий серый цвет, но вы можете применять любые цвета, которые вам нужны.  Также обратите внимание, что background-color  Я также установил курсор на указатель — я никогда не понимал, почему браузеры не делают этого по умолчанию? 
  Box-shadow — это самое интересное свойство: box-shadow: 0 1px 0 #666, 0 5px 0 #444, 0 6px 6px rgba(0,0,0,0.6)  Это определяет край кнопки, 5px «глубину» и легкую тень вокруг нее. 
Мы завершаем блок, заявляя, что мы хотим, чтобы эффекты перехода применялись к каждому стилю при возникновении события зависания или фокуса. Требуются альтернативы без префиксов и -webkit:
 -webkit-transition: all 150ms ease;
	transition: all 150ms ease;
}
  В следующем блоке мы определим стили наведения и фокусировки.  Это определяет pulsate 
 button:hover, button:focus
{
	-webkit-animation: pulsate 1.2s linear infinite;
	animation: pulsate 1.2s linear infinite;
}
@-webkit-keyframes pulsate
{
	0%   { color: #ddd; text-shadow: 0 -1px 0 #000; }
	50%  { color: #fff; text-shadow: 0 -1px 0 #444, 0 0 5px #ffd, 0 0 8px #fff; }
	100% { color: #ddd; text-shadow: 0 -1px 0 #000; }
}
		
@keyframes pulsate
{
	0%   { color: #ddd; text-shadow: 0 -1px 0 #000; }
	50%  { color: #fff; text-shadow: 0 -1px 0 #444, 0 0 5px #ffd, 0 0 8px #fff; }
	100% { color: #ddd; text-shadow: 0 -1px 0 #000; }
}
Firefox, Chrome и Safari не требуют определения 0% и 100%, но IE10 не может анимировать тени текста, если мы их не используем. Для меня это звучит как ошибка браузера — запомните это.
Наконец, мы устанавливаем активное состояние кнопки:
 button:active
{
	color: #fff;
	text-shadow: 0 -1px 0 #444, 0 0 5px #ffd, 0 0 8px #fff;
	box-shadow: 0 1px 0 #666, 0 2px 0 #444, 0 2px 2px rgba(0,0,0,0.9);
	-webkit-transform: translateY(3px);
	transform: translateY(3px);
	-webkit-animation: none;
	animation: none;
}
Это выполняет ряд действий:
- анимация выключена, и текст переведен в состояние «полностью светящийся»
 - кнопка сдвинута на 3 пикселя с помощью translateY
 -   
box-shadowПоэтому он был уменьшен с 5px до 2px, но при переводе 3px создается впечатление, что кнопка утопила в страницу. - внешняя тень также уменьшена, чтобы создать впечатление, что кнопка находится ниже.
 
Наша кнопка завершена:
Посмотреть кнопку демонстрации …
Код работает как положено во всех современных браузерах. Единственная проблема, которую я обнаружил, была в Opera — она проигрывает пульсирующую анимацию только один раз? Но они скоро переходят на WebKit , так что давайте не будем сильно беспокоиться…
Пожалуйста, используйте код, как вам нравится!
