Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Прижать часть строки влево, а часть вправо - как? (https://javascript.ru/forum/xhtml-html-css/26571-prizhat-chast-stroki-vlevo-chast-vpravo-kak.html)

GRIG 13.03.2012 15:43

Прижать часть строки влево, а часть вправо - как?
 
Народ! Помогите, кто чем может - у меня уже голова кипит от перенапряжения.
Ситуация такая: в HTML-документе есть кусок, в котором несколько раз повторяется такая конструкция:
<div>
  <span name="property">...</span>
  <input type="text" name="value" value="" />
  <img src="......" />
  <img src="......" />
  <img src="......" />
</div>

Все поля input имеют одинаковую ширину 300 пикселов. Все картинки являются квадратиками 16 на 16 пикселов. А вот что написано внутри span'ов - вещь сильно переменная. И, что значительно хуже, что находится слева от span'а - тоже вещь сильно переменная (запросто может иметь для разных span'ов разную ширину).
Нужно сделать так, чтобы все span'ы были сдвинуты до упора влево (каждый в своем div'е), а поля input и картинки (которые на самом деле будут кнопками) были сдвинуты до упора вправо (чтобы в совокупности от всех div'ов они выглядели ровной стройной колонной).
И неприятность заключается в том, что все это сделать нужно только силами CSS с минимальной модификацией HTML-тегов.
Одни только картинки прижать к правому краю получается, если на объемлющий div поставить style="position:relative", а на каждую из картинок в нем поставить style="position: absolute; right: ..." (и посчитать правильный отступ для каждой из картинок). Но при таком подходе input остается сдвинутым влево. Если дополнительно к тому на input тоже поставить style="position:absolute; right:..." - то результат оказывается непонятным: во-первых, input'ы от разных блоков накладываются друг на друга, и, во-вторых, нахрен летит верстка того, что находится слева.
Есть какие-нибудь идеи?

T-sh 13.03.2012 16:14

родительскому диву назначить:
text-align: right;
a спану: float: left;

GRIG 13.03.2012 16:27

Отлично! Именно то, что нужно. Спасибо огромное!
Только никак не могу врубиться: а почему именно так?

T-sh 13.03.2012 16:30

Цитата:

Сообщение от GRIG (Сообщение 162868)
Отлично! Именно то, что нужно. Спасибо огромное!
Только никак не могу врубиться: а почему именно так?

в смысле, почему именно так? :)
можете наоборот сделать, если хочется: text-aling: left — родителю;
float: right — детю.. суть не изменится

логика тут простая:
всё, что находится внутри родительского блока прижимаем вправо, а нужный нам элемент приклеиваем влево :)

GRIG 13.03.2012 16:33

Нет. Я в том смысле, что решение оказалось очень неожиданным, и при этом неожиданно простым.

T-sh 13.03.2012 16:35

Цитата:

Сообщение от GRIG (Сообщение 162871)
Нет. Я в том смысле, что решение оказалось очень неожиданным, и при этом неожиданно простым.

да в css вообще нет ничего сложного :) главное, правильно понять, что именно требуется.

GRIG 15.03.2012 13:37

Дополнительный вопрос по этой теме: если в исходном блоке (с учетом данного выше ответа) заменить input на span - то это нахрен корежит всю верстку слева от блока. Почему?

T-sh 15.03.2012 13:48

Цитата:

Сообщение от GRIG (Сообщение 163308)
Дополнительный вопрос по этой теме: если в исходном блоке (с учетом данного выше ответа) заменить input на span - то это нахрен корежит всю верстку слева от блока. Почему?

весь код покажи, и html и css.

GRIG 15.03.2012 15:31

Это достаточно сложно.
Чисто визуально создается впечатление, что после такой замены input'а на span у очередного блока margin-left отсчитывается не от родительского div'а, а от предыдущего по размещению (и образуется своеобразная "обратная лестница"). В условиях, когда подобные блоки хитрым образом вложены один в другой, это мягко говоря, не одно и то же.

T-sh 15.03.2012 15:34

Цитата:

Сообщение от GRIG (Сообщение 163340)
Это достаточно сложно.
Чисто визуально создается впечатление, что после такой замены input'а на span у очередного блока margin-left отсчитывается не от родительского div'а, а от предыдущего по размещению (и образуется своеобразная "обратная лестница"). В условиях, когда подобные блоки хитрым образом вложены один в другой, это мягко говоря, не одно и то же.

в смысле это достаточно сложно? :)

слова словами, а код нужен. без него не смогу сказать, что не так..

возможно, обычный clear:both; в css поможет.


Часовой пояс GMT +3, время: 20:23.