Подтвердить что ты не робот

Как сделать ширину CSS для заполнения родительского элемента?

Я уверен, что эта проблема была задана раньше, но я не могу найти ответ.

У меня есть следующая разметка:

<div id="foo">
    <div id="bar">
        here be dragons
    </div>
</div>

Мое желание состоит в том, чтобы foo имел ширину 600px (width: 600px;), и для создания бара были следующие типы поведения:

padding-left: 2px;
padding-right: 2px;
margin-left: 2px;
margin-right: 2px;
outerWidth: 100%;

Другими словами, вместо того, чтобы устанавливать ширину полосы в 592px, я хотел бы установить внешнюю ширину строки на 100% так, чтобы она была рассчитана на 592px. Важность здесь в том, что я могу изменить ширину foo на 800px, и балл будет вычисляться при визуализации вместо того, чтобы мне приходилось выполнять математику для всех этих экземпляров вручную.

Возможно ли это в чистом CSS?

Немного веселее:

  • Что делать, если #bar является таблицей?
  • Что делать, если #bar является текстовым полем?
  • Что делать, если #bar является входом?

  • Что делать, если #foo является ячейкой таблицы (td)? (Сможет ли это изменить проблему или проблема идентична?)


До сих пор обсуждался table#bar, input#bar. Я не видел хорошего решения для textarea # bar. Я думаю, что текстовое поле без рамки/поля/заполнения с оберткой div может работать с стилем div, предназначенным для работы в качестве границ для textarea.

4b9b3361

Ответ 1

EDIT:

Эти три разных элемента имеют разные правила рендеринга.

Таким образом, для:

table#bar вам нужно установить ширину до 100%, иначе она будет только такой широкой, как она определяет, что она должна быть. Однако, если общая ширина строк таблицы больше ширины bar она будет расширяться до необходимой ширины. ЕСЛИ я напомню, что вы можете противодействовать этому, установив display: block !important; хотя его было немного, так как ive пришлось исправить это. (я уверен, что кто-то исправит меня, если я ошибаюсь).

textarea#bar я 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;}

даст вам именно то, что вы хотите.

Ответ 2

почти там, просто измените outerWidth: 100%; на width: auto; (outerWidth не является свойством CSS)

примените следующие стили для отображения:

width: auto;
display: block;

Ответ 3

Используйте стили

left: 0px;

или/и

right: 0px;

или/и

top: 0px;

или/и

bottom: 0px;

Я думаю, что в большинстве случаев это сделает работу

Ответ 4

Итак, после исследования обнаружено следующее:

Для параметра div#bar display:block; width: auto; вызывается эквивалент outerWidth:100%;

Для a table#bar вам необходимо обернуть его в div с правилами, указанными ниже. Таким образом, ваша структура становится:

<div id="foo">
 <div id="barWrap" style="border....">
  <table id="bar" style="width: 100%; border: 0; padding: 0; margin: 0;">

Таким образом, таблица занимает родительский div 100%, а #barWrap используется для добавления границ /margin/padding в таблицу #bar. Обратите внимание, что вам нужно будет установить фон всего объекта в #barWrap, а фон #bar будет прозрачным или тем же, что и #barWrap.

Для textarea#bar и input#bar вам нужно сделать то же самое, что и table#bar, нижняя сторона - это то, что, удалив границы, вы остановите отображение собственного виджета ввода /textarea, а границы #barWrap будут выглядеть немного отличается от всего остального, поэтому вам, вероятно, придется стилизовать все ваши входы таким образом.