I've used the following code from a question on here to apply custom styling to file upload buttons.
<p id="avatar-upload">
<label for="file" class="custom-file-upload">
Browse Files
</label>
<input type="file" name="file" id="file" />
<input type="submit" name="upload" id="upload" value="<?php esc_attr_e( 'Upload Image', 'buddypress' ); ?>" />
<input type="hidden" name="action" id="action" value="bp_avatar_upload" />
</p>
The css is:
input[type="file"] {
display: none;
}
I can click on this label and it brings up the file upload modal. However when I choose a file and click OK the filename is no longer displayed on the front-end, so the user wouldn't know to click 'Upload Image'. I've tested in Firefox and Chrome with the same result.