Решение 1: Использование Flex
Я бы порекомендовал использовать flex
и justify-content: space-between
. Единственным недостатком его использования было бы, если вы поддерживаете более старые браузеры, такие как IE10 - тогда вы можете проверить https://caniuse.com/#search=flex для получения дополнительной информации.
Что касается space-between
, то просто, как согласно MDN
Элементы равномерно распределены внутри контейнера выравнивания вдоль главной оси. Интервал между каждой парой соседних предметов одинаков. Первый элемент находится на одном уровне с основным краем, а последний элемент находится на одном уровне с основным краем.
Это означает, что первый дочерний элемент будет выровнен по началу родительского элемента, а последний дочерний элемент выровнен по концу, а оставшееся пространство будет разделено поровну между остальными дочерними элементами, если они существуют, что даст вам желаемую разметку если img
всегда последний ребенок, независимо от того, сколько существует детей div
.
Лично я бы обнаружил, что использование flex
- это самый удобный и один из самых чистых способов «позиционировать» и «размещать» различные элементы на странице.
Вы можете найти код ниже и рабочую скрипку здесь
HTML
<ol class="step-list">
<li class="step">
<p>Step 1</p>
<img src="https://placehold.it/150x150?text=Step1" alt="">
</li>
<li class="step">
<p>Step 2</p>
</li>
<li class="step">
<p>Step 3</p>
</li>
<li class="step">
<p>Step 4</p>
<img src="https://placehold.it/150x150?text=Step4" alt="">
</li>
</ol>
CSS
.step-list {
list-style: none;
}
.step {
display: flex;
justify-content: space-between;
}
Решение 2: Использование Float
Вы также можете использовать float
, но в этом случае вам нужно очистить p
вместо img
и выпустить его тоже.
Поскольку все элементы вмещающих элементов являются плавающими, важно добавить clearfix
к тегу li
, чтобы не свернуться ни к чему, вы можете найти дополнительную информацию здесь .
Так что ваш код хотел бы это, и вы можете найти рабочую скрипку здесь
HTML
<ol class="step-list">
<li class="step">
<p>Step 1</p>
<img src="http://placehold.it/150x150?text=Step1" alt="">
</li>
<li class="step">
<p>Step 2</p>
</li>
<li class="step">
<p>Step 3</p>
</li>
<li class="step">
<p>Step 4</p>
<img src="http://placehold.it/150x150?text=Step4" alt="">
</li>
</ol>
CSS
.step-list {
list-style: none;
}
.step img {
float: right;
}
.step p {
float: left;
}
/*This is what is called a clearfix solution, for the floating problem*/
.step::after {
content: "";
display: block;
clear: both;
}
Не стесняйтесь задавать мне больше вопросов, если что-то неясно.