Christian Zill: Lego mit CSS: Der "Flipped-L-Float" mit Fliesstext um Ecken

Liebes Forum,

Ich habe ein CSS-Layout-Problem. Ich habe 3 ineinander verschachtelte Float-DIVs in "L"-Form:

AAA  BBBB  CCCCCCCC
AAA  BBBB  CCCCCCCC
AAA  BBBB  CCCCCCCC
AAA  BBBB  CCCCCCCC
     BBBB  CCCCCCCC
BBBBBBBBB  CCCCCCCC
BBBBBBBBB  CCCCCCCC
BBBBBBBBB  CCCCCCCC
           CCCCCCCC
CCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCC

ich möchte C um B um A fliessen lassen. In A, B und C ist Fliesstext im Blocksatz, also ":justified". Getestet in Opera, FF, Mozilla und IE6.
Alles OK, ausser IE. Ich versuche das Problem zu beschreiben:

Das Layout ist "liquid", ausser A alles in Prozent der Screenbreite, ich hoffe man kann schon erkennen weswegen der Name des Themas: "L-Flip-Float"

Es kommen jetzt 2 Screenshots, beide OK in ALLEN von mir getesteten Browsern. Ich hoffe ich krieg das jetzt hin mit den Bildern hier, evtl. die URL eintippen, also zweimal, in verschiedenen Fenstergrössen/-breiten:

lego_ok.snap

Wenn man jetzt das erste Bild, also das Fenster;-),  schrumpft, sollen 2 Sachen passieren:

1. C(gelbes L) und B(rotes L) sollen in der Breite schmaler werden, A(blauer Kasten) hat eine festgelegte Pixelbreite.
2. Und ausserdem, weder B(rot) noch C(gelb) sollen schmaler werden können als der blaue A-Kasten.

Das funktioniert auch so, also richtig, in allen Testkandidaten. Innerhalb des roten und des gelben "L"s marschiert der Fliesstext in geordnetem Blocksatz korrekt um die Ecken. Und wenn man das Browserfenster verschmälert ergibt sich, jedenfalls bis zu einer gewissen Minimal-Breite, auch immer dasselbe GESUNDE Bild, und soweit in allen Browsern auch noch identisch:

IE_lego_ok.snap

Leider, jetzt,  kommt doch noch ein Problem:-( Wenn ich das Fenster noch ein bischen mehr verschmälere, bleiben die gewünschten Minimalbreiten immer erhalten, nur nicht im IE. Ich hoffe man kann das Bild sehen:

IE_lego_notok.snap

Obwohl das rote "L-Float" noch genauso breit ist wie es soll, so breit wie die blaue A-Box, auch im IE, das "Null eins zwei drei..." wird trotzdem schmaler. Und zwar NUR im IE. Ich will aber dass es immer mindestens so breit bleibt wie die blaue A-Box obendrüber.
Das ist das Problem.

Ich habe viel, und jetzt  tagelang, probiert, und die bunten Streifen geben Zeugnis. Ich weiss nicht mehr weiter. Ich ärgere mich nur noch ein bischen. Ich bin matt. Was ich auch probiert habe: Im IE wird der rote Fliesstext zu früh umgebrochen, und NUR dort anscheinend.

Bevor ich noch den Quelltext rüberreiche, sei es gestattet, dass ich meine Fragen formuliere:

1. Funktioniert mein Ansatz wenigsten, wenn schon nicht in IE6, denn doch in IE7?

2. Weiss jd. weiter, welche IE-Bugs sich hier evtl. bemerkbar machen könnten?

3. Gibt es überhaupt Hoffnung auf eine Lösung im IE6?  Wenn man meine DIVs anders verschachtelt vielleicht? Oder im CSS? Oder egal was, wenigstens so ähnlich wie ein L? Und zuletzt vielleicht: Könnte man wenigstens sagen, dass es für den IE6 erwiesenermassen keine Lösung gibt, was man eben nicht ändern kann?

So, jetzt der Quelltext. Erstmal ein Link, wo man den "L-Flip-Float" in Aktion testen kann, nicht im Vollbildfenster ;-), wenn der Link nicht geht evtl. tippen:
http://zinux.de/selfhtml/css_lego/myflow.html

Hier gibt's den QUELLCODE eben verlinkter Datei "myflow.html" farbig formatiert:
http://zinux.de/selfhtml/css_lego/myflow_src.html

Falls der Link nicht klappt derselbe Quelltext nochmal, ein zweites Mal,  gleich nach dem Scherenstrich, und nach meinem Danke für die renovierte Texteingabe( Schön! Auffällig && trotzdem nichtstörend, optimal gelungen jetzt, m.E. )

Also, viele freundliche Abschiedsgrüsse aus Kaiserslautern,

Christian

------8< ------------8< -------------8< ---------------------8< ------------8< -------------8< ---------------

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
  
<head>  
<meta http-equiv="content-type" content="text/html; charset=utf-8">  
<title>CSS-Lego: Der "L-Flip-Float"</title>  
<style type="text/css">  
  
    /*  
    Der "L-Flip-Float"  
  
     AAA-BBBB-CCCCCCCC  
     AAA-BBBB-CCCCCCCC  
     AAA-BBBB-CCCCCCCC  
     AAA-BBBB-CCCCCCCC  
     BBBBBBBB-CCCCCCCC  
     BBBBBBBB-CCCCCCCC  
     BBBBBBBB-CCCCCCCC  
     CCCCCCCCCCCCCCCCC  
     CCCCCCCCCCCCCCCCC  
     CCCCCCCCCCCCCCCCC  
  
    */  
  
    html{ width:100%; height:100%; margin:0px; padding:0px; border:0px; }  
    body{ width:100%; height:100%; margin:0px; padding:0px; border:0px;font-size:14px; font-family:'monospaced Century Gothic';  
       vertical-align:baseline; background:transparent;  
        }  
    div{  
     border:0px solid #009900;  
     text-align:justify;  
     font-weight:bold;  
     margin:0px; padding:0px; border:0px;  
    }  
    .inner{ width:100% }  
  
    .Double_flippedL_Float div {  
     /*background-image:url('./millimeter.png'); */  
     font-weight:bold; font-size:18px; line-height:20px;  
    }  
  
</style>  
</head>  
<!-- ================================================================================================================================  -->  
<body  style="margin:0px; background:black; width:98%">  
  
    <div class="Double_flippedL_Float" style="background:white; min-width:150px; overflow:visible; width:100%;">  
  
        <div style="float:left; width:50%; text-align:justify; background-color:green; min-width:150px; ">  
  
         <div class="inner" style="min-width:150px;text-align:right;position:relative; ">  
  
          <div style="float:left;  padding-right:0px; width:150px; min-width:150px; max-width:150px;">  
                    <div style="background-color:#9cceff; /*-- B-L-U-E --*/ color:#000066; text-align:left;  
         min-width:150px; width:150px; max-width:150px; overflow:hidden;  
        ">  
         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 6 7 8 9  
         <br><img src="./px.gif" width="1" height="1" alt="" style="clear:left;height:0px; overflow:hidden;  min-width:150px; /*display:none;*/  
        "></div>  
          </div>  
  
          <div id="red" style="background-color:#f78ca5; /*-- R-E-D --*/ color:#990000;  
        min-width:150px; display:block;  
        /*--- 4IEonly: ---*/ /* margin-left:-150px; padding-left:150px; overflow:hidden; */  
       ">  
  
        <span style="background:#d76c85; border-right:1px solid red; border-top:1px solid #993333;">Null eins zwei drei vier fuenf sechs sieben acht neun null eins zwei drei vier fuenf sechs sieben acht neun zehn  
        0123456789012</span>  
        <!--  HIER TRAT DAS PROBLEM GERADE EBEN IN ERSCHEINUNG ,  IE<7 KANN KEINE MIN-WIDTH,  
        Die rote Box bleibt zwar so breit wie der blaue Kasten, nur die Inline-Boxes schrumpfen ( o.a. 50% entsprechend? )  
        -->  
  
        <!-- Jetzt, hilft aber nicht, eine Box breit wie blaue Box( 150px ), + 1 Break( wg. justify ), trotzdem: KEINE Mindestbreite d. roten Kasteninhalts. -->  
        <div style="height:10px; width:150px; overflow:hidden; background:red;  
         "><img src="./px.gif" width="150" height="1" alt="" style="background:red; /*display:none;*/  
         "><br style="font-size:1px; line-height:1px;"><!--div style="height:1px; display:none;  
          overflow:hidden; width:150px;">01234567890123  
        --></div>  
       </div>  
          <div style="clear:left; background-color:#0033ff; /*-- C-Y-A-N  UNVISIBLE --*/ width:100%; color:cyan;  
        line-height:5px; font-size:5px; overflow:visible; height:10px; width:100%; text-align:right;  
       "><!-- padding-left=Breite d. linken Rands von Blau, dto. right  
  
       --><img src="./px.gif" width="150" height="10" alt="" style="clear:left; /*--  Y-E-L-L-O-W  --*/height:5px; background:yellow;  
         /*overflow:hidden; *//*display:none; */  
         min-width:150px; position:relative; right:0px;  
        "><!-- lastrow_of_red, gruener Balken  
  
       --></div>  
  
       Abcdefghij  
  
         </div>  
  
        </div>  
        <div style="background-color:#ffef9c; /*yellow*/ color:#cc6600;  display:block;overflow:visble; margin-left:0px;  
     "><!-- padding-left=Breite d. linken Rands von Gelb, dto. right -->  
  
            A AA 01234 56789  01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789  
      01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789 01234 56789  ZZ Z  
      <!-- img src="./px.gif" width="800" height="10" alt="" style="background:red;" -->  
  
        </div>  
        <div style="background-color:yellow; clear:both;">  
      Lastrow_yellow  
        </div>  
  
    </div>  
  
</body></html>  
  

  1. Hallo Christian,

    1. Gibt es überhaupt Hoffnung auf eine Lösung im IE6? ... Oder egal was

    ich könnte dir folgendes anbieten.
    <style type="text/css">
    #red { width:expression(document.getElementById('green').offsetWidth > 150 ? 'auto' : '150px'); }
    </style>

    Die id="green" musst du natürlich noch dem entsprechenden <div> verpassen. Aber vielleicht hat ja noch jemand eine bessere Idee die ohne javascript auskommt.

    Grüße,

    Jochen

    --
    Kritzeln statt texten:
    Scribbleboard
  2. Hi,

    1. Funktioniert mein Ansatz wenigsten, wenn schon nicht in IE6, denn doch in IE7?

    ja.

    Könnte man wenigstens sagen, dass es für den IE6 erwiesenermassen keine Lösung gibt, was man eben nicht ändern kann?

    mit Sicherheit zwar nicht, aber ich würde den IE6 diesen Fehler einfach machen lassen.

    freundliche Grüße
    Ingo

    1. Hi,

      _________________________________
      @Ingo :-),

      ... wenigsten, wenn schon nicht in IE6, denn doch in IE7?
      ja.

      JA?! ♪♫ Si-ie-ben Brüc-ken mußt' er  geeh'n,  um  das  miien-width, ♪, ♫zu ver-steh'n … ♫ ♪♫♫

      ... wenigstens sagen, dass es für den IE6 erwiesenermassen keine Lösung gibt ...?
      mit Sicherheit zwar nicht, aber ich würde den IE6 diesen Fehler einfach machen lassen.

      Ich lass' ihn noch ein bischen _machen_, aber grab' schon mal. Ende! EIN-mal ♪♫ in die Grube, nur die Wurst ♪♫♫♪....:-)).
      _________________________________
      @Jochen :-),

      ... eine Lösung im IE6? ...
      ... #minwidth { width:expression(document.getElementById('rotesL').offsetWidth > 150 ? 'auto' : '150px') } ...

      JS. Hm, :(, dachte ich erst, hab' dann aber doch mal danach gegugglt, und gefunden _bei_ "expression": 2 Lösungen bzgl. min-width, Deine, & noch eine _ohne_ JS.
      _________________________________

      So, _könnte_ reichen, trotzdem;-) während ich jene Grube grub kam ich in allerbeste Stimmung, ♫, und _noch_ einen Tag drangehängt. Sicher noch nicht "sicher", aber _ich_ lass' es mit dem IE6 und dem ursprünglichen Ansatz. Der Vorschlag von Jochen wird umgesetzt, ohne JS, und es wird dann immer noch Lego sein. Und eine DIV-Suppe kübelweise,  wird mir ein Vergnügen sein, brühheiß mit ins Grab, lebendig. Eh Wurscht ♪♫♫♪, und runde Ecken kriegt das Lego auch noch, morgen.

      Finsterst-Freundliche Grüße aus KL
      Christian

  3. Hi,

    bin über den Code nochmal drüber bzgl. d. Anregungen von Ingo und Maxx. Sollte jetzt funktionieren, und ich poste mal einen Link auf die 2te Version: http://zinux.de/selfhtml/css_lego/lego_v2.html.

    Wesentlicher Unterschied zur 1. Version:  Der DIV-Inhalt des obersten DIVs hat mit CSS-Hacks eine min-width verpasst bekommen, auch im IE<=7. Der o.a. Fehler verschwindet dadurch. TODO: Klassen & IDs, unnötige(?) Spacer-DIVs, im Ausgleich für das jetzt nötige min-width kann evtl. die fixierte Pixelbreite des blauen Kastens aufgehoben werden, ... .

    Über Feedback bzgl. "Klappt in Safari, Khtml, im PDA" werde ich mich immer wieder freuen. V2 sollte den Bildschirm optimal ausfüllen, im Blocksatz, und innerhalb der oben ja schon erläuterten Ls. Getestet hab' ich bis jetzt Opera, FF, IE6. Da der beschriebene Fehler ja nur bei Fensterverkleinerung auftritt wäre das Testen für mich wirklich eine ziemlich große Hilfe. Irrtümer sind nur manchmal produktiv, die reine Wahrheit aber auch nicht immer.

    Ceterum censeo vinum posse lactare nunc: Pfälzer Qualität, eine Erzeugerabfüllung allerlieblichsten Rotweins von Stefan Kuntz aus Landau.

    ^Alla hopp, freundliche Grüße aus KL
    Christian

    1. Hallo Christian,

      http://zinux.de/selfhtml/css_lego/lego_v2.html

      ich zitiere aus deinem CSS
      #red { width:expression(document.getElementById('red').offsetWidth > 150 ? 'auto' : '150px');

      ist ungünstig. Wenn das Browserfesnter verkleinert wird, und #red < 150px wird klappt alles. Aber wenn das Browserfenster wieder vergrößert wird hängt #red fest bei 150 px. Das sieht dann so aus:
      http://www.electric-lemon.de/self/lego.png

      Ich hatte in meinem letzten Posting den Vergleich an #green festgemacht. Das würde dann diesen Fehler vermeiden.

      Dann ist mir der Sinn des folgenden Konstrukts unklar:
      width:67%; min-width:150px; max-width:150px; Es scheint dazu zuführen, dass im IE7 der blaue Bereich
        a) < 150px werden kann
        b) im Gegensatz zum Opera und Firefox eine variable Breite hat.

      IE6 kann ich von hier aus leider nicht ausprobieren. Viel Spaß weiterhin.

      Jochen

      --
      Kritzeln statt texten:
      Scribbleboard
      1. Hi,

        Lego-v3 sollte funktionieren jetzt in allen Browsern. Hoffentlich hab ich das id green red jetzt richtig. Mit dem blauen Kasten weiss ich selber noch nicht. Das Ganze gestaltet sich überraschend schwierig. Das Ausräumen des IE6-Fehlers machte 8 weitere Div-Blöcke erforderlich, einige CSS-Hacks mit negativen margins, und ich glaube den Quirks Mode auch noch. Deswegen habe ich sowohl die JS als auch die IE6-Fehler tolerable Lösung als auskommentierbare Möglichkeit miteingebaut. Ist noch nicht aufgeräumt, sollte aber funktionieren. Bei mir klappt Mozilla, FF Opera. IE6. Wie ists mit IE7??? Auf meineipadresse.de hab ich mal im Vollbildmodus gesnapt, aber wie ists beim verkleinern?

        Lego v3 http://zinux.de/selfhtml/css_lego/lego_v3.html

        Source v3http://zinux.de/selfhtml/css_lego/lego_v3_src.html

        Vielen vielen Dank fürs Mitlesen.

        Freundliche Grüße aus KL
        Christian