Когда вы используете position:absolute;
, элемент выводится из обычного потока страниц.Поэтому он больше не влияет на макет элемента контейнера.Таким образом, элемент контейнера не принимает во внимание его высоту, поэтому, если нет ничего другого для установки высоты, тогда контейнер будет иметь нулевую высоту.
Кроме того, установка display:inline-block;
не имеет никакого смысла для элементаэто position:absolute;
.Опять же, это потому, что абсолютное позиционирование убирает элемент из потока страниц.Это противоречит inline-block
, который существует только для того, чтобы влиять на то, как элемент вписывается в поток страниц.Все элементы, которые position:absolute;
, автоматически обрабатываются как display:block
, поскольку это единственный логический режим отображения для абсолютного позиционирования.
Если вам необходимо абсолютное позиционирование, тогда единственное решение для вашегоПроблема с высотой - установить высоту контейнера.
Однако я подозреваю, что вы можете обойтись без абсолютного позиционирования.
Похоже, вы пытаетесь расположитьвторой <span>
в каждом блоке в фиксированной позиции в блоке, чтобы они выровнялись.
Это классическая проблема CSS.В «старые добрые времена» веб-дизайнеры делали это, используя таблицу с фиксированной шириной в ячейках таблицы.Это, очевидно, не ответ для современных веб-дизайнеров, но это то, что вызывает много вопросов.
Есть несколько способов сделать это с помощью CSS.
Самый простойустановить оба элемента <span>
на display:inline-block;
и присвоить им фиксированную ширину.
например:
<div class='section'>
<span class="element-left">some text</span>
<span class="element-right">some text</span>
</div>
со следующим CSS:
.section span {display:inline-block;}
.element-left {width:200px;}
.element-right {width:150px;}
[РЕДАКТИРОВАТЬ] после того, как вопрос был обновлен
Вот как я могу добиться того, о чем вы сейчас спрашиваете:
<div class='section'>
<span class="element-left"><span class='indent-0'>some text</span></span>
<span class="element-right">some text</span>
</div>
<div class='section'>
<span class="element-left"><span class='indent-1'>some text</span></span>
<span class="element-right">some text</span>
</div>
<div class='section'>
<span class="element-left"><span class='indent-2'>some text</span></span>
<span class="element-right">some text</span>
</div>
со следующим CSS:
.section span {display:inline-block;}
.element-left {width:200px;}
.indent-1 {padding:10px;}
.indent-2 {padding:20px;}
.element-right {width:150px;}
Небольшая дополнительная разметка, но она дает желаемый эффект.