Я пытаюсь добавить значения полей на div внутри другого div. Все отлично работает, кроме верхнего значения, кажется, игнорируется. Но почему?
Что я ожидал:
Что я получаю:
Код:
#outer {
width: 500px;
height: 200px;
background: #FFCCCC;
margin: 50px auto 0 auto;
display: block;
}
#inner {
background: #FFCC33;
margin: 50px 50px 50px 50px;
padding: 10px;
display: block;
}
<div id="outer">
<div id="inner">
Hello world!
</div>
</div>
В школах W3 нет объяснения, почему маржа ведет себя так.
float:left;
этим работает ... но зачем это нужно. Я не хочу, чтобы это плавало. И почему работает поле слева / справа?Ответы:
Вы на самом деле видите, как верхнее поле
#inner
элемента сворачивается в верхний край#outer
элемента, оставляя только#outer
неизменное поле (хотя и не показано на ваших изображениях). Верхние края обеих коробок находятся на одном уровне друг с другом, потому что их поля равны.Вот соответствующие пункты из спецификации W3C:
Чтобы предотвратить разрушение поля, можно выполнить любое из следующих действий:
Причина, по которой вышеуказанные параметры предотвращают разрушение поля, заключается в следующем:
Левые и правые поля ведут себя так, как вы ожидаете, потому что:
источник
Попробуйте использовать
display: inline-block;
на внутреннем div.источник
display:inline-block;
. Также при установке используется значение, приdisplay:inline-block;
котором вы теряете ширину в 100% на div.display:inline-block
работал на меня. Огромное спасибо.То, что упомянул @BoltClock, довольно солидно. И здесь я просто хочу добавить еще несколько решений для этой проблемы. проверьте это поле w3c_collapsing . Зеленые части - потенциальная мысль, как эта проблема может быть решена.
Решение 1
что означает , что я могу добавить
float:left
к любому#outer
или#inner
DEMO1 .Также обратите внимание, что
float
будет недействительнымauto
в поле.Решение 2
кроме
visible
, давайте введемoverflow: hidden
в#outer
. И этот способ кажется довольно простым и порядочным. Мне это нравится.Решение 3
или
эти два метода нарушат нормальный поток
div
Решение 4
такой же, как @enderskill
Решение 5
Это не имеет большого отношения к вопросу, так как это разрыв между братьями и сестрами. Обычно это означает, что есть приставка,
margin-bottom: 30px
а приставнаяmargin-top: 10px
. Общая разница между ними30px
вместо40px
.Решение 6
Это очень интересно, и я могу просто добавить одну верхнюю границу
И также
<div>
по умолчанию используется на уровне блоков, поэтому вам не нужно объявлять его намеренно. Извините за невозможность опубликовать более 2 ссылок и изображений из-за моей репутации новичка. По крайней мере, вы знаете, откуда возникла проблема, когда в следующий раз увидите нечто подобное.источник
Не уверен, почему то, что у вас есть, не работает, но вы можете добавить
overflow: auto;
к внешнему div.
источник
Если вы добавляете какие-либо отступы
#outer
, это работает.демонстрация
источник
Не совсем понятно почему, но изменив внутренний CSS на
кажется, работает;
источник
Не отвечает на вопрос «почему» (должно быть что-то со складывающимся запасом), но кажется, что самый простой / логичный способ сделать то, что вы пытаетесь сделать, это просто добавить
padding-top
к внешнему div :http://jsfiddle.net/hpU5d/1/
Небольшое замечание - нет необходимости устанавливать div,
display:block;
если в вашем коде нет чего-то другого, говорящего, что он не должен быть блоком.источник
попробуй это:
http://jsfiddle.net/7AXTf/
Удачи
источник
Я думаю , настройка положения свойство #inner дел до относительно может также помочь достигнуть эффекта. Но в любом случае я попробовал оригинальный код, вставленный в Вопрос по IE9 и последней версии Google Chrome, и они уже дают желаемый эффект без каких-либо изменений.
источник
Используйте
padding-top:50px
для внешнего div. Что-то вроде этого:Примечание: заполнение увеличит размер вашего div. В этом случае, если размер вашего div важен, я имею в виду, должен ли он иметь определенную высоту. уменьшить высоту на 50 пикселей:
источник
Вы пробовали! Важно прежде всего, это заставит все
источник
Просто для быстрого исправления попробуйте обернуть ваши дочерние элементы в такой
div
элемент -Край
inner
div не рухнет из-за отступов1px
между нимиouter
иinner
div. Таким образом, по логике у вас будет1px
дополнительное пространство вместе с существующим полемinner
div.источник