今回、selectタグを装飾するのは、
スマートフォンサイトのみをターゲットにした、
CSS3「appearance」を使った方法で実装したいと思います。
一部PCでも対応されていますが、まだまだ対応されていないブラウザもある為、
実用的ではないと思います。
PC版で装飾したい場合には、CSSではなくjQueryプラグインで、実装してみてください。
easyselectbox.min.js
https://github.com/kosinix/easyselectbox
HTML
<select name="select" id="list"> <option value="">選択してください</option> <option value="value1">value1</option> <option value="value2">value2</option> <option value="value3">value3</option> </select> <input type="image" class="btn" src="img/btn.gif">
CSS
#list { -webkit-appearance: button; -moz-appearance: button; appearance: button; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; border-radius: 6px; -webkit-border-radius: 6px; -moz-border-radius: 6px; width: 82%; margin-right: 3%; padding: 2%; color: #666; border: none; background:#f1f1f1; cursor: pointer; vertical-align: middle; } .btn { width: 16%; max-width: 44px; vertical-align: middle; }
CSS3プロパティ 参考サイト
appearance
フォームのインターフェースを標準的なUIに変更する
http://www.htmq.com/css3/appearance.shtml
box-sizing
ボックスサイズの算出方法を指定
http://www.htmq.com/css3/box-sizing.shtml
border-radius
要素を丸角にする
http://www.htmq.com/css3/border-radius.shtml
jQuery
ボタンをタッチ(クリック)した時のselectを実行するのは、スクリプト側で制御します。
iphoneの場合、
$('#list').select().focus();
で、セレクトドラムが表示されますが、
Androidでは、フォーカスされるだけで、オプションリストは表示されません。
ではどうするか・・・
フォーカスされた時にclickイベントを起こせば開くのではないか。
そこで、trigger(‘click’)を追加。
$('#list').select().focus().trigger('click');
ですが、これでもオプションリストは開きませんでした。
ネットの海を徘徊していると、同じような方がいらっしゃいました。
http://stackoverflow.com/questions/14756955/jquery-focus-not-working-on-android
このサイトの回答を参考にした所、Androidでも正常にselectが実行されるようになりました。
//Select click処理 var action = 'ontouchstart' in window ? 'touchend' : 'click'; $(".btn").on(action, function() { var dropdown = $('#list').get(0); showDropdown(dropdown); function showDropdown(element) { var event; event = document.createEvent('MouseEvents'); event.initMouseEvent('mousedown', true, true, window); element.dispatchEvent(event); }; return false; });
コメント