jquerycssuploadify

Uploadify button: Style with CSS?


Is it possible to replace the Uploadify button (which is a graphic containing up/over/down states) with a simple CSS-styled button?


Solution

  • I've been able to come up with a working solution to this. Here's the basic outline:

    The flash object will shield the button underneath it from mouseover etc. events; so to get hover effects, you'll need to take a couple of additional steps:

    Putting it all together:

    HTML

    <div class="UploadifyButtonWrapper">
        <a>Upload Files</a>
        <div class="UploadifyObjectWrapper">
           <input type="file" id="Uploadify" name="Uploadify" />
        </div>
    </div>
    

    CSS

    div.UploadifyButtonWrapper{
        position:relative;
    }
    
    /* fake button */
    div.UploadifyButtonWrapper a {
        position:absolute; /* relative to UploadifyButtonWrapper */
        top:0;
        left:0;
        z-index:0;
        display:block;
        float:left;
        border:1px solid gray;
        padding:10px;
        background:silver;
        color:black;
    }
    
    /* pass hover effects to button */
    div.UploadifyButtonWrapper a.Hover {
        background:orange;
        color:white;
    }
    
    /* position flash button above css button */
    div.UploadifyObjectWrapper {
        position:relative;
        z-index:10;
    }
    

    Javascript:

    $("input.Uploadify", self).uploadify({
        ...
        buttonImg: " ",
        wmode: "transparent",
        ...
    });
    var $buttonWrapper = $(".UploadifyButtonWrapper", self);
    var $objectWrapper = $(".UploadifyObjectWrapper", self);
    var $object = $("object", self);
    var $fakeButton = $("a", self);
    var width = $fakeButton.outerWidth();
    var height = $fakeButton.outerHeight();
    $object.attr("width", width).attr("height", height);
    $buttonWrapper.css("width", width + "px").css("height", height + "px")
    $objectWrapper.hover(function() {
        $("a", this).addClass("Hover");
    }, function() {
        $("a", this).removeClass("Hover");
    });