selectのデザインを変更する

selectのデザインを変更したいことがたまにあるのですが、他要素を使って疑似的に表示して、選択した値をJavaScriptを使ってselectに反映するという方法しか知りませんでした。
調べてみるとCSSのみで変更する方法もあるみたいなので、今回はselectのデザイン変更を試してみます。

対応ブラウザ

実装にはappearanceを使用します。
appearanceが対応しているブラウザはこちら。
ベンダープレフィックスが必要なブラウザがほとんどで、IEは11でも対応していません。

change-the-design-of-the-select01

 

selectのデフォルトのスタイル削除

appearance: none;を指定して、selectのデフォルトのスタイルを消してみます。

HTML

<div class="select-wrapper">
	<select name="sample">
		<option value="">選択肢を選んでください</option>
		<option value="サンプルA">サンプルA</option>
		<option value="サンプルB">サンプルB</option>
		<option value="サンプルC">サンプルC</option>
	</select>
</div>

CSS

select {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	width: 200px;
	margin: 0;
	border: 0;
	outline: none;
	padding: 0;
	background: transparent;
}

selectのデフォルトのスタイルを消すデモページ
Firefoxやchromeではスタイルを消す事ができましたが、IEではappearanceが非対応のため、以下のように矢印が残ってしまっています。

change-the-design-of-the-select02

IEでも表示をそろえられるように対応してみます。

CSS

.select-wrapper {
	width: 200px;
	overflow: hidden;
}
select {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	width: 230px;
	margin: 0;
	border: 0;
	outline: none;
	padding: 0;
	background: transparent;
}

selectに指定したい幅を親要素に指定、selectは矢印分くらい大きくwidthを指定して、親要素にoverflow: hidden;を指定して矢印を隠すようにしています。
selectのデフォルトのスタイルを消すデモページ2
これでIEでもselectのデフォルトのスタイルを消すことができました。

selectにスタイルを設定

selectはwidthを大きめに設定してしまっているので、主にselectの親要素に対してスタイルを指定していきます。

CSS

.select-wrapper {
	width: 200px;
	overflow: hidden;
	border: #999999 1px solid;
	border-radius: 5px;
	background: url(arrow.png) right center no-repeat;
}
select {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	width: 230px;
	margin: 0;
	border: 0;
	outline: none;
	padding: 5px;
	background: transparent;
}

paddingだけselectに設定するようにしています。
selectにスタイルを設定のデモページ

これでとりあえず、CSSでのselectのデザイン変更ができました。
 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年10月
 12345
6789101112
13141516171819
20212223242526
2728293031