セレクトボックスを装飾する
ちょっとリッチなセレクトボックス。
See the Pen 201017_セレクトボックスを装飾する by nekuta (@nekuta) on CodePen.
セレクトボックスのスタイル自体を透明にする
.select {
&-wrap {
position: relative;
width:300px;
height: 50px;
border-radius: 4px;
overflow: hidden;
select {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
}
}
〜中略〜
}
セレクトボックス自体をabsoluteにして、.select-wrapの縦横いっぱいに伸ばし、opacityを0にします。
そうすると.select-wrapをクリックするとセレクトボックスも一緒に発火します。
セレクトボックスの値が変わったらテキストを変更する
このままだとセレクトボックスの値を変更しても、表示されているテキスト(ここでは.select-ttl-txt)をjavascriptで変更します。
セレクトボックスが変更されたらイベントが走る様にしたいので、addEventListenerのchangeを使いました。
let selectWrap = document.getElementsByClassName('select-wrap');
if (0 < selectWrap.length) {
function selectChange(e) {
var _this = e.currentTarget;
var _thisSelectWrap = _this.closest('.select-wrap');
//targetElement.closest(selectors);でtargetElementを含んでいる親要素からselectorsを検索する
var _thisTarget = _thisSelectWrap.getElementsByClassName('select-ttl-txt')[0];
_thisTarget.textContent = _this.value;//テキストを書き換え
}
for (let a = 0; a < selectWrap.length; a++) {
var _target = selectWrap[a].querySelector('select');
//セレクトボックスがchangeされたらselectChange(e)が発火する
_target.addEventListener('change', function (e) {
selectChange(e);
});
}
}