Проблема частично заключается в объявлениях CSS:
/* Begin first declaration for <label class="error" /> */
label.error {
color: red;
position:absolute;
}
/* Begin second declaration for <label class="error" />. Nothing inherently wrong with this, but a bit odd considering the simplified fiddle.*/
label.error {
float: left; /* Kinda replaces previously declared absolute position as "float" and "position" are kinda, but not really, mutually exclusive properties. */
right: 30px; /* Useless declaration (for now) as "right" is used wih "position" not "float". */
color: #ff714d;
position: absolute; /* Replaces previously declared float and makes the previously assigned "right" property useful again. */
font-family: 'subhead', helvetica, verdana;
letter-spacing: 1px;
text-transform: lowercase;
}
Поскольку position: absolute;
является последним объявлением (в позиции v. Объявлениями с плавающей точкой), элемент позиционируется абсолютно.
Первая часть проблемы заключается в том, что, поскольку свойство top
не было объявлено, а display
метки равно block
, браузер размещает верхнюю часть на следующей строке вниз (где верхняя часть будетв статическом потоке).
Вторая часть проблемы заключается в том, что, поскольку было объявлено float
, браузер все еще пытается float
элемент (что снова приводит к тому, что браузер позиционируетсверху вниз на следующую строку).
Решение (пока) состоит в том, чтобы удалить объявление float
и объявить top
из 0
в стилях label.error
.
label.error {
color: red;
position:absolute;
}
label.error {
top: 0; /* Replaces "float: left;" and fixes the display. */
right:30px;
color: #ff714d;
position: absolute;
font-family: 'subhead', helvetica, verdana;
letter-spacing: 1px;
text-transform: lowercase;
}
или в одном объявлении:
label.error {
color: red;
position: absolute;
right: 30px;
top: 0;
color: #ff714d;
position: absolute;
font-family: 'subhead', helvetica, verdana;
letter-spacing: 1px;
text-transform: lowercase;
}
Обновление кода до этого представляет последнюю проблему, заключающуюся в том, что все сообщения об ошибках теперь появляются в самом верху документа.
Это вызванообъявление position: absolute;
как элементы с абсолютным позиционированием удаляются из обычного потока документов и позиционируются (абсолютно) к ближайшему нестатически позиционированному элементу-ответчику.
В этом случае их нет, поэтому <label class="error" />
элементы абсолютно расположены на <body />
.Таким образом, последняя часть решения состоит в том, чтобы сделать элементы p
нестатически расположенными (поскольку именно в этом случае ошибки должны быть абсолютно точно размещены).
Окончательный CSS:
p {
position: relative;
}
label.error {
color: red;
position: absolute;
right: 30px;
top: 0;
color: #ff714d;
position: absolute;
font-family: 'subhead', helvetica, verdana;
letter-spacing: 1px;
text-transform: lowercase;
}
Обновленная (и работающая) скрипка.