Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Я склонен использовать нижнее поле на элементах, когда я хочу, чтобы они имели пространство перед следующим элементом и затем использовали ".last" класс в CSS для удаления поля из последнего элемента.
<body>
<h1>This is the heading</h1>
<p>This is a paragraph</p>
<h1>Here's another heading</h1>
<div class="last">This is a footer</div>
</body>
div { margin-bottom: 1em; }
p { margin-bottom: 1em; }
h1 { margin-bottom: 1em; }
.last {margin-bottom: 0; }
В Вашем примере, хотя, это, вероятно, не , что применимый, поскольку у отделения нижнего колонтитула, скорее всего, были бы свой собственный класс и определенное моделирование. Тем не менее ".last" приближаются, я использовал работы для меня, когда у меня есть несколько идентичных элементов один за другим (абзацы и этажерка). Конечно, я избирательно подошел к выбору техники от "Элементов" платформа CSS.
Используя усовершенствованные селекторы CSS 2, другое решение было бы возможно, который не полагается на класс last
для введения информации о расположении в HTML.
решение использует смежные селекторы . К сожалению, MSIE 6 еще не поддерживает его, таким образом, нежелание использовать его понятно.
h1 {
margin: 0 0 1em;
}
div, p, p + h1, div + h1 {
margin: 1em 0 0;
}
Таким образом, первое h1
не будет иметь верхнего поля, в то время как любой h1
, который сразу следует абзацу или полю , имеет верхнее поле.
Эта попытка управляться частично специфическими особенностями того, что Вы разрабатываете для, но существует своего рода грубая иерархия к этим вещам в, скажем, типичном индексе блога:
Устанавливают пробел для Ваших абзацев, зная, что они собираются иногда произойти в последовательности - необходимо волноваться о том, как они смотрят как ряд. Оттуда, скорректируйте свои заголовки для контакта с границами между записями. Наконец, скорректируйте свой интервал нижнего колонтитула/тела, чтобы удостовериться, что конец страницы выглядит достойным.
Это - набросок. Как Вы в конечном счете заканчиваете тем, что присвоились, Ваше дополнение полностью ваше дело, но если Вы приблизитесь к нему с восходящей точки зрения, то Вы будете, вероятно, видеть меньше неожиданностей, поскольку Вы настраиваете первый наиболее распространенные / многочисленные элементы и затем позже менее общие.
Если Вы хотите некоторое пространство вокруг элемента, даете ему поле. Это означает, в этом случае, только дайте <h1>
нижнее поле, но дайте <p>
верхнее поле.
Помнят, когда два элемента вертикально смежны, и у них нет границы или дополняющий между ними, их коллапсом полей. Это означает, что только большее из этих двух полей рассматривают - они не добавляют вместе. Так это:
h1, p { margin: 1em; }
<h1>...</h1>
<p>...</p>
... привел бы к 1em пространство между заголовком и абзацем.
Я относительный новичок, но мое собственное решение проблемы, с которой, как я думаю, столкнулись вы и я (изменение полей для одного тега, может привести к расхождению в одной части сайта только нарушить ранее хороший интервал в другом месте?) теперь нужно выделить равные поля сверху и снизу для всех тегов. Возможно, вы захотите больше места над и под H1, чем для H3 или ap, но в целом я думаю, что страницы выглядят хорошо с одинаковыми пробелами над и под любым фрагментом текста, поэтому это решение хорошо работает для меня и соответствует вашему «простому» эмпирическое правило тоже, надеюсь!
Мнение, которое высказывает Jim, является ключом. Поля выходят из строя между элементами, они не дополнение. Если то, что Вы хотите, должно гарантировать, что существует 1em поле выше и ниже абзацев и заголовков и что существует 1em поле ниже заголовка и выше нижнего колонтитула, то Ваша CSS должна отразить это.
, Учитывая эту разметку (я добавил заголовок и поместил идентификаторы в заголовок/нижний колонтитул):
<body>
<div id="header"></div>
<h1>This is the heading</h1>
<p>This is a paragraph</p>
<h1>Here's another heading</h1>
<div id="footer">This is a footer</div>
</body>
необходимо использовать эту CSS:
#header {
margin-bottom: 1em;
}
#footer {
margin-top: 1em;
}
h1, p {
margin: 1em 0;
}
Теперь порядок Ваших элементов не имеет значения. Если Вы будете использовать два последовательных заголовка или запускать страницу с абзаца вместо заголовка, то она все еще представит способ, которым Вы делаете отступ.
Я склонен соглашаться с Вами, что первый вариант лучше. Это обычно, что мне нравится делать. Однако существует аргумент, который будет сделан этим, необходимо указать поле для каждого из тех элементов и обнулить его, если Вы не хотите применять его начиная с браузеров все поля дескриптора по-другому. < p> (и < h1> отметьте также, я думаю), будет обычно иметь поля по умолчанию данными браузером, если ни один не будет указан.