webページを作成していて、type="button"やtype="submit"などのボタン型のinput要素に背景色や角丸をCSSで指定しても、iOSのブラウザ(SafariやChromeなど)では、webkitのappearanceが「push-button」に固定されているのか、CSSの指定は無視される。その結果、「iOSが勝手に変更してしまう」という状態になる。
具体的には
●角丸のradiusを小さく、または角丸無しに指定したとしても、ボタンの左右が半円に見えるほどの角丸がかかる。
iOSのブラウザ(SafariやChrome、その他)でのみでおきる現象らしい。Mac OSのappearanceは、iOSとよく似ているが、同じようになることはない。
この現象に最初に気づいた頃(iOS 5)はバグかと思ったが、それから現在のiOS 8まで一貫していることから、それなりの理由のある仕様なのかもしれない。
サンプル画像:iOSデバイスで見ると、角の丸みが強く濃い色でも薄めのグラデーションになる。画像のiOSはiPad mini2(iOS 8.0.2)、MacOSはMacbook Air(MacOS 10.7.5)など。
input.btn-blue1 { ----(略)---- background: #0000cc; color: #fff; border: 1px solid #0000cc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; }
CSSを何も指定していないボタン型input要素の比較
webkitのappearanceによるデフォルトのinput要素のボタン型形状。
iOSの形状は、古めのMacOSのもの(MacOS 10.6.8まで)に近い。MacOS 10.7からは丸みが少ないものになっている。YOSEMITEでも同様。
<input type="button" value="ボタン" /> <input type="submit" value="サブミット" /> <input type="reset" value="リセット" />
いろいろ試した結果、背景に単色の色コードを指定した場合にのみ、この現象が起こることが分かった。
対策まとめ
対策(1)可能ならば、input[type="button"]などの問題の要素をbutton要素に置き換える。button要素なら、iOS-webkitのappearanceの影響を受けない。
button { ----(略)---- background: #0000cc; color: #fff; border: 1px solid #0000cc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; }
対策(2)問題になるinput要素のappearanceを無効にする(-webkit-appearance: none; を追加)。またはappearanceをbuttonにする(-webkit-appearance: button を追加)。
CSSソース:
input.btn-blue2 { ----(略)---- background: #0000cc; color: #fff; border: 1px solid #0000cc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-appearance: none; ----または---- -webkit-appearance: button; }
対策(3)背景色を指定する際、単色の場合だけ「iOSが勝手に変更してしまう」状態になるので、「-webkit-gradient」を使って、グラデーションの指定にする。色が変化するグラデーションはそのまま使える。単色にしたい場合は、グラデーションの色の変化を同色にする。
input.btn-blue5 { ----(略)---- background: -moz-linear-gradient(top, #3378e7, #164fac 50%, #143771); background: -webkit-gradient(linear, left top, left bottom, from(#3378e7), color-stop(0.5, #164fac), to(#143771)); background: -o-linear-gradient(top, #3378e7, #164fac 50%, #143771); background: linear-gradient(top, #3378e7, #164fac 50%, #143771); color: #fff; border: 1px solid #0000cc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; }
対策(4)背景色を指定する際、色コードではなく、外部のリンク画像にする。フラットにするなら、その色のみの単色で塗りつぶした画像(サイズは極小さくて構わない)を使用する。
input.btn-blue3 { ----(略)---- background: #0000cc url(img/bg-mediumblue2.png); color: #fff; border: 1px solid #0000cc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; }
蛇足
span要素に「-webkit-appearance: push-button」や「-webkit-appearance: button」を指定したらどうなるか試してみた。
結果は、iOSでは、なにもおきない。ただテキストが表示されるだけ。
0 件のコメント:
コメントを投稿