Как мога да имам дисплей: блок; елементите се увиват около плаващ елемент, както би направил текстът?

Потърсих малко в Гугъл и намерих редица препратки към проблема, който се опитвам да разреша, но всички предлагат едно и също решение, което не мога да използвам. Проблемът е, че имам странична лента, плаваща надясно, и някои div, които трябва да се разширят до ширината, останала от страничната лента, но след това се разширяват до пълната ширина, когато страничната лента вече не им пречи да го направят.

Jsfiddle е тук: http://jsfiddle.net/qdk3n/

Решението, намерено другаде, е да се приложи overflow: hidden; към .left елементите. Това постига точно ефекта, който искам: div, които споделят хоризонтално пространство със страничната лента, се разширяват само до страничната лента, но допълнителните div се разширяват до пълната разрешена ширина. За съжаление ще има абсолютно позициониран елемент в левите div, който надвишава размера на div и ще бъде изрязан, ако приложа overflow: hidden;, така че не мога да го използвам. Има ли някакъв начин да постигна това, което се опитвам да направя, без да използвам overflow: hidden;?

Забележка: Не знам размера нито на страничната лента, нито на някой от левите div преди времето за изобразяване на страницата и не мога да използвам Javascript по какъвто и да е начин, форма или форма (тъй като това е предназначено да работи за потребители с деактивиран JS ). Единственото измерение, което мога да задам във всичко това, е ширината на страничната лента; div-овете трябва да са плавни и не мога произволно да избера някакъв брой от тях, за да удължат само част от пътя.

Също така имайте предвид: Виждал съм това: Разтягане на Div и след това обвиване около други плаващи div. Точно това се опитвам да направя, но единственото истинско решение е свойството overflow: hidden; и не мога да го използвам.


person Scott R    schedule 12.05.2012    source източник
comment
Можете ли да дадете повече подробности за това, че ще има абсолютно позициониран елемент в левите div, който надвишава размера на div? В идеалния случай, пример.   -  person thirtydot    schedule 12.05.2012
comment
Вижте jsfiddle и добавете overflow: hidden; към .left CSS. Ефектът, който се получава, е точно това, което искам да се случи, с изключение на това, че трябва да не скривам преливащо съдържание... така че не мога да използвам overflow: hidden;   -  person Scott R    schedule 13.05.2012
comment
Има ли нещо лошо в това? jsfiddle.net/thirtydot/qdk3n/54   -  person thirtydot    schedule 13.05.2012
comment
За съжаление, трябва да прикача към a:hover ul селектор, който ще бъде вътре в съдържанието на div. Ако ставаше въпрос само за поставяне на един position: absolute; div, нямаше да е проблем, но той трябва да бъде дете на друг елемент вътре в стилизирания div. Това обаче е творческо решение и ще го имам предвид за в бъдеще.   -  person Scott R    schedule 14.05.2012


Отговори (1)


Освен ако не съм пропуснал нещо, не мисля, че е възможно да се постигне точно това, което искате.

Причината overflow: hidden; да променя поведението на (display: block;) елементите е нещо, наречено „Контекст на форматиране на блокове“, за което можете да прочетете тук;

https://developer.mozilla.org/en/CSS/block_formatting_context http:// www.communitymx.com/content/article.cfm?cid=6BC9D

Технически, можете да запазите елементите display: block; и да ги накарате да зачитат плаващата странична лента, като също така преместите левия си div, но това едва ли ще има ефекта, който искате.

Въпреки това, всяко вградено съдържание в левите ви divs ще зачита плаващата странична лента, така че наистина не виждам необходимост divs да се държат така, както описвате (може би разяснете причините зад това, за да получите по-конструктивна обратна връзка).

person xec    schedule 12.05.2012
comment
Плаващите вляво div имат стилове, които не искам да разширявам под страничната лента. Искам левите плаващи divs да поддържат своя собствен стил и да оставят страничната лента на собствените си стилове; неща като граници и фонове трябва да останат в определеното им хоризонтално пространство. Знам защо overflow: hidden; работи, но се надявах на алтернатива. - person Scott R; 13.05.2012