Jump to content
  • 0

Задача на смекалку


lavr-ik
 Share

Question

<div><img src="img.jpg" width="100" /><p>Какое-то количество текста, причем количество текста разное во всех блоках</p></div>

<div><img src="img.jpg" width="150" /><p>В этом блоке может быть меньше текста</p></div>

<div><img src="img.jpg" width="50" /><p>А в этом наоборот - может быть очень много, вплоть до нескольких предложений и словосочетаний.</p></div>

Блоки обтекают друг друга слева ( float: left; ).

Текст, находящийся в блоке, разумеется, идет в одну строку.

Задача: сделать так, чтобы блок имел ширину, равную ширине находящегося в нем изображения для того, чтобы текст переносился на следующую строку.

Условие: не использовать javascript, чистый CSS (на js решение элементарно). Также не использовать серверное решение жетского присваивания <div style="width: 100px">

Я сейчас копаю в сторону width: inherit.

Edited by lavr-ik
Link to comment
Share on other sites

Recommended Posts

  • 0

Ознакомьтесь с текстом задачи внимательнее: изображения разного размера, причем заранее неизвестного (т.е. нельзя, например, жестко прописать каждому блоку свой класс и свою ширину).

Link to comment
Share on other sites

  • 0

... :)

Смотри ситуация: каталог товаров, товары добавляются через админпанель каждый день. Размеры изображений самые разные (естественно, что они заранее неизвестны).

Серверное решение в жестком присваивании <div style="width: 100px"> тоже не принимается.

Link to comment
Share on other sites

  • 0

Комментарии по теме:

сделать без скриптов у вас не выйдет

копать в сторону width: inherit; бесполезно, т.к. в этом случае ширина должна быть задана у родителя, т.е. у <div>/

Устраивает?

Link to comment
Share on other sites

  • 0

Размер картинок разный, но ширину ее в хтмл прописывает скрипт, вручную это никто неделает. Также можна и диву ширину прописать скриптом, предварительно взяв ее из картинки, в результате меньше код, меньше изврата. И как по мне так это решение более верное.

Link to comment
Share on other sites

  • 0

С падачи Justnewone всё таки спрошу, а правда, чем так не устраивает:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>display: inline-block;</title>
<style type="text/css">
*{ margin: 0; padding: 0; border: none;}
div {
display: inline-block;
border: 1px solid #000;
text-align: center;
}
*html div { display: inline; zoom:1;} /* Для ИЕ6 */
*+html div { display: inline; zoom:1;} /* Для ИЕ7 */

</style>
</head>

<body>
<div>
<img src="PositionFixed/blob.png" alt="" />
<p>Текст, находящийся в блоке, разумеется, идет в одну строку.</p>
</div>

<div>
<img src="PositionFixed/blob.png" alt="" />
<p>Текст, находящийся в блоке, разумеется, идет в одну строку.</p>
</div>
<div>
<img src="PositionFixed/blob.png" alt="" />
<p>Текст, находящийся в блоке, разумеется, идет в одну строку.</p>
</div>
</body>
</html>

Link to comment
Share on other sites

  • 0

Хоть ктото, кроме Great Rash читал условие задачи??? Почему вы советуете то что ненужно человеку? В условии сказанно: сделать так чтобы блок стал шириной картинки, а текст если его много то становился в несколько строк и не растягивал блок. Может у вас ваши примеры и работают, но у меня нет.

Выход без скрипта невижу. Либо скрипт выполняющийся на стороне клиента, либо скрипт серверный.

Link to comment
Share on other sites

  • 0
Хоть ктото, кроме Great Rash читал условие задачи??? Почему вы советуете то что ненужно человеку? В условии сказанно: сделать так чтобы блок стал шириной картинки, а текст если его много то становился в несколько строк и не растягивал блок. Может у вас ваши примеры и работают, но у меня нет.

Выход без скрипта невижу. Либо скрипт выполняющийся на стороне клиента, либо скрипт серверный.

А как не работает?

Я хоть и не пробую сам, но кажеца psywalker вполне рабочий пример привел =)

Может у Вас на P приписан nowrap?

Вот топикстартер, кажеца точно прописал, иначе не может быть, чтобы P рвал ширину своего родителя.

Edited by Justnewone
Link to comment
Share on other sites

  • 0

Смотрю в фф3.0

Блоки становятся в линию, но их ширина зависит от текста. Если текста много то блок шире картинки, просто картинка по центру становится.

Пример полностью скопировал отсюда, только, естественно, картинки свои вставил

И как вы думаете будет ли работать inline-block в фф2?

Edited by mishka2
Link to comment
Share on other sites

  • 0
Смотрю в фф3.0

Блоки становятся в линию, но их ширина зависит от текста. Если текста много то блок шире картинки, просто картинка по центру становится

а если убрать P?

Или, скажем, P{display:inline}

Edited by Justnewone
Link to comment
Share on other sites

  • 0

:) скопируйте код и посмотрите во всех браузерах. Тогда получится конструктивный разговор.

-moz-inline-box

Также не использовать серверное решение жетского присваивания <div style="width: 100px">

Да, ненадо жестко задавать, надо задавать по ширине картинки, если она есть

Edited by mishka2
Link to comment
Share on other sites

  • 0

Что-то я лопухнул =) и вправду.

В качестве гола престижа набросал решение. Конечно с большим количеством оговорок и с экпрешном для IE6.

А вдруг у кого получится доточить.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>display: inline-block;</title>
<style type="text/css">
*{ margin: 0; padding: 0; border: none;}
div {
position:relative;
display: inline-block;
border: 1px solid #000;
border-width:1px 1px 0 1px;
text-align: center;
* display: inline;
* zoom:1;
}

IMG{
display:block;
}
P{
position:absolute;
left:-1px;
width:100%;
border: 1px solid #000;
border-width:0 1px 1px 1px;
}
</style>
</head>

<body>
<div>
<img src="img" alt="" width="150" height="50" />
<p>Текст, находящийся в блоке, разумеется, идет в одну строку.</p>
</div>

<div>
<img src="img" alt="" width="200" height="50" />
<p>Текст, находящийся в блоке, разумеется, идет в одну строку.</p>
</div>
<div>
<img src="img" alt="" width="150" height="50" />
<p>Текст, находящийся в блоке, разумеется, идет в одну строку.</p>
</div>
</body>
</html>

Edited by Justnewone
Link to comment
Share on other sites

  • 0

Естественно, я признал сразу что большое количество оговорок. Вдруг человек это увидит и будет сильно радовацца.

Если нет, то только измеряя рисунок и назначаю эту ширину родителю. по другому никак видать.

И все равно, инлайн-блок полюбому лучше чем флоат для таких задач.

Еще лучше наверна дисплей тейбл, но пока живы ослы - это не мой путь =)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy