[CSS]さまざまなバリエーションを簡単に利用できる美しいデザインのボタンを実装するチュートリアル

画像は使用せずに、繊細なパターンとグラデーションで美しいボタンをスタイルし、サイズやカラーなどさまざまなバリエーションを簡単に利用できるように実装するスタイルシートのチュートリアルを紹介します。

サイトのキャプチャ

CSS3 patterned buttons

デモ

デモはCSS3を使用しているため、Firefox, Chrome, Safari, IE9+でご覧ください。

デモのキャプチャ

デモページ

実装:ベースとなるボタン

まずはベースとなるボタンを実装してみましょう。

ボタンのキャプチャ

ベースとなるボタン

HTML

マークアップは非常にシンプルです。

<a href="" class="button">Button</a>

または、button要素でも構いません。

<button class="button">Button</button>

CSS

CSS3を使って、ちょっとリッチにスタイルしてみましょう。

.button{
	display: inline-block;
	*display: inline;
	zoom: 1;
	padding: 6px 20px;
	margin: 0;
	cursor: pointer;
	border: 1px solid #bbb;
	overflow: visible;
	font: bold 13px arial, helvetica, sans-serif;
	text-decoration: none;
	white-space: nowrap;
	color: #555;
	background-color: #ddd;
	background-image: linear-gradient(top, rgba(255,255,255,1),
								rgba(255,255,255,0)),
								url(data:image/png;base64,iVBORw0KGg[...]QmCC);
	transition: background-color .2s ease-out;
	background-clip: padding-box; /* Fix bleeding */
	border-radius: 3px;
	box-shadow: 0 1px 0 rgba(0, 0, 0, .3),
							0 2px 2px -1px rgba(0, 0, 0, .5),
							0 1px 0 rgba(255, 255, 255, .3) inset;
	text-shadow: 0 1px 0 rgba(255,255,255, .9);
}

.button:hover{
	background-color: #eee;
	color: #555;
}

.button:active{
	background: #e9e9e9;
	position: relative;
	top: 1px;
	text-shadow: none;
	box-shadow: 0 1px 1px rgba(0, 0, 0, .3) inset;
	outline: none;
}

※:activeに「outline: none;」を加えています。

実装:サイズの異なるボタン

ちょっと目立たせたいボタン用にサイズを大きくするのは、非常に有効です。class名を変更するだけで簡単にボタンのサイズを変更できるようにします。

ボタンのキャプチャ

サイズの異なるボタン

HTML

サイズの小さいボタンにするには、「small」を加えます。

<button class="small button">Button</button>

サイズの大きいボタンにするには、「big」を加えます。

<button class="large button">Button</button>

CSS

/* より小さいサイズのボタン */
.button.small{
  padding: 4px 12px;
}

/* より大きいサイズのボタン */
.button.large{
  padding: 12px 30px;
  text-transform: uppercase;
}

.button.large:active{
  top: 2px;
}

実装:カラーの異なるボタン

ボタンのアクションをカラーで補足するのも非常に効果的です。注意を喚起するレッド、成功のブルーなどを設定してみましょう。

ボタンのキャプチャ

カラーの異なるボタン

HTML

カラーを定義する「color」と変更するカラーをclassに加えます。

<button class="button">Button</button>
<button class="color red button">Button</button>
<button class="color green button">Button</button>
<button class="color blue button">Button</button>

CSS

「color」には共通で適用するスタイルを定義し、レッド・ブルーなど各カラーを定義します。

.button.color{
  color: #fff;
  text-shadow: 0 1px 0 rgba(0,0,0,.2);
  background-image: linear-gradient(top, rgba(255,255,255,.3), 
  					 rgba(255,255,255,0)),
                    url(data:image/png;base64,iVBORw0KGg[...]QmCC);
}

/* */

.button.green{
  background-color: #57a957;
  border-color: #57a957;
}

.button.green:hover{
  background-color: #62c462;
}

.button.green:active{
  background: #57a957;
}

/* */

.button.red{
  background-color: #c43c35;
  border-color: #c43c35;
}

.button.red:hover{
  background-color: #ee5f5b;
}

.button.red:active{
  background: #c43c35;
}

/* */

.button.blue{
  background-color: #269CE9;
  border-color: #269CE9;
}

.button.blue:hover{
  background-color: #70B9E8;
}

.button.blue:active{
  background: #269CE9;
}

実装:disabled時のボタン

button要素を使用する場合に備え、disabledのスタイルも定義しましょう。

ボタンのキャプチャ

disabled時のボタン

HTML

HTMLはカラーの異なるボタンをベースに「disabled」にします。

<button class="button" disabled>Button</button>
<button class="color red button" disabled>Button</button>
<button class="color green button" disabled>Button</button>
<button class="color blue button" disabled>Button</button>

CSS

.button[disabled], .button[disabled]:hover, .button[disabled]:active{
  border-color: #eaeaea;
  background: #fafafa;
  cursor: default;
  position: static;
  color: #999;
  /* Usually, !important should be avoided but here it's really needed :) */
  box-shadow: none !important;
  text-shadow: none !important;
}

.green[disabled], .green[disabled]:hover, .green[disabled]:active{
  border-color: #57A957;
  background: #57A957;
  color: #D2FFD2;
}

.red[disabled], .red[disabled]:hover, .red[disabled]:active{
  border-color: #C43C35;
  background: #C43C35;
  color: #FFD3D3;
}

.blue[disabled], .blue[disabled]:hover, .blue[disabled]:active{
  border-color: #269CE9;
  background: #269CE9;
  color: #93D5FF;
}

実装:グループ化したボタン

類似したアクションボタンがある場合は、グループ化する必要もあるでしょう。各ボタンをリスト要素でグループ化してみましょう。

ボタンのキャプチャ

グループ化したボタン

HTML

各button要素をリスト要素でグループ化します。

<ul class="button-group">
	<li><button class="button">Button</button></li>
	<li><button class="button">Button</button></li>
	<li><button class="button">Button</button></li>
	<li><button class="button">Button</button></li>
</ul>

CSS

.button-group,
.button-group li{
  display: inline-block;
  *display: inline;
  zoom: 1;
}

.button-group{
  font-size: 0; /* Inline block elements gap - fix */
  margin: 0;
  padding: 0;
  background: rgba(0, 0, 0, .04);
  border-bottom: 1px solid rgba(0, 0, 0, .07);
  padding: 7px;
  border-radius: 7px; 
}

.button-group li{
  margin-right: -1px; /* Overlap each right button border */
}

.button-group .button{
  font-size: 13px; /* Set the font size, different from inherited 0 */
  border-radius: 0; 
}

.button-group .button:active{
  box-shadow: 0 0 1px rgba(0, 0, 0, .2) inset,
              5px 0 5px -3px rgba(0, 0, 0, .2) inset,
              -5px 0 5px -3px rgba(0, 0, 0, .2) inset;   
}

.button-group li:first-child .button{
  border-radius: 3px 0 0 3px;
}

.button-group li:first-child .button:active{
  box-shadow: 0 0 1px rgba(0, 0, 0, .2) inset,
              -5px 0 5px -3px rgba(0, 0, 0, .2) inset;
}

.button-group li:last-child .button{
  border-radius: 0 3px 3px 0;
}

.button-group li:last-child .button:active{
  box-shadow: 0 0 1px rgba(0, 0, 0, .2) inset,
              5px 0 5px -3px rgba(0, 0, 0, .2) inset;
}

top of page

©2017 coliss