CSS genişlik dolguyu içeriyor mu?


147

Görünüşe göre IE'de genişlik dolgu boyutunu içeriyor. FF'de ise genişlik yok. Her ikisinin de aynı şekilde davranmasını nasıl sağlayabilirim?

Teşekkürler.


Muhtemelen standartlara uygun modu etkinleştirmeniz gerekiyor. Ancak bazı kodlar görmeden size bundan daha fazla rehberlik veremem.
Jeff Hubbard

Yanıtlar:


310
  • IE, daha kullanışlı ama standart olmayan "border-box" kutu modelini kullanıyordu. Bu modelde, bir öğenin genişliği dolgu ve sınırları içerir. Örneğin: geniş
    #foo { width: 10em; padding: 2em; border: 1em; }
    olacaktır 10em.

  • Buna karşılık, tüm standartlardan korkan tarayıcılar varsayılan olarak "içerik kutusu" kutu modelini kullanır. Bu modelde, bir elemanın genişliği etmez olmayan dolgu ya da sınırları vardır. Örneğin:
    #foo { width: 10em; padding: 2em; border: 1em; }
    aslında 16emgeniş olacaktır : her kenar için 10em+ 2emdolgu, 1emher kenar için + kenarlık.

Geçerli biçimlendirmeye , iyi bir belge türüne ve uygun başlıklara sahip modern bir IE sürümü kullanırsanız , bu standartla uyumlu olacaktır. Aksi takdirde, modern standartlarla uyumlu tarayıcıları şu yolla "border-box" kullanmaya zorlayabilirsiniz:

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

İlk bildirim Opera için, ikincisi Firefox için, üçüncüsü Webkit ve Chrome için gereklidir.

İşte tarayıcınızın hangi kutu boyutlandırma beyanını desteklediğini test etmek için yıllar önce yaptığım basit bir test: http://phrogz.net/CSS/boxsizing.html

Webkit'in (Safari ve Chrome) padding-boxherhangi bir bildirim yoluyla kutu modelini desteklemediğini unutmayın .


2
Hem içerik kutusu hem de kenarlık kutusu modellerinden bahsetmek için +1. Yine de farklılıkları detaylandırmak isteyebilirsiniz.
BoltClock

1
@BoltClock Daha titiz yanıt verme dürtüsü için teşekkürler. Güncellenmiş.
Phrogz

Güzel cevap; Birkaç gündür farklı seçeneklerin adlarını hatırlamaya (veya bulmaya) çalışıyorum ... +1 =)
David

Opera kimsenin umurunda değil.
Michael J. Calkins

3
@whitelettersinblankpapers W3Schools'un neden berbat olduğunu ve ardından sizi W3C standardına götüren çok daha iyi bir referans olduğunu görün . W3Schools'a giden başka bağlantıyı takip etmeyin. Ayrıca, gelecekte web standartlarıyla ilgili arama motoru sorgularınıza "MDN" ekleyin.
Phrogz

27

Basit bir kural, aynı eleman için padding / margin ve width özelliğini kullanmaktan kaçınmaktır. ör. buna benzer bir şey kullanın

<div class="width-div">
     <div class="padding-div">
     ...........
     ...........
     </div>
 </div>

Bu yöntemi düzenli olarak kullanıyorum ve hiçbir zaman tarayıcılar arası sorun yaşamıyorum.
Kevin Beal

20

Bu soruya rastladım ve birkaç yaşında olmasına rağmen, birinin bu konuya çarpması durumunda bunu ekleyebileceğimi düşündüm.

CSS3 artık bir kutu boyutlandırma özelliğine sahiptir. Eğer ayarlarsan söyle

.bigbox {
    box-sizing: border-box; 
    width: 1000px; 
    border: 5px solid #333;
    padding: 10px;
}

sınıfınız 1030 piksel yerine 1000 piksel genişliğinde olacaktır. Bu, elbette, sıvı div'lerle piksel boyutunda kenarlık kullanan herkes için inanılmaz derecede yararlıdır, çünkü aksi takdirde çözülemeyen bir sorunu çözer.

Daha da iyisi, kutu boyutlandırma, IE7 ve altı hariç tüm büyük tarayıcılar tarafından desteklenir. Genişlik veya yükseklik boyutundaki tüm öğeleri dahil etmek için kutu boyutlandırmayı border-box olarak ayarlayın. To agrega varsayılan genişlik ve / veya yükseklik, diğer öğelerde, "içerik-box" için kutu boyutlandırma ayarlayabilirsiniz.

Tarayıcı sözdiziminin mevcut durumundan emin değilim, ancak yine de -moz ve -webkit öneklerini ekliyorum:

.bigbox{
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}

Evet, ve Paul Irish burada bununla
Dave Burton

3 yıl önce yazılmış olan yanıtla aynı yanıt olduğu zaman, bu yanıt nasıl bu kadar çok olumlu oy aldı?
dippas

1

Açıklanan bir belge türünüz var mı? Html'yi kodlamaya başladığımda bu problemi yaşadım ve bu bir doctype'ın beyan edilmemesinden kaynaklanıyordu. Benim favorim:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
...
</html>

1

Hala sorun yaşayanlar için jQuery iki özellik outerWidth ()ve kenarlıklı veya kenarlıksız bir nesnenin genişliğiniinnerWitdh () bilmek için sağladı ...

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.