Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:
Вы пытаетесь использовать ссылочную переменную, значение которой
Nothing
/null
. Если для ссылочной переменной значениеNothing
/null
, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную
blockquote>Nothing
/null
, или вы вызывали функцию, которая установите для этой переменной значениеNothing
/null
.
Найден альтернативу в дочерних элементах с полями внутри DIVs Вы также можете добавить:
.parent { overflow: auto; }
или:
.parent { overflow: hidden; }
Это предотвращает поля свернуть . Граница и прокладка делают то же самое. Следовательно, вы также можете использовать следующее для предотвращения краха верхнего края:
.parent {
padding-top: 1px;
margin-top: -1px;
}
Обновление по популярному запросу: весь смысл сворачивания полей - обработка текстового содержимого. Например:
<style type="text/css">
h1, h2, p, ul {
margin-top: 1em;
margin-bottom: 1em;
}
</style>
<h1>Title!</h1>
<div class="text">
<h2>Title!</h2>
<p>Paragraph</p>
</div>
<div class="text">
<h2>Title!</h2>
<p>Paragraph</p>
<ul>
<li>list item</li>
</ul>
</div>
Поскольку браузер обрушивает поля, текст будет выглядеть так, как вы ожидали, а теги-теги <div>
не влияют на поля. Каждый элемент гарантирует, что он будет располагаться вокруг него, но расстояние не будет удвоено. Поля <h2>
и <p>
не будут складываться, а скользят друг в друга (они рушится). То же самое происходит и с элементами <p>
и <ul>
.
К сожалению, с современными проектами эта идея может укусить вас, когда вы явно хотите контейнер. Это называется новым блоком форматирования контекста в CSS говорят. Этот трюк overflow
или margin даст вам это.
margin
элементов, содержащихся в .child
, сжимаются.
<html>
<style type="text/css" media="screen">
#parent {background:#dadada;}
#child {background:red; margin-top:17px;}
</style>
<body>
<div id="parent">
<p>&</p>
<div id="child">
<p>&</p>
</div>
</div>
</body>
</html>
В этом примере p
получает margin
из стилей по умолчанию браузера. Браузер по умолчанию font-size
обычно 16px. Имея margin-top
более 16px на #child
, вы начинаете замечать, что это перемещение позиции.
Это нормальное поведение (по крайней мере, среди реализаций браузера). Маржа не влияет на положение ребенка по отношению к ее родительскому объекту, если только родительский элемент не имеет дополнения, и в этом случае большинство браузеров затем добавят к нему дочерние поля.
Чтобы получить нужное поведение, вы need:
.child {
margin-top: 0;
}
.parent {
padding-top: 10px;
}
.parent {border: solid 1px;}
– o.k.w
19 November 2009 в 12:17
Чтобы предотвратить использование «родительского родителя» поля «div child»: в родительском режиме используйте css:
добавить стиль display:inline-block
к дочернему элементу
Хотя все ответы устраняют проблему, но у них есть компромиссы / корректировки / компромиссы, такие как
floats
, у вас есть для флота элементов border-top
. Это подталкивает родителя по крайней мере на 1px вниз, а затем его следует корректировать, вводя маркер -1px
в сам родительский элемент. Это может создать проблемы, когда у родителя уже есть margin-top
в относительных единицах. padding-top
, тот же эффект, что и при использовании border-top
overflow: hidden
, не может использоваться, когда родительский должен отображать переполненный контент, например выпадающее меню overflow: auto
, вводит полосы прокрутки для родительского элемента, который имеет (намеренно) переполняющий контент (например, тени или треугольник подсказки) Проблема может быть решена с использованием псевдо-элементов CSS3 следующим образом
.parent::before {
clear: both;
content: "";
display: table;
margin-top: -1px;
height: 0;
}
margin-top: -1px
и height: 0
кажутся ненужными. Протестировано в Chrome. Но лучшее решение.
– NinjaFart
11 November 2016 в 16:11
.parent:after...
– Ejaz
13 November 2017 в 16:48
Это то, что сработало для меня
.parent {
padding-top: 1px;
margin-top: -1px;
}
.child {
margin-top:260px;
}
родительский элемент не должен быть пустым, по крайней мере, поставить
перед дочерним элементом.
Использование top
вместо margin-top
- другое возможное решение, если это необходимо.
Альтернативное решение, которое я нашел, прежде чем я понял, что правильным ответом было добавление прозрачной границы к родительскому элементу.
Ваша коробка будет использовать дополнительные пиксели, хотя ...
.parent {
border:1px solid transparent;
}
интересно мое любимое решение этой проблемы еще не упомянуто здесь: использование float.
html:
<div class="parent">
<div class="child"></div>
</div>
css:
.parent{width:100px; height:100px;}
.child{float:left; margin-top:20px; width:50px; height:50px;}
см. здесь: http://codepen.io/anon/pen/Iphol
обратите внимание, что если вам нужна динамическая высота для родителя, она также должна плавать, поэтому просто замените height:100px;
на float:left;
Я узнаю, что внутри вашего .css> если вы установите свойство display элемента div в встроенный блок, он исправляет проблему. и маржа будет работать, как ожидается.
Используйте следующий код, чтобы добавить непредвиденного первого ребенка к непреднамеренно движущемуся div:
.parent:before
{content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
Преимущество этого метода заключается в том, что вы не нужно менять CSS любого существующего элемента и, следовательно, оказывает минимальное влияние на дизайн. Рядом с этим добавленный элемент является псевдоэлементом, который является not в DOM-дереве.
Поддержка псевдоэлементов широко распространена: Firefox 3 +, Safari 3+, Chrome 3+, Opera 10+ и IE 8+. Это будет работать в любом современном браузере (будьте осторожны с новым ::before
, который не поддерживается в IE8).
Если у первого дочернего элемента элемента есть margin-top
, родитель отрегулирует свое положение как способ сбрасывания избыточных полей. Зачем? Это также так.
Учитывая следующую проблему:
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
</style>
<div class="parent"><!--This div moves 40px too-->
<div class="child">Hello world!</div>
</div>
Вы можете исправить ее, добавив ребенка с контентом, например, простое пространство. Но мы все ненавидим добавлять пробелы для того, что является проблемой только для дизайна. Поэтому используйте свойство white-space
для подделки содержимого.
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.fix {position: relative;white-space: pre;height: 0px;width: 0px;overflow: hidden;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="fix"></div>
<div class="child">Hello world!</div>
</div>
Где position: relative;
обеспечивает правильное позиционирование исправления. И white-space: pre;
заставляет вас не добавлять какой-либо контент - например, пробел - к исправлению. И height: 0px;width: 0px;overflow: hidden;
гарантирует, что вы никогда не увидите исправление.
Вам может потребоваться добавить line-height: 0px;
или max-height: 0px;
, чтобы гарантировать, что высота в нуле в старых браузерах IE (я не уверен) , И, возможно, вы могли бы добавить <!--dummy-->
к нему в старых браузерах IE, если это не сработает.
Короче говоря, вы можете сделать все это только с помощью CSS (что устраняет необходимость добавления фактического ребенка в HTML DOM-дерево):
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.parent:before {content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="child">Hello world!</div>
</div>
У меня тоже была эта проблема, но я предпочитал предотвращать негативные маркеры, поэтому я помещаю в нее
<div class="supercontainer"></div>
все, у которого есть paddings вместо полей. Конечно, это означает больше девитов, но, вероятно, это самый чистый способ сделать это правильно.
margin: 5px 10px;
id, ожидаем 2 divs 5 px сверху и 20px между ними не 5 px от вершины и 10px между ними. если бы я хотел 10 px между ними, ID указалmargin: 5px 5px;
. я честно желаю, чтобы существовало корневое правило, которое я мог бы разместить, чтобы остановить все крах. я ненавижу, что мне нужно удвоить размер полей на бумаге, чтобы заставить их на самом деле делать то, что я хочу на экране. и это главное ... что за бедствие – JL Griffin 28 October 2015 в 21:07.div-in-text{ margin: 0;}
и<div class="div-in-text"></div>
– JL Griffin 28 October 2015 в 21:09