Bir eleman genişliği nasıl yapılır:% 100 eksi dolgu?


396

Bir html girdim var.

Girişin padding: 5px 10px;ana div genişliğinin (akışkan olan)% 100 olmasını istiyorum.

Ancak kullanmak width: 100%;girdinin olmasına neden olur, bununla 100% + 20pxnasıl başa çıkabilirim?

Misal


1
15 dakika önce göndermediğim bu cevaba bakın: stackoverflow.com/questions/5219030/… IE7'de çalışmasını gerektirmedikçe, bu sizin için mükemmel bir şekilde çalışmalıdır.
thirtydot

Yöntemimi kullandıysanız, cevabımda az önce yaptığım küçük düzenlemeye bakın. Bazı tarayıcılarda "eşit dolgu" sağlar.
thirtydot

@Hailwood i7 için dolgu tutmak inputve destekleyen bir çözüm var
Vladimir Starkov

Lütfen ayrıca calc işlevini kullanarak aşağıdaki cevaba bakınız
Daan

Yanıtlar:


485

box-sizing: border-box düzeltmenin hızlı ve kolay bir yoludur:

Bu , tüm modern tarayıcılarda ve IE8 + ' da çalışacaktır .

İşte bir demo: http://jsfiddle.net/thirtydot/QkmSk/301/

.content {
    width: 100%;
    box-sizing: border-box;
}

Modern tarayıcılarda tarayıcı ön ekli sürümlere ( -webkit-box-sizingvb.) Gerek yoktur.


5
Bunun bir çözümün o kadar kötü olduğunu düşünmüyorum. Genel olarak, öğeleri ekstra bir div içine sarmak, elemanın toplam genişliğini ana kabının ötesine itmeden elemanları doldurmak için iyi bir yoldur.
Jake Wilson

1
Bir sarma divının doldurulması, girişe doğrudan dolgu eklemek için özdeş olmayan sonuçlar da üretir.
Felix Fung

@thirtydot Girdi genişliğini koruyan bazı daha esnek ve zarif çözümler var
Vladimir Starkov

8
@ thirtydot evet, sadece IE7 için kırık bırakın ve M $ bunu düzeltmek izin :)
Petr Peller

Bu ayrıca, gizli div'e uygulamadığınız sürece, jQuery insanlar ve kutu boyutlandırma vidaları herhangi biriniz için otomatik yeniden boyutlandırma textareas korur.
Michael J. Calkins

276

Bu yüzden box-sizingCSS'de var.

Örneğinizi düzenledim ve şimdi Safari, Chrome, Firefox ve Opera'da çalışıyor. Şuna göz atın: http://jsfiddle.net/mathias/Bupr3/ Tüm eklediğim şuydu:

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

Ne yazık ki IE7 gibi eski tarayıcılar bunu desteklemiyor. Eski IE'lerde çalışan bir çözüm arıyorsanız, diğer yanıtlara göz atın.


3
+1, ancak caniuse.com/#search=box-sizing IE 8? Ayrıca, github.com/Schepp/box-sizing-polyfill IE 6-7 için bir çözüm sağlıyor gibi görünüyor.
Alix Axel

1
+1, IE ile ilgilenmiyorsanız (örneğin PhoneGap kullanırken) bu harika
Luke B.10

3
Bu ne tür bir büyücülük? Cevap için +1 ve üstümdeki yorum için +1 (tam olarak ihtiyacım olan şey budur).
Eduard Luca

20
Genişlik için +20 yerine .. varsayılan davranış olmalıdır. Bazen CSS ciddi şekilde dağılmış gibi görünüyor.
2013'te

2
IE'de kutu boyutlandırma desteğini açıklığa kavuşturmak için, IE kutu boyutlandırma özelliği IE Belge Moduna bağlıdır, "IE8 Standartları modu" ve üstünde çalışır. Bu nedenle belge modu "IE8 Standartları modu" ise IE8 tarayıcı sürümünde de çalışır. Bu yardımcı olur umarım.
Sanjeev

40

Yüzde de dolgu kullanın ve genişlikten çıkarın:

dolgu:% 5;
genişlik:% 90;

19
Fyi, bu çözüm sadece esnek olmayan düzenler için idealdir.
muffs

+1, buradaki sorun sanırım sınırlar. Normalde, yalnızca 1 - 3 piksel maks. Alt piksel yuvarlama ile ilgili tarayıcı tutarsızlıkları göz önüne alındığında sonuçlar çok tahmin edilemez.
Alix Axel

27

Bunu kullanmadan yapabilirsiniz box-sizingve net çözümler gibi değilwidth~=99% .

JsFiddle'da demo :
resim açıklamasını buraya girin

  • Girdilerin paddingveborder
  • Negatif yatay girdiye ekle margin= border-width+horizontal padding
  • Girişin sarıcıya önceki adıma paddingeşit yatay eklemargin

HTML işaretlemesi:

<div class="input_wrap">
    <input type="text" />
</div>

CSS:

div {
    padding: 6px 10px; /* equal to negative input's margin for mimic normal `div` box-sizing */
}

input {
    width: 100%; /* force to expand to container's width */ 
    padding: 5px 10px;
    border: none;
    margin: 0 -10px; /* negative margin = border-width + horizontal padding */ 
}

4
Bu, girdi dolgusu için telafi etmek üzere sargı için girdi ve dolgu için kenar boşluğu kullanmak için iyi bir numaradır.
maulik13

Tamamen katılıyorum !!! Bu çözümü kullandım ve kirli hile olmadan yaygın olarak çalışıyor! Bu, bu cevapların her türüne çözüm olmalıydı ..
Andre Figueiredo

Negatif marjın ne rolü olduğunu tam olarak anlamadım - tüm bildiğim, eğer değer yanlışsa, kutu bir tarafa bitiyor, ancak bir şekilde simetrik bir marj bunu
düzeltiyor

21

Css calc () kullanın

Süper basit ve harika.

input {
    width: -moz-calc(100% - 15px);
    width: -webkit-calc(100% - 15px);
    width: calc(100% - 15px);
}​

Burada görüldüğü gibi: Div genişliği% 100 eksi sabit miktarda piksel
Webvitaly ile ( https://stackoverflow.com/users/713523/webvitaly )
Orijinal kaynak: http://web-profile.com.ua/css/dev/css -width-100prc-eksi-100 piksel /

Sadece buraya kopyaladım, çünkü neredeyse diğer iş parçacığını kaçırdım.


Yine de bunu manuel olarak programlamanız gerekir. İdeal olarak otomatik olarak belirlenecektir.
JackHasaKeyboard

11

15px dolgu ile bir kapta olduğumu varsayarsak, iç kısım için her zaman kullandığım şey budur:

width:auto;
right:15px;
left:15px;

Bu, iç parçayı her iki tarafta 15 piksel daha az olması gereken genişliğe kadar gerecektir.


Bir alana width:autouygulanan tam bir örnek gönderebilir misiniz input?
jakubiszon

bu sadece yarım cevap. öğelerin varsayılan konumu statiktir, bu nedenle sol ve sağ burada tam olarak hiçbir şey yapmaz. ve genişlik otomatik de başlangıç ​​değeridir, bu yüzden .. tüm bu cevap hiçbir şey :)
honk31

5

Bazı konumlandırma hileleri deneyebilirsiniz. Girdiyi bir div position: relativeöğesine ve sabit bir yüksekliğe koyabilirsiniz , daha sonra girdiye position: absolute; left: 0; right: 0;ve istediğiniz herhangi bir dolguya sahip olabilirsiniz.

Canlı örnek


Bunu hangi tarayıcılarda test ettiniz? :(
thirtydot

Hmm, yalnızca Chrome'da çalışır. Ama FF & IE'de de çalışmaya çok benzediğimi biliyorum.
Felix

<input>Firefox'taki öğelerle çalışmıyor gibi görünüyor (IE hakkında idk). Yine de <div>s ile çalışır . Ve hayır, display: blocküzerinde de <input>çalışmıyor: - /
Felix

5

İşte iyi çözüm örnekleri olan codeontrack.com'un önerisi :

Div genişliğini% 100 olarak ayarlamak yerine, otomatik <div>olarak ayarlayın ve görüntülenecek şekilde ayarlandığından emin olun : block (varsayılan için <div>).


3
Bağlantıyı doğrudan göndermemelisiniz. Bilgileri bu bağlantıdan ekleyebilirsiniz. Nedeni, yarın bu bağlantı mevcut olmayacak ve cevabınız artık geçerli olmayacak ..
Amnesh Goel

4

Giriş kutusu dolgusunu bir sargı elemanına taşıyın.

<style>
div.outer{ background: red; padding: 10px; }
div.inner { border: 1px solid #888; padding: 5px 10px; background: white; }
input { width: 100%; border: none }
</style>

<div class="outer">
    <div class="inner">
       <input/>
    </div>
</div>

Buradaki örneğe bakın: http://jsfiddle.net/L7wYD/1/


2

Sadece genişlik arasındaki farkı anlayın: auto; ve genişlik:% 100; En: otomatik; (OTOMATİK) Doldurma da dahil olmak üzere sarma div ile verilene tam olarak uyacak şekilde MATICALLY genişliğini hesaplayacaktır. Genişlik% 100 genişliği genişletir ve dolguyu ekler.


Bunun <input> ile çalıştığı bir örnek ekleyebilir misiniz? Aksi takdirde, insanları vahşi bir kaz peşinde koşuyorsun.
Bay Lister



-1

Benim margin:15px;padding:10px 0 15px 23px;width:100%için sonuç şu oldu:

resim açıklamasını buraya girin

Benim için çözüm width:autobunun yerine kullanmaktı width:100%. Yeni kodum:

margin:15px;padding:10px 0 15px 23px;width:auto. Sonra eleman düzgün bir şekilde hizalandı:

resim açıklamasını buraya girin


-1

Aynı sorunu yaşadım. Şöyle düzeltin:

width: 100%;
box-sizing: border-box;

-9

Bunu yapabilirsiniz:

width: auto;
padding: 20px;

Bu% 100 marj ile aynı değildir.
James
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.