Итак, мы знаем, что установка отступа для объекта приводит к изменению его ширины, даже если она установлена явно. Хотя можно оспорить логику этого, это вызывает некоторые проблемы с некоторыми элементами.
В большинстве случаев вы просто добавляете дочерний элемент и добавляете к нему отступ вместо элемента, установленного на 100%, но для входных данных формы это невозможно.
Взгляните на это: http://sandman.net/test/formcss.html
Для второго входа установлено значение отступа 5 пикселей, что я предпочитаю использовать по умолчанию. Но, к сожалению, это заставляет входные данные увеличиваться на 10 пикселей во всех направлениях, включая добавление 10 пикселей к 100% ширине.
Проблема здесь в том, что я не могу добавить дочерний элемент внутрь ввода, поэтому не могу его исправить. Итак, вопрос:
Есть ли способ добавить отступ внутри ввода, сохраняя при этом ширину 100%? Это должно быть 100%, так как формы будут отображаться с родительскими элементами разной ширины, поэтому я не знаю заранее ширину родительского элемента.
box-sizing
атрибут CSS3Ответы:
Используя CSS3, вы можете использовать свойство box-sizing, чтобы изменить способ вычисления браузером ширины ввода .
Вы можете прочитать об этом здесь: http://css-tricks.com/box-sizing/
источник
box-sizing: border-box;
это первое, о чем я подумал, но у меня это абсолютно не работает. Может, прапрапрадедыdisplay: flex;
с этим возятся?Я не знаю, насколько он совместим с кросс-браузером (работает в firefox и safari), но вы можете попробовать это решение:
(Опубликовал только те значения, которые я изменил)
источник
Одним из вариантов является обернуть
INPUT
вDIV
имеющий заполнение.CSS:
HTML:
источник
Здесь
calc
на помощь может прийти то, о чем часто забывают :Поскольку мы знаем, что заполнение будет увеличивать ширину элемента, мы просто вычитаем заполнение из общей ширины. Он поддерживается всеми основными браузерами, адаптивен и не требует запутанных div-оберток.
источник
У меня были проблемы с чем-то похожим на это. У меня есть tds со 100% входами и небольшим отступом. Я скомпенсировал отступ на td следующим образом:
отступ 8 пикселей, чтобы включить границу и отступ поля ввода / текста. Надеюсь это поможет!
источник
Возможно, уберите границу + фон с рамки
input
и вместо этого заключите ее вdiv
с рамкой + фон и шириной: 100% и установите маржу наinput
?источник
Одно из найденных мной решений - абсолютно позиционировать ввод с относительно позиционированным родительским тегом.
Применяем стиль:
Единственное, о чем следует помнить, - это то, что тегу абзаца требуется установка высоты, поскольку его абсолютно позиционированные дочерние элементы не увеличивают его высоту. Это позволяет избежать необходимости устанавливать
width: 100%
, блокируя его с левой и правой сторон родительского элемента.источник
Попробуйте использовать проценты для заполнения:
Если вы беспокоитесь о пользователях в старых браузерах, которые не видят тень окна, просто задайте для ввода тонкий фоновый цвет в качестве резервного. Если вы используете пиксели для такого рода вещей, то, скорее всего, вы используете их в другом месте, что может вызвать несколько дополнительных проблем, дайте мне знать, если вы столкнетесь с ними.
источник
Единственное, что я знаю, чтобы предотвратить это, - это присвоить такие значения 100% -10. Но у него есть некоторые проблемы с совместимостью.
источник