EDIT
Все эти три разных элемента имеют разные правила рендеринга.
Так для:
table#bar
вам нужно установить ширину на 100%, иначе она будет настолько широкой, насколько это будет необходимо. Однако, если общая ширина строк таблицы больше ширины bar
, она увеличится до необходимой ширины. Если я вспоминаю, вы можете противодействовать этому, установив display: block !important;
, хотя это было некоторое время, так как мне пришлось это исправить. (Я уверен, что кто-то исправит меня, если я не прав).
textarea#bar
i beleive - это элемент уровня блока, поэтому он будет следовать правилам так же, как и div. Единственное предостережение здесь заключается в том, что textarea
принимают атрибуты cols
и rows
, которые измеряются в символьных столбцах. Если это указано в элементе, он переопределит ширину, указанную css.
input#bar
- встроенный элемент, поэтому по умолчанию вы не можете присвоить ему ширину. Однако, аналогично атрибуту textarea
cols
, он имеет атрибут size
для элемента, который может определять ширину. Тем не менее, вы всегда можете указать ширину, используя для этого display: block;
в вашем CSS. Тогда он будет следовать тем же правилам рендеринга, что и div.
td#foo
будет отображаться как table-cell
, в котором есть сумасшествие. Суть в том, что для ваших целей он будет действовать как div#foo
, ограничивая ширину его содержимого. Единственная проблема здесь - это потенциальный текст, который можно развернуть в столбце где-нибудь, что заставит его игнорировать настройку ширины. Также все ячейки в столбце получат ширину самой широкой ячейки.
Это поведение по умолчанию для элемента уровня блока - т.е. если ширина auto
(по умолчанию), то она будет равна 100% внутренней ширины содержащего элемента. так по сути:
#foo {width: 800px;}
#bar {padding-left: 2px; padding-right: 2px; margin-left: 2px; margin-right: 2px;}
даст вам именно то, что вы хотите.