Padding özelliğinin CSS'deki genişlik veya yüksekliği değiştirmesini nasıl önleyebilirim?


227

DIVS ile bir site oluşturuyorum . Bir DIV yaratmam dışında her şey yolunda gidiyor. Onları böyle oluşturuyorum (örnek):

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

padding-leftÖzelliği eklediğimde, DIVdeğişikliklerin genişliği 220px olarak değişiyor ve 200px'de kalmasını istiyorum.

Diyelim ki tam olarak aynı DIVadlı başka bir tane oluşturdum ve içine koydum, ancak dolgu yok ve var . Aynı şeyi alıyorum, genişliği 220 piksel olacak.anotherdivnewdivnewdivnewdivanotherdivpadding-left: 20pxnewdiv

Bu sorunu nasıl düzeltebilirim?


3
Söylemek üzüldüm, ama
IE'nin

Yanıtlar:


390

Mülk ekle:

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

Not: Bu , Internet Explorer'da sürüm 8'in altında çalışmaz .


14
Bu sınırlar için harika bir çözüm, ancak bu dolgu için nasıl yardımcı olur?
Kato

6
Bu saf bir sihir! - Hepimizin bildiği ve nefret ettiği kutu modelini düzeltir! yani sezginin önermiş olduğu şekilde çalışmasını sağlar - spesifikasyonlardan ziyade - ama bildiğim kadarıyla herhangi bir spesifikasyonu da kırmaz: D Bu makale iyi açıklıyor ... stackoverflow.com/questions/779434/…
Roger Heathcote

2
@technicalbloke Bağlantınız bu soruya geri dönüyor.
mhenry1384

11
Hata! Evet, kopyala ve horoz yapıştır. Bu paylaşmak istediğim link ... paulirish.com/2012/box-sizing-border-box-ftw
Roger Heathcote

1
Birçoğunuz genişliği düşünmelisiniz: otomatik hile aşağıda. Tarayıcılarda, daha az kodda vb. Çalışır
Ryan Shillington



11

Bir div içindeki metni değiştirmeden div içindeki metni girintilemek istiyorsanız text-indentbunun yerine CSS'yi kullanın padding-left.

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

<br>

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


1
Sabit genişlikli div için çalıştığımı bulduğum tek çözüm bu. kutu boyutlandırma dolgu maalesef genişliği etkilemeden durmadı, bu yüzden bu harika küçük özelliği işaret için bir ton teşekkürler.
Stevo

8

basitçe ekle box-sizing: border-box;


12
Bu, diğer cevapların burada söyledikleriyle tamamen aynıdır.
Neil Lunn

1

sol dolgu özelliğini eklediğimde, DIV'nin genişliği 220 piksel olarak değişir

Evet, bu tam olarak standartlara uygun. Bu şekilde çalışması gerekiyordu.

Diyelim ki anotherdiv adında newdiv ile aynı olan başka bir DIV oluşturdum ve newdiv'in içine koydum, ancak newdiv'in dolgu içermediğini ve anotherdiv'in dolgu yaptı: 20px. Aynı şeyi alıyorum, newdiv'in genişliği 220 piksel olacak;

Hayır, newdiv 200 piksel genişliğinde kalacak.


2
Guffa, standartların bu şekilde çalışması gerekiyordu. Dolgu kesinlikle uygulandığı elemanın boyutlarını etkilemez. En büyük saygıyla, 'dolgu'yu' marj 'ile karıştırmanız mümkün mü?
da5id

1
Evet, dolgu kesinlikle elemanın boyutlarını etkileyecektir. Sanırım kafanız karıştı ... marjın elementin boyutlarını nasıl etkileyeceğini nasıl öneriyorsunuz?
Guffa

Aslında biliyorsunuz ki ikimiz de bir şekilde haklıyız. Ben tamamen standart unutmuş etkileri ile başa alışkınım. Burada iyi bir açıklama buldum quirksmode.org/css/box.html
da5id

Özür dilerim Bay Guffa. Ama pratik amaçlar için (sonuçta bahsettiğimiz şey budur) tavsiyem hala iyi değil mi?
da5id

Bir kutu modeli hatası olduğu kadar haklısın, ama bu soru için geçerli değil ... :)
Guffa

-1

20px'lik bir dolguya sahipseniz div genişliğinizi 160px olarak değiştirin, divınızın genişliğine 40px ekler, böylece div'inizin normal görünmesini ve üzerinde ekstra genişlikle bozulmaması için genişlikten 40px çıkarmanız gerekir ve metniniz tamamen berbat.


2
Bu @rvarcher tarafından verilen cevapla aynıdır.
8bitjunkie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.