2012-06-09 15 views
8

Jak widać z , wydaje się, że input "przepełnia" swojego rodzica div. Chciałbym dodać dopełnienie do input, nie powodując przepełnienia rodzica.Jak zapobiegać przepełnieniu elementu potomnego przez jego rodzica?

Chciałbym poznać najlepsze rozwiązanie/obejście dla każdej przeglądarki (w tym IE, Firefox, Chrome itp.).

+0

Zobacz odpowiedź na to poprzednie pytanie: [szerokość: 100% -padding?] (Http://stackoverflow.com/questions/5219175/width-100-padding) –

Odpowiedz

25

widać this answer, ale jeśli don” t podoba, można użyć box-sizing CSS3 własność tak:

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

Live jsFiddle example

+0

Rzeczywiście najlepsze rozwiązanie, niestety, jest CSS3 –

+1

@RicardoRodrigues Większość nowoczesnych przeglądarek obsługuje już tę właściwość, zobacz: http://caniuse.com/#search=box-sizing –

+0

Uhm .. nie wiedziałem, że jest tak obsługiwana. Dzięki i przepraszam. –

0

Nie określaj szerokości wewnętrznego elementu div jako 100%. Element div automatycznie dopasuje szerokość swojego kontenera nadrzędnego. Demo

+0

Ale użyłem danych wejściowych, które nie wydają się działać na mój przykład. –

+0

Och, zmieniłeś to. To był div w pierwszej wersji jsfiddle .. – sachleen

+0

Dzięki za spróbować, ale był .. ale przykład w stackoverflow był wejściowy. –

0

Wygląda na to, że wejście znajduje się wewnątrz elementu div, ale znajduje się w lewym górnym rogu. Ponieważ wejście zajmuje 100% szerokości div, zasłania czerwone tło elementu div. Element div jest dłuższy, więc wystaje z dołu, przez co wydaje się, że dane wejściowe znajdują się na górze. Wykonaj następujące czynności:

  • Zastosuj dopełnienie do CSS z zewnątrz nie div polu tekstowym.
    Można zastosować margines do danych wejściowych, jeśli chcesz, ale myślę, że dopełnienie zawierający element div jest lepszy.
    • Wykorzystaj pole wprowadzania węższa niż div (< 100%)
+0

Następnie nie pasują idealnie w środku. Dzięki za pomoc –

+0

Aby wyśrodkować margines po lewej stronie na wejściu, wystarczyłoby. – GrantVS

2

Dopełnienie dodaje do szerokości Twojego obiektu. Jedną z opcji jest usunięcie lewego/prawego marginesu z wejścia i użycie wcięcia tekstowego, chociaż usuwa to prawe wypełnienie.

.inside{ 
    background: blue; 
    border: none; 
    padding-bottom: 10px; 
    padding-top: 10px; 
    text-indent: 10px; 
    width: 100%; 
} 

Alternatywnie, zamiast używać jawnie wpisanej pikseli szerokości do wypełnienia, można użyć procentów, i odjąć tę wartość od szerokości:

.inside{ 
    padding: 3%; 
    width: 94%; 
} 
+0

Problem nie dotyczy tekstu na wejściu w pobliżu granicy. Ale dzięki za wskazówkę –

+0

Cóż, to jedno z rozwiązań, które myślałem. Zobaczą inne odpowiedzi, ponieważ szukam najlepszego sposobu i rozwiązania crossbrowser. Innym pomysłem było użycie position: absolute; prawe: 0; left: 0 i zdefiniować szerokość, następnie środek używając marginesu: auto; –

Powiązane problemy