Простая техника позиционирования изображения при обтекании текстом
Довольно часто при верстке создается необходимость расположить изображение слева от текста таким образом, чтобы текст находился справа от изображения и не сворачивал под него, т.е. должно это выглядеть вот так:
Алеаединица, в первом приближении, текстологически интегрирует микрохроматический интервал, при этом нельзя говорить, что это явления собственно фоники, звукописи.
Акцент интегрирует сонорный композиционный анализ, однако сами песни забываются очень быстро.
Такое позиционирование текста достигается, благодаря помещению его в дополнительный <div>
, которому указывается свойство display: table
. Если бы был всего один параграф с текстом, то дополнительный <div>
не понадобился бы, достаточно было бы применить display: table
к блоку параграфа. Однако, если на практике используется несколько параграфов, то их приходится помещать в отдельный контейнер, иначе второй и последующие параграфы съедут под изображение.
В случае, если изображение всегда будет иметь статическую ширину (например, данная техника подойдет при использовании аватаров в комментариях на блоге), то существует способ, который позволяет отказаться от необходимости использования дополнительного контейнера для текста и тем самым сделать разметку более простой.
Описанное ниже решение применимо в двух следующих случаях:
- Если используется более одного абзаца с текстом.
- Если изображение имеет постоянную ширину.
Пусть, к примеру, у нас будет следующий html-код:
<ul>
<li>
<img src="image.jpg" alt="" />
<p>Параграф с текстом</p>
<p>Еще один параграф с текстом</p>
</li>
</ul>
Приступим к стилям.
Шаг 1-й
Для начала создадим слева от текста отступ, в который уместится изображение, и добавим к последнему обтекание текстом:
ul li {padding-left: 147px}
ul li img {float: left}
Получаем вот такую картину:
Шаг 2-й
Следующим стилем мы позиционируем изображение:
ul li img {
float: left;
position: relative;
left: -135px;
}
Пример обретает следующий вид:
Шаг 3-й
Теперь остается ликвидировать разрыв между изображением и текстом путем добавления отрицательного отступа справа от изображения:
ul li img {
float: left;
position: relative;
left: -135px;
margin-right: -135px;
}
И вот результат:
Как альтернатива, изображение можно позиционировать абсолютно.
Комментарии (44)
Александр, в соответствии с xhtml-стандартом нельзя использовать параметры hspasce и vspace.
http://cssing.org.ua/2005/07/03/display-table/ — это просто
а в статье — усложнено и семантически неправильно.
Seigiard, прежде чем давать эту ссылку, нужно было внимательно прочитать мою статью.
Почитал, ну что можно сказать достойно внимания, только прошу обратить внимание и на мою реализации данной задачи:
И обрабатываем все вот этим клочком CSS:
в итоге задачу решаем полностью, а кода на 2 строки меньше, да и по элегантней смотриться, всего…
Shur, спасибо. Тоже хороший вариант.
Также отправил этот вариант его создателю, получил одобрение и признание того, что мой вариант более гибок и дает больше возможностей.
Так что можете смело использовать.
Да и с браузерами будет меньше проблем, особенно если потребуется для этого изображения создать рамку, отступы (padding) и т.д.
Кстати, а чем не подходит такое решение:
В html-виде редактора записи картинку прописываем следущим образом(т.е. добавляем параметры margin-left: N px; margin-right: N px;):
Где N – нужное число (я указываю 10px и 15px для margin-left и margin-right соответсвенно).
Sonikelf, что-то я не понял вашего решения.
Черт, написал длинный коммент, но его захавало спамфильтром.
Впрочем, наверное то, что я описал не совсем по теме, ибо Вы говорили про верстку, а я про картинки и текст в записях. Впрочем, вполне вероятно, что в верстке это тоже бы сработало.
Вообщем, если спамфильтр не захавал насмерть коммент, а сложил куда-то – гляньте, может я о том и пригодится, а может нет :)
Видимо все-таки спам-фильт захавал коммент насмерть =) Все ваши комменты здесь. В спаме ничего нет.
Жалко. Писал долго и много :)
Потом может перепишу.. Как-нибудь.
Спасибо. Давно хотел так сделать но все руки не доходили найти описание.
А не проще ли вот так:
Александр, прочитайте внимательно статью, прежде чем писать это.
Вот еще похожее решение нашел :)
Статья: http://ghettocooler.net/2005/11/13/
Пример: http://ghettocooler.net/img/floats-no-wrap/
Давненько было написано :)
img
{
float: left;
position: relative;
margin-left: – /* маргин на который сдвинули*/
}
и все
хм… ребят а вот я все время весь контент пихаю в div’ы привык из-за пользования визуальным редактром )) и вот у меня наоборот по вашему методу получается: пихать текст в отдельный див) так что пошел дальше искать )
:D нашел про див) мб ко му то пригодится: прямо в нужный див в параметры добавляем все замечательно! ) написано еще после того как обтекание закончилос дописать: только и без этого все прекрасно )
А можете подсказать как установить картинку в нужном мне месте дива? Страница у меня генерируется автоматически, поэтому влезть в тег img не могу