Я уверен, что эту проблему уже задавали, но я не могу найти ответа.
У меня такая разметка:
<div id="foo">
<div id="bar">
here be dragons
</div>
</div>
Я хочу, чтобы у foo была ширина 600px
( width: 600px;
), а у bar было следующее поведение:
padding-left: 2px;
padding-right: 2px;
margin-left: 2px;
margin-right: 2px;
outerWidth: 100%;
Другими словами, вместо того, чтобы устанавливать ширину полосы, 592px
я бы хотел установить внешнюю ширину полосы, чтобы 100%
она вычислялась 592px
. Здесь важно то, что я могу изменить ширину foo на, 800px
и bar будет вычисляться при рендеринге, вместо того, чтобы мне приходилось делать математику для всех этих экземпляров вручную.
Возможно ли это в чистом CSS?
Еще немного повеселее:
- Что, если
#bar
это стол? - Что, если
#bar
текстовое поле? Что, если
#bar
это ввод?Что если
#foo
это ячейка таблицы (td
)? (Это меняет проблему или проблема идентична?)
До сих пор table#bar
, input#bar
уже обсуждалось. Я не видел хорошего решения для textarea # bar. Я думаю, что текстовое поле без границ / полей / отступов с div
оберткой может работать со div
стилем, чтобы работать как границы для textarea
.
inline-block
чемblock
элементы. Обратите внимание, что я сказал, что это не то же самое, что :-) Что вы, вероятно, испытываете, так это то, что, если не указано иное, они обычно расширяются, чтобы вместить все столбцы, что может быть действительно раздражающим, если в некоторых из заголовков / ячеек есть длинный текст, который невозможно перенастроить.textarea#bar
вы должны иметь возможность установить этоdisplay: block
с небольшим побочным эффектом. Что касается таблицы, я знаю, что в прошлом я использовал какое-то решение / смягчение последствий, но я не помню, что это было на данный момент. Однако я скажу, что обычно я не устанавливаю "поля" на таблице, а скорее оборачиваю его в div с заполнением / полями ... это может быть сам #foo или другой div, используемый jsut для применения этого типа интервала. Также вы можете сделать, чтобы противодействовать проблеме с границами, чтобы применить границы только к первой / последней ячейке в строке / ячейкам в первой / последней строкепочти там, просто измените
outerWidth: 100%;
наwidth: auto;
(outerWidth не является свойством CSS)в качестве альтернативы примените к панели следующие стили:
width: auto; display: block;
источник
bar
потому что будет добавлено к 100%, что фактически будетbar
шире, чем его родительский элементfoo
.display:block;
(также известный как элемент уровня блока), примет это поведение. элемент DIV имеетwidth:auto;
иdisplay:block;
установлен по умолчанию.Используйте стили
left: 0px;
или / и
right: 0px;
или / и
top: 0px;
или / и
bottom: 0px;
Я думаю, что в большинстве случаев это сработает
источник
Итак, после исследования было обнаружено следующее:
Для
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
используется для добавления к#bar
таблице границ / полей / отступов . Обратите внимание, что вам нужно будет установить фон всего объекта#barWrap
и сделать#bar
его прозрачным или таким же, как#barWrap
.Для
textarea#bar
иinput#bar
вам нужно сделать то же самоеtable#bar
, что и, нижняя сторона заключается в том, что, удаляя границы, вы останавливаете рендеринг собственного виджета для поля ввода / текста, а#barWrap
границы будут выглядеть немного иначе, чем все остальное, поэтому вам, вероятно, придется стиль всех ваших входных данных таким образом.источник