2009-08-30 4 views
16

Mam problem z dopełnieniem w moim formularzu na mojej stronie internetowej. Jeśli ustawię wysokość/szerokość elementu formularza, a następnie doda do niego dopełnienie. We wszystkich przeglądanych przeze mnie przeglądarkach, z wyjątkiem Firefoksa, dopełnienie jest dodawane do wysokości/szerokości.Różnice w wypełnianiu formularzy w Firefoksie i Operze/Chrome/IE

Jeśli mam dane wejściowe o szerokości 200 cali i wysokości 20 pikseli. i padding na 5 (wszystkie drogi), suma i całkowita szerokość i wysokość będzie wynosić 210 pikseli i 30 pikseli, ale w Firefoksie jest to 200 pikseli i 20 pikseli.

Jak mam sobie z tym poradzić?

+0

link do strony? Czy ustawiłeś DOCTYPE? –

+0

To nie jest jeszcze w sieci. ; \ Czytałem o kimś, kto ma problem z tym wcześniej, ale nie znalazłem żadnych odpowiedzi. Ustawiłem doctype na xhtml trans. – guzh

+0

Dokument jest również ważny w xhtml strict – guzh

Odpowiedz

27

Daj input to CSS:

box-sizing: border-box; 

Możesz przeczytać więcej o box-sizing na QuirksMode, the W3C spec i MDN. Oto its browser support. Użyj prefiksów -moz- lub -webkit-, jeśli wymagają tego przeglądarki docelowe.


Ta odpowiedź wcześniej sugerował wartość initial, który znalazłem za pomocą przycisków w górę/w dół strzałek w Chrome Web Inspector. Ale okazuje się, że initial jest słowem kluczowym CSS, stosowanym do dowolnej właściwości, która reprezentuje wartość początkową właściwości - domyślną wartość przeglądarki. initial jest mniej bezpieczny niż jawne nadawanie nazwy używanemu modelowi pudełkowemu. Jeśli podano box-sizing: initial i zmieniono domyślną wartość przeglądarki na box-sizing, dopełnienie input może zostać ponownie złamane.

+3

dzięki !, dokładnie to, czego szukałem, "box-sizing: border-box;" podstęp :) przepraszam za spóźnioną odpowiedź! – guzh

+0

lub. gdy ponownie zobaczę moje pytanie, wygląda na to, że byłem przyzwyczajony do problemu z dopełnieniem. Domyślam się, że "box-sizing: content-box;" jest odpowiednią opcją, aby uzyskać całkowitą szerokość/wysokość 210px/30px. Myślę, że tradycyjny model pudełkowy jest bardziej logiczny (cf [Quirksmode] (http://www.quirksmode.org/css/box.html)). – guzh

+0

FYI, dodając '* {box-sizing: border-box; } 'do twojego pliku CSS ustawia wszystkie elementy na obramowanie, które zachowa szerokość i wysokość elementu nawet po dodaniu marginesu i dopełnienia. Domyślny modalny "content-box" dodaje dopełnienie i marginesy na szerokość twojego elementu, co według wielu ludzi jest nielogiczne i trudne do pracy. Czytaj więcej tutaj http://www.paulirish.com/2012/box-sizing-border-box-ftw/. EDYCJA: Nie pamiętam, aby dodać, "border-box" jest obsługiwany w IE8 i wyżej, więc jest bezpieczny w użyciu. – Gavin

0

Czy próbowałeś wstawić wyświetlacz: blok na formularzu? Wygląda na to, że FF może traktować go tak, jakby był elementem wbudowanym.

+0

'display: inline-block' może być lepszy – Eric

3

Spróbuj użyć architektury CSS, takiej jak blueprint-css. Spójrz na przykładowe strony, które są dostarczane z planem (jest plik o nazwie forms.html). To powinno rozwiązać twój problem z dopełnieniem, jak również szereg innych problemów, które możesz napotkać.

+0

Widziałem formularz postaci css-css-file i wygląda na to, że' input [type = text] 'zrobił lewę na polu wejściowym co najmniej ..! Teraz muszę tylko rozwiązać to na tekście, zajrzę do tego! Dzięki (: – guzh

-2

Spróbuj tego:

/* Set all margins and paddings to 0 on all browsers */ 

* { 
    margin: 0; 
    padding: 0; 
} 
+0

To jest niepoprawne, domyślne style przeglądarki nie powinny mieć nic wspólnego ze zjawiskiem, które zadaje pytanie o –

0

http://necolas.github.com/normalize.css/

/* 
* 1. Addresses box sizing set to content-box in IE 8/9. 
* 2. Removes excess padding in IE 8/9. 
* 3. Removes excess padding in IE 7. 
* Known issue: excess padding remains in IE 6. 
*/ 

input[type="checkbox"], 
input[type="radio"] { 
    box-sizing: border-box; /* 1 */ 
    padding: 0; /* 2 */ 
    *height: 13px; /* 3 */ 
    *width: 13px; /* 3 */ 
} 

/* 
* 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. 
* 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome 
* (include `-moz` to future-proof). 
*/ 

input[type="search"] { 
    -webkit-appearance: textfield; /* 1 */ 
    -moz-box-sizing: content-box; 
    -webkit-box-sizing: content-box; /* 2 */ 
    box-sizing: content-box; 
}