Как сделать динамический width для блоков?

Есть 2 блока, 1 должен быть слева другой справа.
Суть такая, в правом блоке пишется текст (какой изначально мы не знаем), тоесть текст растягивает правый блок на неизвестную нам ширину. А вот левый блок должен вплотную прилегать к правому блоку.

Для лучшего понимания я начеркал пример:
jsfiddle.net/7dkhyLkv

Как вообще избавится от четкого указания width, что бы левый блок всегда прилегал к правому и при этом правый блок может растягиваться исходя из текста ?
  • Вопрос задан
  • 732 просмотра
Решения вопроса 2
@whats
Алексей Николаев Очень умиляют ответы использовать таблицы с не табличными тегами. Это как гвозди черенком от молотка забивать. Для чего все эти телодвижения ?
У нас есть 2 блока, один на всю ширину, другой который прилипает к какому-то краю. Первая мысль верная, использовать таблицы. Есть свои минусы, ну и новое поколение "крутых" верстальщиков считает это не Тру :) Такие все в гуглах работают обычно, таблицы - старье же!

Второе решение уже требует каких то минимальных знаний в верстке, а это понимание контекстов наложения и поведение потока. Но и тут все не очень сложно, мы знаем что свойство overflow создает новый поток, если оно его конечно не отменяет. А это значит что мы никогда не переместимся под элемент у которого стоит обтекание. Задав это свойство левому столбцу получается то что и планировал ТС. Но тут есть минус, это нарушение семантичного порядка. Блок с обтеканием должен идти первым, что бы его обтекали последующие элементы. Так же вижу проблему с нарушением потока в правом блоке, он получается оторван от контекста.
jsfiddle.net/7dkhyLkv/3

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

Хотел бы обратиться к новому поколению верстальщиков
Я понимаю что сейчас у вас халява, нет того порога входа в эту отрасль, который был при Maxton, IE6 и первых версиях Netscape. Давайте будем стремиться к стандартам, которые старое поколение так долго создавало для вас(Те кто верстал под эти браузеры меня поймут). Я не утверждаю что этого категорически делать нельзя, хотя в своей практике я не встречал ни одной задачи где это было бы единственным решением. Но ведь это так просто...
Давайте не будем блочным элементам давать табличное поведение, а span'ам блочное. Они не для этого создавались. Ведь это так просто не вкладывать в инлайн элементы блоки, а идти от большего к меньшему. От вас не убудет, а вот вашему, более аккуратному товарищу по верстке будет приятно читать ваш код.
Ответ написан
Если я верно вас понял, вам необходимо поведение таблицы. Используйте display и его свойства table и table-cell соответственно. При этом неясно: вам необходимо, чтобы текст был в одну строку (то есть, сжимал левый блок до бесконечности, пока экран не перенесет его), или все же есть пределы? Или вы вручную собираетесь устанавлиать переносы? В первом и последнем случаях ставите левому блоку width:100%, а второму блоку - white-space:nowrap, и будет работать так, как вы хотите.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Hikkomori
@Hikkomori
Как вариант - сделать обертку или какой другой элемент с width/height 100%, набросать скриптик на JS, который будет получать ширину этой обертки и правого блока, и подстраивать ширину левого блока в зависимости от этих размеров (лучше в процентах, чтобы ничего не попортилось при смене ширины окна.
Ответ написан
abler98
@abler98
Software Engineer
Вот попытался сделать, но так в левой части текст не переноситься до правого блок, правый блок просто сверху наложен
https://jsfiddle.net/abler98/8hrtgn5c/
---
Вот ещё один вариант, как уже говорили выше
https://jsfiddle.net/abler98/vasfwecv/
---
P.S. Второй вариант лучше )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы