2012-06-09 25 views
8

Come si può vedere da this example, il input sembra "overflow" suo padre div. Mi piacerebbe aggiungere padding allo input senza farlo traboccare suo padre.Come evitare che l'elemento figlio riempito trabocchi il suo genitore?

Mi piacerebbe conoscere la soluzione/soluzione migliore per ogni browser (inclusi IE, Firefox, Chrome, ecc.).

+0

Vedere la risposta a questa domanda precedente: [larghezza: 100% -padding?] (Http://stackoverflow.com/questions/5219175/width-100-padding) –

risposta

25

potete vedere this answer, ma se si don' t come esso, è possibile utilizzare box-sizing CSS3 proprietà come questa:

input { 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    box-sizing: border-box; 
} 

Live jsFiddle example

+0

In effetti la soluzione migliore, purtroppo, è CSS3 –

+1

@RicardoRodrigues La maggior parte dei browser moderni supporta già questa proprietà, vedi: http://caniuse.com/#search=box-sizing –

+0

Uhm .. non sapevo che fosse così supportato. Grazie e scusa. –

0

Non specificare la larghezza del div interno come 100%. Un div si adatta automaticamente alla larghezza del suo contenitore genitore. Demo

+0

Ma ho usato un input, che non sembra funzionare per il mio esempio –

+0

Oh l'hai cambiato. Era un div nella prima revisione del jsfiddle .. – sachleen

+0

Grazie per la prova, ma era .. ma l'esempio in StackOverflow è stato inserito. –

0

Sembra che l'input sia all'interno del div ma si trova nell'angolo in alto a sinistra. Poiché l'input occupa il 100% della larghezza del div, oscura lo sfondo rosso del div. Il div è più lungo in modo che sporga dal fondo, facendo sembrare che l'input sia on-top. Procedere come segue:

  • Applicare l'imbottitura al CSS dei div esterni non casella Input.
    Si potrebbe applicare un margine all'ingresso se si desidera, ma penso che il riempimento di div divisi meglio.
    • rendere la casella di input meno largo del div (< 100%)
+0

Quindi non adattarsi perfettamente al centro. Grazie per l'aiuto –

+0

Centrare un margine sinistro sull'input avrebbe funzionato. – GrantVS

2

imbottitura aggiunge alla larghezza del vostro oggetto. Un'opzione potrebbe essere quella di rimuovere il riempimento sinistro/destro dall'input e utilizzare solo il rientro del testo, sebbene ciò rimuova il riempimento corretto.

.inside{ 
    background: blue; 
    border: none; 
    padding-bottom: 10px; 
    padding-top: 10px; 
    text-indent: 10px; 
    width: 100%; 
} 

In alternativa, invece di utilizzare hardcoded pixel-larghezze per la vostra imbottitura, è possibile utilizzare le percentuali, e sottrarre quel valore dalla larghezza:

.inside{ 
    padding: 3%; 
    width: 94%; 
} 
+0

Il problema non si desidera il testo sull'input vicino al bordo. Ma grazie per il suggerimento –

+0

Bene, quella delle soluzioni che ho pensato. Vedrà altre risposte, perché sto cercando la soluzione migliore e la soluzione crossbrowser. Un'altra idea stava usando la posizione: assoluta; a destra: 0; a sinistra: 0 e definire una larghezza, quindi centrare usando il margine: auto; –

Problemi correlati