Perché il codice display:block;width:auto;
sul mio input di testo non si comporta come un div e riempie la larghezza del contenitore?Ingresso con display: il blocco non è un blocco, perché no?
Ho avuto l'impressione che un div sia semplicemente un elemento di blocco con larghezza automatica. Nel seguente codice non dovrebbero div e l'input hanno dimensioni identiche?
Come ottengo l'input per riempire la larghezza? La larghezza del 100% non funzionerà, perché l'input ha un riempimento e un bordo (causando 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. Questo sembra un capriccio del CSS e la sua comprensione 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>
Vorrei sottolineare che posso già farlo con soluzioni alternative. A prescindere da questo avvitamento 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 modificando la natura dell'INPUT stesso.
Ok, questo è DAVVERO strano! Ho trovato che la soluzione è semplicemente aggiungere max-width:100%
a un input con width:100%;padding:5px;
. Tuttavia questo solleva ancora più domande (che chiederò in una domanda separata), ma sembra che la larghezza usi il normale modello di box CSS e la larghezza massima usi il modello della casella di confine di Internet Explorer. Quanto è strano.
Ok, che l'ultimo sembra essere un bug in Firefox 3. Internet Explorer 8 e Safari 4 limite del max-width al 100% + padding + confine che è ciò che le specifiche dice di fare. Infine, Internet Explorer ha qualcosa di giusto.
Oh mio Dio, è fantastico! Nel processo di giocare con questo e con molto aiuto dai venerabili guru Dean Edwards e Erik Arvidsson, sono riuscito a mettere insieme tre soluzioni separate per creare un vero cross-browser con larghezza del 100% sugli elementi con padding e bordi arbitrari. Vedi la risposta qui sotto. Questa soluzione non richiede alcun markup HTML extra, solo una classe (o selettore) e un comportamento facoltativo per Internet Explorer legacy .
duplicato esatto del [http://stackoverflow.com/questions/628500/can-i-stop-100-width-text-boxes-from-extending-beyond-their-containers ] (http://stackoverflow.com/questions/628500/can-i-stop-100-width-text-boxes-from-extending-beyond-their-taintainers) –
@SleepyCod che non è un duplicato esatto. Questa domanda affronta il problema degli elementi 'input' che apparentemente non rispettano le specifiche CSS 2.1, mentre la domanda a cui ci si è collegati chiede come impedire che le caselle straripanti si trovino perfettamente entro i limiti delle specifiche CSS 2.1. Sia le domande che le loro soluzioni si sovrappongono, ma chiamarle duplicati esatti è semplicemente ** sbagliato. ** – amn