Вы угадываете правильно. Абсолютное позиционирование выводит элемент из нормального потока и позиционирует его на своем собственном уровне на top:0;left:0
относительно родительского элемента контейнера, для которого установлено position:relative
- если позиция не установлена: относительно относительно его тела. Если вы не определите высоту для родительского div, он получит 0 (или 1px или высоту размера шрифта по умолчанию - в зависимости от того, в каком браузере вы просматриваете). Я не вижу необходимости в абсолютном позиционировании.
Попробуйте что-то вроде этого:
/* css */
.label {float:left;width:auto;}
.input {float:left;width:auto;}
.clear {clear:both;height:1px;font-size:1px;line-height:1px;} /* 1px line clear */
/* html */
<form>
<fieldset>
<div class="field">
<div class="label"><label>Username:</label></div>
<div class="input"><input type="text" /></div>
<div class="clear"></div>
</div>
</fieldset>
</form>
Я часто использую этот вид компоновки для структурирования сложных форм, поскольку вы можете легко включать валидаторы, подсказки и другие дополнительные элементы, если они вам нужны.
Кроме того, написание встроенного CSS может стать очень неприятным, когда вам придется изменить дизайн. Вместо этого используйте классы.