2012-06-09 4 views
8

Как видно из this example, input кажется «переполнен» своим родителем div. Я хотел бы добавить дополнение к input, не переполнив его родительский элемент.Как предотвратить заполнение дочернего элемента дочерним элементом?

Я хотел бы узнать лучшее решение/обходное решение для каждого браузера (включая IE, Firefox, Chrome и т. Д.).

+0

См. Ответ на этот предыдущий вопрос: [width: 100% -padding?] (Http://stackoverflow.com/questions/5219175/width-100-padding) –

ответ

25

Вы можете увидеть this answer, но если вы не» т, как это, вы можете использовать box-sizing CSS3 свойство как это:

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

Live jsFiddle example

+0

Действительно, лучшим решением, к сожалению, является CSS3 –

+1

@RicardoRodrigues. Большинство современных браузеров уже поддерживают это свойство, см .: http://caniuse.com/#search=box-sizing –

+0

Ухм .. не знал, что так поддерживается. Спасибо и извините. –

0

Не указывайте ширину внутреннего div как 100%. Div автоматически будет соответствовать ширине его родительского контейнера. Demo

+0

Но я использовал вход, который, похоже, не работает для моего примера. –

+0

О, ты изменил это. Это был div в первой ревизии jsfiddle. – sachleen

+0

Спасибо за попытку, но был .. но был введен пример в stackoverflow. –

0

Похоже, что вход находится внутри div, но расположен в верхнем левом углу. Поскольку вход занимает 100% от ширины div, он закрывает красный фон div. Div больше, поэтому он торчит дно, и похоже, что вход находится сверху. Выполните следующие действия:

  • Нанести отступы в CSS из внешних DIV не поле ввода.
    Вы можете применить маржу к вводу, если хотите, но я думаю, что дополнение содержащее div лучше.
    • сделать поле ввода менее широким, чем DIV (< 100%)
+0

Тогда не подходит идеально по центру. Спасибо за помощь. –

+0

Чтобы центрировать левый край на входе, это сделало бы трюк. – GrantVS

2

Перетяжка добавляет к ширине объекта. Один из вариантов - удалить левую/правую прокладку из ввода и просто использовать текстовый отступ, хотя это удаляет правильное заполнение.

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

В качестве альтернативы, вместо использования жестко закодированных пиксельных-ширин для заполнения, вы можете использовать проценты, и вычесть это значение из ширины:

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

Проблема не в том, чтобы текст на входе у границы. Но спасибо за подсказку –

+0

Ну, это одно из решений, которые я думал. Увидят другие ответы, потому что я ищу лучший способ и решение для кроссбраузеров. Другая идея была в использовании: абсолютная; право: 0; left: 0 и определить ширину, затем центрировать с использованием margin: auto; –

Смежные вопросы