Perché display:block;width:auto;il mio input di testo non si comporta come un div e riempie la larghezza del contenitore?
Avevo l'impressione che un div fosse semplicemente un elemento a blocchi con larghezza automatica. Nel codice seguente div e input non dovrebbero avere dimensioni identiche?
Come ottengo l'input per riempire la larghezza? La larghezza del 100% non funzionerà, perché l'input ha un'imbottitura e un bordo (che causa una larghezza finale di 1 pixel + 5 pixel + 100% + 5 pixel + 1 pixel). Le larghezze fisse non sono un'opzione e sto cercando qualcosa di più flessibile.
Preferirei una risposta diretta a una soluzione alternativa. Sembra una stranezza CSS e capire che potrebbe essere utile in seguito.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
Devo sottolineare che posso già farlo con soluzioni alternative wrapper. A parte questo rovinare con la semantica della pagina e le relazioni con i selettori CSS, sto cercando di capire la natura del problema e se può essere superato cambiando la natura dell'INPUT stesso.
Ok, questo è VERAMENTE strano! Ho scoperto che la soluzione è semplicemente aggiungere max-width:100%a un input con width:100%;padding:5px;. Tuttavia, ciò solleva ancora più domande (che farò in una domanda separata), ma sembra che la larghezza usi il normale modello di box CSS e la larghezza massima usi il modello di border-box di Internet Explorer. Che strano.
Ok, l'ultimo sembra essere un bug in Firefox 3. Internet Explorer 8 e Safari 4 limitano la larghezza massima al 100% + riempimento + bordo che è ciò che le specifiche dicono di fare. Finalmente, Internet Explorer ha fatto qualcosa di giusto.
Oh mio Dio, è fantastico! Nel processo di gioco con questo, e con molto aiuto del venerabile guru Dean Edwards e Erik Arvidsson , sono riuscito a mettere insieme tre soluzioni separate per creare un vero cross-browser 100% di larghezza su elementi con imbottitura e bordi arbitrari. Vedi la risposta sotto. Questa soluzione non richiede alcun markup HTML aggiuntivo, solo una classe (o un selettore) e un comportamento facoltativo per Internet Explorer legacy.
inputelementi che apparentemente non rispettano la specifica CSS 2.1, mentre la domanda a cui ti sei collegato chiede come evitare caselle traboccanti che si verificano perfettamente entro i limiti della specifica CSS 2.1. Sia le domande che le loro soluzioni si sovrappongono ma chiamarle esattamente duplicati è semplicemente sbagliata.