Допустим, у меня есть текстовое поле, которое я хочу заполнить всю строку. Я бы дал ему такой стиль:
input.wide {display:block; width: 100%}
Это вызывает проблемы, потому что ширина зависит от содержимого текстового поля. Текстовые поля имеют поля, границы и отступы по умолчанию, что делает текстовое поле шириной 100% больше, чем его контейнер.
Например, здесь справа:
Есть ли способ заставить текстовое поле заполнить ширину своего контейнера, не выходя за его пределы?
Вот пример HTML, чтобы показать, что я имею в виду:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<style type="text/css">
#outer{border: 1px solid #000; width: 320px; margin: 0px;padding:0px}
#inner{margin: 20px; padding: 20px; background: #999;border: 1px solid #000;}
input.wide {display:block; margin: 0px}
input.normal {display:block; float: right}
</style>
</head>
<body>
<div id="outer">
<div id="inner">
<input type="text" class="wide" />
<input type="text" class="normal" />
<div style="clear:both;"></div>
</div>
</div>
</body>
</html>
Если это запустить, вы можете увидеть, посмотрев на «нормальное» текстовое поле, что «широкое» текстовое поле выступает за пределы контейнера. «Нормальное» текстовое поле перемещается к фактическому краю контейнера. Я пытаюсь заставить "широкое" текстовое поле заполнить свой контейнер, не расширяясь за край, как "нормальное" текстовое поле.
Да: с помощью свойства CSS3 «box-sizing: border-box», вы можете переопределить, что означает «ширина», чтобы включить внешний отступ и рамку.
К сожалению, поскольку это CSS3, поддержка не очень развита, и, поскольку процесс спецификации еще не закончен, он пока что имеет другие временные имена в браузерах. Так:
Альтернативой старой школы является просто поместить количество 'padding-right' на включающий элемент <div> или <td>, равное примерно тому, сколько дополнительных левого и правого отступа / границы в 'px', как вы думаете, браузеры будут дать вход. (Обычно 6px для IE <8.)
источник
Это решило проблему для меня!
Без необходимости внешнего div. Просто примените его к данному текстовому полю.
С помощью этого свойства «Свойства ширины и высоты (и свойства min / max) включают содержимое, отступы и рамку, но не поле»
Смотрите описание имущества в w3schools .
Надеюсь, это поможет кому-то!
источник
Просто столкнулся с этой проблемой сам, и единственное решение, которое я смог найти, работавшее во всех моих тестовых браузерах (IE6, IE7, Firefox), было следующее:
Код:
Здесь полное горизонтальное переполнение для элемента ввода составляет 6px - 2x (padding + border), поэтому мы устанавливаем отступ справа для внутреннего DIV в 6px.
источник
Поддержка размеров ящиков довольно хороша: http://caniuse.com/#search=box-sizing
Таким образом, если вы не нацелены на IE7, вы сможете решить подобные проблемы, используя это свойство. Слой, такой как sass или менее, облегчает обработку таких правил с префиксами, кстати.
источник
На самом деле, это потому, что CSS определяет 100% относительно всей ширины контейнера, включая его поля, границы и отступы; это означает, что пространство пригодится. к его содержанию относится некоторое количество меньше, чем 100%, если контейнер не имеет полей, границ или отступов.
Это нелогично, и многие считают это ошибкой, с которой мы сейчас застряли . Это фактически означает, что% измерения не годятся для чего-либо, кроме контейнера верхнего уровня, и даже тогда, только если у него нет полей, границ или отступов.
Обратите внимание , что текстовое поле в поля, границы и отступы будут включены в размер CSS , указанного для него - это контейнер, который бросают вещи.
Я сносно обошел эту проблему, используя 98%, но это далеко не идеальное решение, поскольку поля ввода имеют тенденцию к дальнейшему сокращению по мере увеличения контейнера.
РЕДАКТИРОВАТЬ: я сталкивался с подобным вопросом - я никогда не пробовал дать ответ , и я не знаю наверняка, относится ли он к вашей проблеме, но похоже, что так и будет.
источник
Одно решение, которое может работать (это работает для меня), состоит в том, чтобы применить отрицательное поле при вводе (текстовое поле) ... или фиксированную ширину для ie7 или отказаться от поддержки ie7. Это приводит к идеальной ширине в пикселях. Для меня это 7, поэтому я добавил 3 и 4, но это все еще идеальный пиксель ..
У меня была такая же проблема, и я ненавидел иметь дополнительные div для границы и т. Д.!
Итак, вот мое решение, которое, кажется, работает!
Вы должны использовать таблицу стилей только ie7, чтобы избежать взломов.
источник
Если вы не можете использовать
box-sizing:border-box
его, попробуйте удалитьwidth:100%
и поместить очень большойsize
атрибут в<input>
элемент, однако недостатком является то, что вы должны изменить HTML и не можете сделать это только с помощью CSS:источник
Если вам не нужно делать это динамически (например, ваша форма имеет фиксированную ширину), вы можете просто установить ширину дочерних
<input>
элементов равной ширине их контейнера за вычетом любых украшений, таких как padding, margin, border и т.д .:источник
Если вы не можете использовать размер окна (например, когда вы конвертируете HTML в PDF, используя iText). Попробуй это:
CSS
HTML
источник
Это работает:
Первая ширина - это запасное правило для старых браузеров.
источник
Просто введите стиль смещения для дополнительного заполнения. В следующем примере отступ на входе будет 10 пикселей слева и справа для общего смещения отступа 20 пикселей:
источник