2011-09-26 17 views
17

Ho codice CSS che in realtà non funziona sul browser WebKit, come Safari e ChromeIl cursore: proprietà puntatore non si applica ai file di pulsanti di upload nei browser Webkit

se si vuole esempio vivo qui è http://jsfiddle.net/mnjKX/1/

Ho questo codice CSS

.file-wrapper { 
    cursor: pointer; 
    display: inline-block; 
    overflow: hidden; 
    position: relative; 
} 
.file-wrapper input { 
    cursor: pointer; 
    font-size: 100px; 
    height: 100%; 
    filter: alpha(opacity=1); 
    -moz-opacity: 0.01; 
    opacity: 0.01; 
    position: absolute; 
    right: 0; 
    top: 0; 
} 
.file-wrapper .button { 
    background: #79130e; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px; 
    border-radius: 5px; 
    color: #fff; 
    cursor: pointer; 
    display: inline-block; 
    font-size: 11px; 
    font-weight: bold; 
    margin-right: 5px; 
    padding: 4px 18px; 
    text-transform: uppercase; 
} 

e questo codice HTML:

<span class="file-wrapper"> 
    <input type="file" name="photo" id="photo" /> 
    <span class="button">Choose a Photo</span> 
</span> 

questo codice mostra il tag del file di input nascosto, il problema qui è che il cursore: il puntatore non funziona sui browser webkit,

come posso risolverlo o bypassarlo/sorpassarlo?

+0

'cursor: pointer' sta funzionando bene qui. – Quentin

+0

@Quentin: non per me. Ho guardato il violino su Chrome 14 e nessun cursore puntatore è mostrato da nessuna parte. – BoltClock

+0

Sembra che Chrome non applichi la regola 'cursor: pointer' a' 'elementi: http://jsfiddle.net/mnjKX/8/ –

risposta

65

Per i principianti, funziona in Chrome se si rimuove la dichiarazione height dalla regola input.

Demo online:http://jsfiddle.net/mnjKX/16/

Ma questo campo di input trasparente è un inferno di un hack ... non vorrei contare su di esso.


Aggiornamento:

Ed ecco la soluzione adeguata:

::-webkit-file-upload-button { cursor:pointer; } 

Ho pensato che il pulsante di upload di file non è raggiungibile, ma il foglio di stile user agent di Chrome si è rivelato il mio sbagliato :)

+0

wow è grandioso! grazie, ma cosa intendi per i principianti? –

+0

@Mor È semplicemente troppo hackerato. Non vedo la mia risposta come una soluzione completa. –

+0

@MorSela Ho trovato la soluzione corretta ... –

14

Una soluzione interessante (cross-browser) che ho trovato:

Assegna l'input a una proprietà CSS del cursore: puntatore, posiziona l'input in un div (con overflow: nascosto) e assegna all'elemento un padding sinistro del 100%. L'area riempita avrà la proprietà pointer.

Personalmente non mi fido delle correzioni -webkit e -moz perché mi sento come se fossero arbitrarie e temporanee e saranno presto sostituite.

+0

Soluzione molto bella. Mi capita di avere il mio input avvolto nella sua forma, quindi questo funziona come un incantesimo, senza div div richiesto :) – Dogoku

+0

intelligente. Sono sempre super paranoico su sfumature come questa che cambiano improvvisamente senza motivo –

+0

grazie! è un grande lavoro! – GuaHsu

Problemi correlati