Кнопки как в Gmail и Google Reader

Кнопки как в Gmail и Google Reader

Привет! Сегодня мы посмотрим как делаются вот эти симпатичные кнопки из некоторых веб-продуктов Гугла.

Чего в них хорошего? Они требуют мало кода, везде показываются одинаково, вы легко можете поменять оформление кнопок и при желании можете сделать их без картинок.

Сама реализация таких кнопок пренадлежит Дугласу Боуману. На момент написания статьи Дуглас сделал уже 3 версии таких кнопок, одна из которых вообще без использования картинок, только HTML и CSS.

Сегодня мы рассмотрим только 2 последние реализации и начнем с «картиночной» версии.

Версия с картинками

Ну, картинка, по правде сказать, всего одна — это градиент кнопки. Если градиент не принципиален, можете делать и без картинки. Хотите с градиентом и без картинки — листайте ниже ;-)

Вообще говоря, в нас будет 4 вида кнопок — левая, правая, центральная и одиночная.

HTML

У нас будет 2 версии кнопок — одна с использованием <button>,  а вторая — <a>. Там, где возможно, используйте первый вариант — он более семантичен (ссылки это ссылки).

В обоих случаях мы будем использовать вложенные <span>:

<a class="btn" href="#"><span><span>кнопка-ссылка</span></span></a>
<button class="btn" type="button"><span><span>кнопка-кнопка</span></span></button>

CSS

.btn {
display: inline-block;
background: none;
margin: 0;
padding: 3px 0;
border-width: 0;
overflow: visible;
text-decoration: none;
color: #333;
}

* html button.btn {
padding-bottom: 1px;
}

/* Тут у нас хак для Gecko браузеров,
которые добавляют дополнительные 3px
справа и слева от тега button*/
html:not([lang*=""]) button.btn {
margin: 0 -3px;
}

.btn span {
background: #ddd url(img/bg-button.gif) repeat-x 0 0;
margin: 0;
padding: 3px 0;
border-left: 1px solid #bbb;
border-right: 1px solid #aaa;
}

* html .btn span {
padding-top: 0;
}

.btn span span {
position: relative;
padding: 3px .4em;
border-width: 0;
border-top: 1px solid #bbb;
border-bottom: 1px solid #aaa;
}

/* эти классы только для кнопок лево-центр-право */
button.pill-l span {
border-right-width: 0;
}

button.pill-l span span {
border-right:1px solid #bbb;
}

button.pill-c span {
border-right-style:none;
border-left-color:#fff;
}

button.pill-c span span {
border-right:1px solid #bbb;
}

button.pill-r span {
border-left-color:#fff;
}

/* нужны только если у вас разные стили для хувера и актива */
.btn:hover span,
.btn:hover span span,
.btn:focus span,
.btn:focus span span {
cursor: pointer;
border-color: #9cf !important;
color: #000;
}

.btn:active span {
background-position: 0 -400px;
outline: none;
}

.btn:focus,
.btn:active {
outline: none;
}

/* стиль для главной кнопки, например кнопка сохранения */
.primary {
font-weight: bold;
color: #000;
}

Будьте внимательны, хувер не будет работать для тега <button> в IE меньше 7 версии, придется использовать JavaScript для mouseover.

Вот, все готово, смотрим пример.

Версия без картинок

Расскажу только принцип, реализацию вы и сами сможете посмотреть в исходниках примера.

Смысл в том, что помимо двух <span> мы добавляем внутрь еще <u> и <b>. С помощью них мы эмулируем градиент. Но такая реализация пока что хорошо работает только в Firefox и Safari, но не работает в IE. Теперь идем смотреть пример.

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 20

Зоя
Как пишет автор статьи на stopdesign, необходимо помнить, что в этой версии кнопок не реализованы разные состояния (типа resting, toggled-on, disabled), а также accessebility условия. Ну и еще куча всяких деталей. Но в целом кнопка удалась.
Grin
Ну так все эти вкусности уже можно и самому добавить, ведь так?)
#
Grin
Антон
В примере кода потеряли
#
Антон
Антон
/button
#
Антон
Grin
Спасибо, поправил
#
Grin
Balvardo
Единственный косяк который я заметил - в фф вокруг кнопки рисуется рамочка dotted... У гугла такого нет. Как бы это исправить? А так спасибо.
Grin
Balvardo, это правиться через outline: none;
#
Grin
май
http://upfilm.net/ у меня тоже так было Balvardo, Grin спасибо помогло
#
май
markedone
спасибо грин помогло
Карл
Полезная штука.
Shaman
Из примера: http://vremenno.net/examples/google-buttons/ ссылка "Вернуться к статье." ведет куда-то не туда.
#
Shaman
traveller
Вообще, очень нехорошо выкладывать один код, а в примере использовать другой... Это ни что иное как дезинформация.
Убирая "font:100%/1.2 Arial,Sans-serif;" у класса "btn" вы меняете отображение в ИЕ 6 и 7. Лень проверить было что ли? Халтурщики.
#
traveller
twiseetut
полезная.. мне очень поможет! сасибо за статью
Олег
Полезная статья спасибо!
music
Спасибо за обе версии!
Softwayer
Насчет Disabled - сделайте opacity:0.5, и кнопка станет на 50% прозрачной! То есть тусклой, если фон - белый или серый.
#
Softwayer
Александр
Красивенькие кнопочки, я себе возьму на заметку!
BassEast
статья то конечно хорошая, но я её считаю "эмбриональной".., почему бы не довести до ума, чтобы и в IE отображалось здоровски??
Мария
Спасибо за статью, интересная информация для меня.
oEN
extJS в помощь
#
oEN

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku