safari対応のselectデザイン変更方法

ちょっとだるい

サンプル

Document
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link rel="preload" href="https://fonts.googleapis.com/icon?family=Material+Icons" as="style" onload="this.onload=null;this.rel='stylesheet'">
</head>
<style>
.wrap{
    border: 1px solid #999;
    background: #fff;
    position: relative;
}
.wrap::after{
    content: "\e5cf";
    font-family: "material icons";
    text-align: center;
    line-height: 20px;
    color: #111;
    width: 20px;
    height: 20px;
    display: block;
    position: absolute;
    top: 50%;
    right: 0;
    transform: translate(0,-50%);
}
.wrap select{
    width: 100%;
    padding: 1em 0;
    display: block;
    appearance: none;
    border: none;
    background: none;
    color: #111;
    position: relative;
    z-index: 1;
}
</style>
<body>

<div class="wrap">
    <select name="" id="">
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
        <option value="">あああああああああああああ</option>
    </select>
</div>

</body>
</html>

解説

これで解除される。

select{
    appearance: none;
}

解除だけだとこんな感じになる。

PCとぜんぜん違う。背景と文字に色が付いてる。

こっから独自のデザインに変えていくわけだけど、矢印を付けたい場合は頑張る必要がある。selectには疑似要素が使えないので、背景画像をうまいこと配置するか、親要素で囲って、そっちの方で設置する。サンプルみたいに親要素でやったほうが自由度が高いんでおすすめ。

selectの背景を削除、付けたい場合は親要素で色をつける、親要素の疑似要素で矢印を設置して、position:absoluteで位置調整してる場合は疑似要素が手前に来て重なった部分がクリックできないからselectでz-indexを使って手前に配置(z-indexでマイナス値を入れるのは個人的に推奨したくない)。

text-alignとかpaddingとか、selectを好き勝手にやれるんだけど、optionが引っ張られる内容もあるので注意。

コメント

タイトルとURLをコピーしました