cssと画像のみ!フォームの選択項目を装飾する方法

以前ラジオボタン、チェックボックス、セレクトボックスの用途についてメモしました。同じラジオボタンでもブラウザによってデザインが多少違うのも確認出来たかと思います。がしかし、最近のサイトはみんなおしゃれに装飾されていますよね。クリックやタップし易いように大きくなっていたり、色がついて分かり易くしてあったりと。
ウチのサイトもそれぞれサイトにあったデザインをするようになり、実装し始めた次第であります。ブラウザ対応が必要な部分もありますが、サイトのデザインに馴染んだボタンを設置できるのでぜひともマスターしたいところなのです。
装飾にはいろいろなやり方がありますが、今回は「オリジナル画像」を使っての装飾にラッスンゴレライしてみたいとおもいます(`・ω・´)
きれいに装飾してリッチなデザインにしてやりましょう!

各主要ブラウザでのデフォルト表示

何も指定しないとこんな見た目になっております。
図はそれぞれにcssで幅50px高さ50pxを指定してあります。その場合上の図のような表示になります。
むしろcssでデフォルト表示をそのまま大きくするというという手もあったのか…クリックはし易いけど、デザイン的にはう~んという感じですよね◟( ˘•ω•˘ )◞

css
input[type="radio"] {
	width:50px;
	height:50px;
}
input[type="checkbox"] {
	width:50px;
	height:50px;
}
select {
	height:50px;
}

お気づきかと思いますが、図のようにFirefoxではラジオボタンとチェックボックスに思い通りの指定が効きません。ということで、オリジナル画像を指定する方法でちょっとリッチな感じにしてみたいと思います。

ラジオボタン・チェックボックスの場合

隣接セレクターを使用し、条件によってlabelの背景に別の画像を指定する

サンプル
html













1)input自体を消す

まずデフォルトの表示をdisplay:noneで消します。

css
/* デフォルト表示を消す */
input[type="radio"],
input[type="checkbox"] {
	display:none;
}

2)背景画像を指定

次に隣接セレクタを使用し、label要素に背景画像を指定します。

css
/* ラジオボタン 未選択時の背景指定 */
input[type="radio"] + label {
	padding:3px 0 3px 30px;
	background:url(ラジオボタンの画像.png) no-repeat left center;
	background-size:27px 27px;
	cursor:pointer;
}

/* ラジオボタン 選択時の背景指定 */
input[type="radio"]:checked + label {
	background:url(ラジオボタンチェック時の画像.png) no-repeat left center;
	background-size:27px 27px;
	cursor:pointer;
}


/* チェックボックス 未選択時の背景指定 */
input[type="checkbox"] + label {
	padding:3px 0 3px 30px;
	background:url(チェックボックスの画像.png) no-repeat left center;
	background-size:27px 27px;
	cursor:pointer;
}

/* チェックボックス 選択時の背景指定 */
input[type="checkbox"]:checked + label {
	background:url(チェックボックスチェック時の画像.png) no-repeat left center;
	background-size:27px 27px;
	cursor:pointer;
}

長いですがこのような指定をしてあげるとサンプルのようにオリジナル画像を指定することができます。
そしてなにやら見慣れない記号「+」、これが隣接セレクタと呼ばれるものです!

隣接セレクタとは

セレクタを + で区切ると、同じ階層にある要素同士で、 ある要素の直後に隣接している要素を対象にスタイルを適用することができます。

ラジオボタンの例でいうと以下のようになります。

html


css
input[type="radio"] + label {
	background-image:url(ラジオボタンの画像.png)
}

この指定を日本語にすると
「ラジオボタンのすぐ後ろにあるlabelの背景に、ラジオボタンの画像を指定する」という意味になります。

つまり隣接セレクタを使うと、cssだけでラジオボタンのチェックが入った時、外れた時、それぞれに別の背景画像を指定できるのです!
使いどころがなかなか想像しにくいですが、今回のような同階層にある要素に対し、条件によって指定を分けたい時に使えるのではないでしょうか。 ※事例がほしいですよね、いつかまとめたいとおもいますw

セレクトボックスの場合

appearance属性を使い、selectの背景に画像を指定する

※IEはappearance属性が効かないため、IEの時はデフォルト表示されるようにします。

サンプル
html

1)矢印を消す

まずデフォルトで表示される右の三角をappearance属性を使って消してしまいます。

appearance属性とは

appearanceプロパティは、ユーザーが利用するプラットフォームに応じて、 要素がその環境における標準的なUI(ユーザーインターフェース)のような外観になるよう指定する際に使用します。

appearance属性を簡単に説明すると、そのセレクタが持つデフォルトの表示を別のセレクタのデフォルト表示に見た目を変えられる指定です。
今回のようにappearance:noneでselectの右にでる▼マークを一度非表示にして装飾をしやすくするなど、主に装飾する際に使われるんだと思います。selectにappearance:radioを指定して、セレクトなのに見た目がラジオボタンなんて変な指定も可能ですw

ということで以下の指定をします。

css
select {
	-webkit-appearance:none;
    -moz-appearance:none;
    appearance:none;
}

Firefoxにも適用させるためには以下も指定する必要があるようです。
そもそも昔はベンダープレフィックスだけで効いていたのですが、いつからか効かなくなってしまったようです。(Firefox31からという噂)

css ※Firefox用
select {
	text-indent:.01px; /* Firefox用 */
    text-overflow:""; /* Firefox用 */
}

2)オリジナル画像を背景に指定する

ということで、Firefoxまで対応したcssと、背景画像を指定したcssがこちらです。

css
select {
	/* 矢印を消す */
	-webkit-appearance:none;
    -moz-appearance:none;
		text-indent: .01px; /* Firefox用 */
    	text-overflow: ""; /* Firefox用 */
    appearance:none;
    
	/* 背景画像の指定 */
	width:150px;
	height:50px;
	border:3px solid #CCC;
	border-radius:8px;
	padding-right:30px;
	background-color:#FFF;
	background-image:url(背景画像.gif);
	background-repeat:no-repeat;
	background-size:25px 54px;
	background-position:right center;
	cursor:pointer;
}
IE未対応なので、IEの時はbackground-image:none;にする指定(IE10以上対応)
/* IE11,IE10 */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
.formSample select:not(:target) {
	padding-right:0;
	background-image:none;
}
}
※IE9のハックが上手いこといかず断念…IEのハックについていつかまとめますw

これでサンプルのような見た目になるはず…セレクトに少しデザイン性を持たせることができました!IE対応していないのが残念。

おわりに

どれも一から書くのはめんどくさいので、cssの指定の仕方を覚えられなくとも、htmlだけ覚えておけばcssはコピペでOKな気がします!
ポイントとしては、デフォルトの表示を消し、代わりに背景に画像を置いてあげるといった感じです。残念ながらセレクトに使用したappearance属性はIEが未対応なのですが、スマホサイトにはばっちり適用できます!
ぜひサイトにあったデザインを適用させてスーパーリッチなサイトを目指したいものです。

まいまい
この記事は
まいまいが書きました。
入社2013年
出身地横浜
スキル時計集め、車の運転、ゲーム、寝ること

今日のひとこと:「無重力ヨガ」というのが気になります!

サイト内検索
TOP