1

ここで参照可能: http://web.cs.dal.ca/~selig/serverside/assignment2/

見栄えの良いファイルアップロードボタンを作成しようとしています。通常のデスクトップ ブラウザでは問題なく動作しますが、iOS ではクリックするとボタンの境界線の半径が変更され、基本的に別のボタンになります。

それをカスタマイズするための私の実装は非常に単純です。以下にコードを含めます。基本的に、元のボックスはカスタマイズされたボックスを絶対位置で覆い、幅と高さを設定し、不透明度を 0 に設定します。次に、jQuery を使用してクリック状態をカスタマイズします。

HTML:

    <div class="upload">
        <input type="file" class="file-input">
        <input type="button" value="Browse">
        <span class="filename">No file selected</span>
    </div>

CSS:

.upload {
    position: relative;
    margin: 0 auto 15px auto;

    width: 400px;
    height: 50px;

    background: #fffbed;
    border: 1px solid #efdec4;
    border-radius: 5px;

    -webkit-box-shadow: 0px 2px 4px rgba(236, 229, 199, 0.3), inset 0px 0px 3px 1px rgba(236, 229, 199, 0.5);
    box-shadow: 0px 2px 4px rgba(236, 229, 199, 0.3), inset 0px 0px 3px 1px rgba(236, 229, 199, 0.5);
}

input[type="file"] {
    position: absolute;
    width: 100%;
    height: 100%;

    cursor: pointer;
    moz-opacity: 0;
    opacity: 0;
}

input[type="button"] {
    width: 120px;
    height: 50px;
    float: right;

    border: 1px solid #4b2218;
    border-radius: 5px;
    color: #ffecf7;
    font-size: 1em;
    font-weight: bold;
    text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.4);

    background: #a35a47; /* Old browsers */
    background: -moz-linear-gradient(top,  #a35a47 0%, #a04731 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a35a47), color-stop(100%,#a04731)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top,  #a35a47 0%,#a04731 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top,  #a35a47 0%,#a04731 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top,  #a35a47 0%,#a04731 100%); /* IE10+ */
    background: linear-gradient(to bottom,  #a35a47 0%,#a04731 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a35a47', endColorstr='#a04731',GradientType=0 ); /* IE6-8 */
}
4

1 に答える 1

0

jsFiddle でこれを試した後、ホバー イベントとクリック イベントの jQuery コードが broder-radius の変更の原因であることがわかりました。iPhone/iPod touch を使用している場合、ホバー/クリック イベントを無効にするだけの解決策を思いつきました。これがJavaScriptです:

    $(document).ready(function() {
    $(".upload").hover(
        function() {
            $("input[type='button']").css("background", "#843c2b");
        },
        function() {
            $("input[type='button']").css({
                "background": "#a35a47"
            });
        }
    );

    $(".upload").click(function() {
        $("input[type='button']").css("background", "#683022");
    });
    if(isiPhone()){
     $(".upload").unbind("click").unbind("hover");   
    }
});
function isiPhone(){
if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
   return true;
}
    return false;
}

と jsFiddle: http://jsfiddle.net/SEexe/36/

于 2013-02-01T23:25:00.867 に答える