Come posso evitare che la proprietà padding cambi la larghezza o l'altezza nei CSS?


227

Sto creando un sito con DIVs. Tutto funziona, tranne quando creo un DIV. Li creo così (esempio):

newdiv {
    width: 200px;
    height: 60px;
    padding-left: 20px;
    text-align: left;
}

Quando aggiungo la padding-leftproprietà, la larghezza delle DIVmodifiche diventa 220px e voglio che rimanga a 200px.

Diciamo che ne creo un altro DIVchiamato anotherdivesattamente lo stesso di newdiv, e lo metto dentro newdivma newdivnon ha imbottitura e anotherdivha padding-left: 20px. Ottengo la stessa cosa, newdivla larghezza sarà di 220 px.

Come posso risolvere questo problema?


3
Sono triste da dire, ma mi piace il modo in cui IE gestisce questo ... Ha molto più senso per me ...
— Nicu Surdu,

Risposte:


390

Aggiungi proprietà:

-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box;    /* Firefox, other Gecko */
box-sizing: border-box;         /* Opera/IE 8+ */

Nota: questo non funzionerà in Internet Explorer sotto la versione 8.


14
Questa è un'ottima soluzione per i bordi, ma come può aiutare l'imbottitura?
— Kato,

6
Questa è pura magia! - Risolve il modello di scatola che tutti conosciamo e odiamo! cioè lo fa funzionare nel modo in cui l'intuizione suggerisce che dovrebbe - piuttosto che le specifiche - ma per quanto ne so non rompe nessuna delle specifiche: D Questo articolo lo chiarisce bene ... stackoverflow.com/questions/779434/…
— technicalbloke

2
@technicalbloke Il tuo link torna a questa domanda.
— mhenry1384,

11
Whoops sì, copia e incolla il cazzo. Questo è il link che intendevo condividere ... paulirish.com/2012/box-sizing-border-box-ftw
— technicalbloke

1
Molti di voi dovrebbero considerare la larghezza: trucco automatico di seguito. Funziona su tutti i browser, meno codice, ecc.
— Ryan Shillington,



11

Se desideri rientrare il testo all'interno di un div senza modificarne le dimensioni, utilizza il CSS text-indentanziché padding-left.

.indent {
  text-indent: 1em;
}
.border {
  border-style: solid;
}
<div class="border">
  Non indented
</div>

<br>

<div class="border indent">
  Indented
</div>


1
Questa è l'unica soluzione che ho trovato funzionante per il mio div a larghezza fissa. il dimensionamento delle scatole non ha impedito che l'imbottitura abbia un impatto sulla larghezza, sfortunatamente, quindi grazie a una tonnellata per aver sottolineato questa fantastica piccola proprietà.
— Stevo,

8

aggiungi semplicemente box-sizing: border-box;


12
Questo è esattamente lo stesso di quello che altre risposte già dicono qui.
— Neil Lunn,

1

quando aggiungo la proprietà padding-left, la larghezza del DIV cambia a 220px

Sì, è esattamente secondo gli standard. È così che dovrebbe funzionare.

Diciamo che creo un altro DIV chiamato anotherdiv esattamente lo stesso di newdiv, e lo inserisco all'interno di newdiv ma newdiv non ha riempimento e un altro div ha il riempimento a sinistra: 20px. Ottengo la stessa cosa, la larghezza di newdiv sarà 220px;

No, newdiv rimarrà largo 200 px.


2
Guffa, non è così che gli standard dovrebbero funzionare. L'imbottitura non dovrebbe assolutamente influire sulle dimensioni dell'elemento a cui viene applicata. Con il massimo rispetto, è possibile che tu confonda "imbottitura" con "margine"?
— da5id,

1
Sì, l'imbottitura dovrebbe sicuramente influenzare le dimensioni dell'elemento. Penso che tu sia confuso ... come proponi che il margine influisca sulle dimensioni dell'elemento?
— Guffa,

In realtà, sai che penso che entrambi abbiamo ragione in un certo senso. Sono così abituato a far fronte agli effetti che avevo completamente dimenticato lo standard. Ho trovato una buona spiegazione qui quirksmode.org/css/box.html
— da5id

Quindi, mi scuso con l'onorevole Guffa. Ma per scopi pratici (che è tutto ciò di cui stiamo parlando) il mio consiglio è ancora buono, no?
— da5id,

Bene, hai ragione fino a quando c'è un bug del modello a scatola, ma non si applica a questa domanda ... :)
— Guffa,

-1

basta cambiare la larghezza del div in 160px se si ha un'imbottitura di 20px aggiunge 40px in più alla larghezza del div quindi è necessario sottrarre 40px dalla larghezza per mantenere il div in modo normale e non distorto con una larghezza extra su di esso e il tuo testo è tutto incasinato.


2
Questa è la stessa della risposta data da @rvarcher.
— 8bitjunkie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.