[CSS]フォームのselect要素の特徴を把握し、各ブラウザで一貫して美しく実装するスタイルシート -select-css
Post on:2019年2月22日
フォームをスタイルのが苦手という人も少なくないと思います。中でもselect要素はブラウザのデフォルトが非常に使いにくく、スタイルするのに知識が必要です。
フォームのselect要素の特徴を把握し、各ブラウザで一貫して美しく実装するスタイルシートを紹介します。
select-cssの特徴
select-cssは、デスクトップ・スマホの各ブラウザで一貫して美しく見せるスタイルシートを適用します。IE 9以前など、一部のブラウザでは、アイコンのデザインはサポートされていませんが、コントロール可能で通常の目的には十分に適しています。
select-cssで実装したselect要素の各ブラウザでの表示
select-cssのデモ
デモページでは、select-cssを適用したselect要素を実際のブラウザで試せます。
select-cssの使い方
Step 1: 外部ファイル
当スタイルシートを外部ファイルとして記述します。
1 2 3 4 |
<head> ... <link rel="stylesheet" href="select-css.css"> </head> |
Step 2: HTML
select要素に「.select-css」を加えるだけで、完了です。
1 2 3 4 5 6 7 |
<select class="select-css"> <option>セレクト要素</option> <option>アイテム</option> <option>アイテム</option> <option>アイテム</option> <option>アイテム</option> </select> |
select-css.cssの中身
select-css.cssの中身は、下記の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
.select-css { display: block; font-size: 16px; font-family: sans-serif; font-weight: 700; color: #444; line-height: 1.3; padding: .6em 1.4em .5em .8em; width: 100%; max-width: 100%; box-sizing: border-box; margin: 0; border: 1px solid #aaa; box-shadow: 0 1px 0 1px rgba(0,0,0,.04); border-radius: .5em; -moz-appearance: none; -webkit-appearance: none; appearance: none; background-color: #fff; background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E'), linear-gradient(to bottom, #ffffff 0%,#e5e5e5 100%); background-repeat: no-repeat, repeat; background-position: right .7em top 50%, 0 0; background-size: .65em auto, 100%; } .select-css::-ms-expand { display: none; } .select-css:hover { border-color: #888; } .select-css:focus { border-color: #aaa; box-shadow: 0 0 1px 3px rgba(59, 153, 252, .7); box-shadow: 0 0 0 3px -moz-mac-focusring; color: #222; outline: none; } .select-css option { font-weight:normal; } |
select-css.cssの解説
CSSはそのまま使用しても問題ありませんが、それを編集するのであれば、正しく見えるようにするためのいくつかのプロパティと値を知っておくとよいでしょう。
- select要素はデフォルトで「display: block;」に設定されていますが、ラベルと一緒に並べる時は「display: inline-block; width: auto;」に変更してください。
- select要素の背景は2つの背景画像で実装されています。1つ目はSVGアイコン(データURIとしてインライン)、2つ目は線形グラデーションです。これらは、外部画像にすることもできます。
アイコン画像を変更する場合は、そのサイズが「background-size: .65em auto, 100%;」で定義されていることに注意してください。位置は「background-position: right .7em top 50%, 0 0;」で定義されています。
サイズを変更した場合は、select要素のテキストと重ならないように右寄せにすることを勧めます。ただし、IE9以前では矢印は表示されないため、ブラウザの矢印も表示されません。デフォルトの矢印はpaddingの左に表示されるため、大きな値にしないでください。IE9以前で矢印が離されてしまいます。 - 線形グラデーションの背景は、そのままにしておくことが重要です。なぜなら、背景の存在はIE9以前でbackgroundプロパティを認識するのを妨げ、その結果としてネイティブのものと一緒にカスタムアイコンを表示しないからです。
- appearanceプロパティは、select要素のデフォルトのスタイルを取り除くために重要です。
- 「font-size: 16px;」は、iOSのSafariでズームインでレイアウトを拡大するので、重要です。一般的に、この振る舞いは厄介なため、selectに16pxを定義して避けます。
- .select-css optionは、option要素がselectボタンの太字フォントを継承しないようにします。
- Styled Single Selectsにあるように、select要素に背景色を定義します。ここで使用したように背景画像ではありませんが、option要素が背景色も継承するため、問題が発生する可能性があります。そのため、それを避けてください。
- .select-css::-ms-expandはIE11とIE10にメニューアイコンの疑似要素を隠すように指示するので、その後にカスタムアイコンを表示できます。
このアイデアをくれたJelmer de Maatに感謝します。
sponsors