Michi: Aufzählungszeichen

Hallo zusammen

Ich grüble schon den ganzen Abend, komme aber leider auf keinen grünen Zweig.
Folgenden Code habe ich schon mal gebastelt und funktioniert:
<?php
    echo "<div id='navcontainer'>".
  "<ul id='navlist'>";
    while($cats = mysql_fetch_object($exesqlcat))
 {
          echo "<li><a href='#'>". $cats->c_shortname ."</a></li>";
 }
    echo "</ul>".
         "</div></div>";
?>

Dieses Konstrukt bringt mir Namen hinter einem Aufzählungszeichen. Mit CSS habe ich es so formatiert, dass die Aufzählungszeichen nicht untereinander kommen sondern nebeneinander.
Nun möchte ich aber, dass nach 5 Namen, es einen Zeilenumbruch gibt und die restlichen Namen auf einer neuen Zeile angezeigt wird.

Wisst ihr wie ich meine?
Hat jemand einen Lösungsansatz?

Super! Vielen Dank schon mal im voraus.

Gruss
Michi

  1. Hallo Michi,

    Nun möchte ich aber, dass nach 5 Namen, es einen Zeilenumbruch gibt und die restlichen Namen auf einer neuen Zeile angezeigt wird.

    Ich habe zwar von PHP wenig Ahnung, aber einen Modulo-Operator gibt es da doch bestimmt auch. Dann füg doch bei jedem fünften LI-Element ein passendes clear ein, wenn du die Dinger grundsätzlich floaten lässt.

    Super! Vielen Dank schon mal im voraus.

    Gruß Gernot

    1. Hi Gernot

      Ich habe zwar von PHP wenig Ahnung, aber einen Modulo-Operator gibt es da doch bestimmt auch. Dann füg doch bei jedem fünften LI-Element ein passendes clear ein, wenn du die Dinger grundsätzlich floaten lässt.

      Nur wie kriege ich raus, welches das 5 Element ist?

      Gruss
      Michi

      1. <?php
        echo "<div id='navcontainer'>";
        echo "<ul id='navlist'>";
        $x = 0;
        while($cats = mysql_fetch_object($exesqlcat)) {
          if ((($x)%5)==0) echo "<br>";
          echo "<li><a href='#'>". $cats->c_shortname ."</a></li>";
          $x++;
        }
        echo "</ul>";
        echo "</div>";
        ?>

        Gruß,
        Stevie B.

        1. Hallo Stevie,

          <?php
          echo "<div id='navcontainer'>";
          echo "<ul id='navlist'>";
          $x = 0;
          while($cats = mysql_fetch_object($exesqlcat)) {
            if ((($x)%5)==0) echo "<br>";
            echo "<li><a href='#'>". $cats->c_shortname ."</a></li>";
            $x++;
          }
          echo "</ul>";
          echo "</div>";
          ?>

          ch sehe, Modulo scheint es auch in PHP zu geben, aber igitt, ein <br> gehört nicht als unmittelbares Kindelement in eine Liste. Da bleiben wir doch lieber beim CSS-Attribut clear.

          @Felix: Ich würde aber je nachdem was ich für ein float verwende auch nur ein entsprechendes clear verwenden, also auf keinen Fall both, denn dann habe ich ja einen Umbruch sowohl vor als auch hinter dem jeweils fünften LI-Element und das will Michi ja wahrscheinlich nicht

          Gruß Gernot

          1. ch sehe, Modulo scheint es auch in PHP zu geben, aber igitt, ein <br> gehört nicht als unmittelbares Kindelement in eine Liste. Da bleiben wir doch lieber beim CSS-Attribut clear.

            Hat leider auch nicht funktioniert mit dem <br>...habe es auch noch nicht weiter versucht. Trotzdem danke an Stevie. Vielleicht komme ich noch darauf zurück.

            @Felix: Ich würde aber je nachdem was ich für ein float verwende auch nur ein entsprechendes clear verwenden, also auf keinen Fall both, denn dann habe ich ja einen Umbruch sowohl vor als auch hinter dem jeweils fünften LI-Element und das will Michi ja wahrscheinlich nicht

            Es läuft eigentlich beides clear:left und both. Habe keinen Unterschied festgestellt. Als floar habe ich left benutzt...daher wahrscheinlich kein Unterschied.

            Danke auch dir Gernot für deine rasche Unterstützung...hoffe, ich kann mein Problem noch ganz lösen...fehlt nicht mehr viel.

            Gruss
            Michi

            1. Hallo Michi,
              .

              Hat leider auch nicht funktioniert mit dem <br>...habe es auch noch nicht weiter versucht. Trotzdem danke an Stevie. Vielleicht komme ich noch darauf zurück.

              In Sachen Modulo würde ich Stevies Vorschlag mal genauer beachten; das <br> in ist in einem UL- oder OL-Element als direkter Nachfahre aber definitiv nicht valide. Mit Zählern, die man auf bestimmte Werte zurücksetzt, kann man zwar auch arbeiten, das kann man sich mit einem menschlichen Programmiererhirn auch leichter vorstellen. Aber für den Rechner macht Modulo halt doch einen schlankeren Fuß, wie ich finde.

              Ich gebe aber zu, bei den heutigen Rechnerleistungen merkt man den Unterschied an den eingesparten Operationen nicht mehr.

              Gruß Gernot

              1. Lieber Gernot,

                In Sachen Modulo würde ich Stevies Vorschlag mal genauer beachten; [...] Aber für den Rechner macht Modulo halt doch einen schlankeren Fuß, wie ich finde.

                das finde ich auch. Daher bringe ich jetzt Stevies Ansatz mit dem meinen zusammen. Wenn Michi das noch liest, sollte er "der schöneren und eleganteren Programmierung wegen" auf dieses Beispiel umsteigen:

                        $zaehler = 0;  
                        while($cats = mysql_fetch_object($exesqlcat))  
                        {  
                        if ((($zaehler)%5)==0)               // Haben wir schon fünf?  
                           {  
                           echo '<li style="clear: both;">'; // Ja -> neue Zeile erzwingen  
                           }  
                         else  
                           {  
                           echo "<li>";                      // Nein -> weiteres li-Element ausgeben.  
                           }  
                        echo "<a href='#'>". $cats->c_shortname ."</a></li>";  
                        $zaehler++;  
                        }
                

                Liebe Grüße aus Ellwangen,

                Felix Riesterer.

                1. Hallo nochmals zusammen

                  Habe nun auch diesen Code hier unten verwendet...funzt alles super mega toll...im Firefox. Beim IE sieht es, sorry, scheisse aus.
                  Es verhaut das ganze Design.
                  Die ersten neun Punkte werden nebeneinander angezeit, die Nummer 10 und 11 dann untereinander.

                  $zaehler = 0;

                  while($cats = mysql_fetch_object($exesqlcat))
                          {
                          if ((($zaehler)%5)==0)               // Haben wir schon fünf?
                             {
                             echo '<li style="clear: both;">'; // Ja -> neue Zeile erzwingen
                             }
                           else
                             {
                             echo "<li>";                      // Nein -> weiteres li-Element ausgeben.
                             }
                          echo "<a href='#'>". $cats->c_shortname ."</a></li>";
                          $zaehler++;
                          }

                  
                  
                  1. Lieber Michi,

                    funzt alles super mega toll...im Firefox. Beim IE sieht es, sorry, scheisse aus.
                    Es verhaut das ganze Design.

                    Aha... IE mal wieder. ;-)

                    Bitte hochladen und verlinken! Dann kann man da mal nachsehen, denn jetzt kommt es auf Dein Stylesheet an. Darin könnten für den IE unverträgliche Angaben enthalten sein.

                    Liebe Grüße aus Ellwangen,

                    Felix Riesterer.

                    1. Lieber Michi,

                      funzt alles super mega toll...im Firefox. Beim IE sieht es, sorry, scheisse aus.
                      Es verhaut das ganze Design.
                      Aha... IE mal wieder. ;-)

                      Bitte hochladen und verlinken! Dann kann man da mal nachsehen, denn jetzt kommt es auf Dein Stylesheet an. Darin könnten für den IE unverträgliche Angaben enthalten sein.

                      So habe es jetzt mit Datenbank hochgeladen.
                      Hier-Klicken!

                      1. Lieber Michi,

                        funzt alles super mega toll...im Firefox. Beim IE sieht es, sorry, scheisse aus.
                        Es verhaut das ganze Design.
                        Aha... IE mal wieder. ;-)

                        Bitte hochladen und verlinken! Dann kann man da mal nachsehen, denn jetzt kommt es auf Dein Stylesheet an. Darin könnten für den IE unverträgliche Angaben enthalten sein.
                        So habe es jetzt mit Datenbank hochgeladen.
                        Hier-Klicken

                        1. So habe es jetzt mit Datenbank hochgeladen.
                          Hier-Klicken

                          Und jetzt auch noch den Login: User: admin PW: admin

                          Ist schon ein bisschen spät...danke für deine Hilfe.

                          hier noch der Link für die CSS Datei:
                          CSSDatei

                          Gruss
                          Michi

                          1. Lieber Michi,

                            dass der IE völligen Mist baut, ist ein fehlerhaftes Umsetzen der CSS-Spezifikationen (und das erscheintuns heute nicht zum ersten Mal!). Anscheinend setzt er das innerhalb des sechsten <li>-Elementes notierten style="clear: left;" korrekt um, um aber alle darauf folgenden <li>-Elemente in der alten Zeile weiter zu floaten, solange eben diese reicht... Völlig gaga, aber eben der IE.

                            In der CSS-Datei habe ich gesehen, dass Du sowohl die <li>s, als auch die Links in ihnen floatest. Das halte ich für keine gute Idee, auch wenn es anscheinend funktioniert(tm). Da man gefloateten Elementen eine feste Breite zuweisen sollte, kann man alle <li>s auf 100px Breite setzen, dabei auch gleich eine 80px Höhe verordnen und kann dann die Links ohne zu floaten einfach mit display:block auf 100% Breite und Höhe setzen. Siehe hier:

                            #navcontainer ul li {  
                            margin: 10px;  
                            padding: 0;  
                            float: left;  
                            width: 100px;  
                            height: 80px;  
                            }  
                              
                            #navcontainer ul li a  
                            {  
                            text-decoration: none;  
                            background: url(http://www.mauch-online.ch/learnonline/seite/images/layout/folderOFF.png) no-repeat top left;  
                            font-size: 12px;  
                            display: block;  
                            margin: 0px;  
                            height: 100%;  
                            width: 100%;  
                            padding: 10px;  
                            }
                            

                            Es sieht im IE immernoch nicht aus, wie im Firefox (besonders der IE5.x macht besonderen Unfug!), aber das möchte ich jetzt auch nicht lösen, da ich nicht für den IE "optimiere", sondern seinen Darstellungsmist in Kauf nehme. Wer mit dem IE unterwegs ist, hat eben ein Problem!

                            Liebe Grüße aus Ellwangen,

                            Felix Riesterer.

                            1. Es sieht im IE immernoch nicht aus, wie im Firefox (besonders der IE5.x macht besonderen Unfug!), aber das möchte ich jetzt auch nicht lösen, da ich nicht für den IE "optimiere", sondern seinen Darstellungsmist in Kauf nehme. Wer mit dem IE unterwegs ist, hat eben ein Problem!

                              Vielen lieben Dank, ich weiss deinen Einsatz wirklich sehr zu schätzen.
                              Werde mal schauen wie ich weiter mache...jedenfalls möchte ich mich nochmals recht herzlichen bedanken.
                              Eigentlich hätte ich noch gerne deine Seite besucht...aber sie scheint momentan nicht zu laufen.

                              Viele Grüsse aus der Schweiz
                              Michi

                              1. Lieber Michi,

                                Eigentlich hätte ich noch gerne deine Seite besucht...aber sie scheint momentan nicht zu laufen.

                                ja, da habe ich im Moment Probleme. Ich bin wegen der Werbung auf funpic.de zu kilu.de umgezogen, da ich weiterhin versuchen wollte, bei einem Freespace Hoster mit PHP zu bleiben. Aber leider scheint kilu.de eine sehr unzuverlässige Performance zu haben. Da war funpic.de schon wesentlich besser... Aber da ich deren Werbung inhaltlich nicht mit meinem Gewissen vereinbaren kann, mich auch nicht explizit in meinem Impressum von der eingeblendeten Zwangswerbung distanzieren möchte, bleibt mir wohl nix anderes übrig, als weiter nach Freehostern mit PHP und ohne Werbung zu suchen.

                                Wenn wer einen heißen Tipp hat, dann bitte mir ganz schnell Bescheid sagen!

                                Liebe Grüße aus Ellwangen,

                                Felix Riesterer.

                          2. Hallo Michi,

                            Die Lösung für dein Problem ist doch ganz einfach:

                            Du brauchst überhaupt nicht mit clear zu arbeiten, brauchst auch weder Modulo noch sonst irgendwelche server- oder clientseitigen Berechnungen dafür.

                            Da doch alle deine Listenpunkte floaten und die gleiche Breite haben, mach deine umschließende Liste einfach nur so breit dass jeweils nur fünf ihrer Unterpunkte nebeneinander passen inklusive dem Abstand, den sie zueinander haben. Lass dann ggf. auch das Listenmutterelement floaten, damit daneben auch noch was passt.

                            Gruß Gernot

                            1. Die Lösung für dein Problem ist doch ganz einfach:

                              Jups ist es...
                              Habe mich zuerst mit Tabellen versucht, dachte dann aber, dass kann doch nicht sein, dass ich das Layout ohne Tabelle mache und dann wegen so ein paar Ordner Symbolen doch noch Tabellen brauche.
                              So habe ich dann genau das gemacht was du vorgeschlagen hast und voila einwandfrei.

                              Ich möchte mich auch bei dir recht herzlich für deine Hilfe bedanken. Es freut mich, so hilfsbereite Leute hier anzutreffen.

                              Vielleicht bis ein andermal ;-)

                              Grüsse aus der Schweiz
                              Michi

              2. Zähler, die man auf bestimmte Werte zurücksetzt, […] Aber für den Rechner macht Modulo halt doch einen schlankeren Fuß, wie ich finde.

                Gernot,
                Kürzer aussehender Code muss nicht schneller sein. Bei Modulo wird dividiert, beim Mitzählen wird lediglich addiert, was billiger ist (kürzere Ausführungszeit).

                Live long and prosper,
                Gunnar

                --
                „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
  2. Lieber Michi,

          $zaehler = 0;        // einen Zähler einbauen  
    
    >     while($cats = mysql_fetch_object($exesqlcat))  
    >  {  
    
              $zaehler++;      // Den Zähler in jedem Durchgang um eins erhöhen  
              if($zaehler > 5) // Haben wir schon fünf?  
                 {  
                 $zaehler = 0; // Ja, wir haben schon fünf. Zähler auf null zurücksetzen.  
                 echo '<li style="clear: both;">'; // neue Zeile erzwingen  
                 }  
               else  
                 {  
                 echo "<li>";  // Nein, wir haben noch keine fünf. Weiteres li-Element ausgeben.  
                 }  
    
    >           echo "<a href='#'>". $cats->c_shortname ."</a></li>";  
    >  }
    
    

    Dieser Code ist noch ungetestet. Könnte das helfen?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Lieber Michi,

      $zaehler = 0;        // einen Zähler einbauen

      while($cats = mysql_fetch_object($exesqlcat))
      {
                $zaehler++;      // Den Zähler in jedem Durchgang um eins erhöhen
                if($zaehler > 5) // Haben wir schon fünf?
                   {
                   $zaehler = 0; // Ja, wir haben schon fünf. Zähler auf null zurücksetzen.
                   echo '<li style="clear: both;">'; // neue Zeile erzwingen
                   }
                 else
                   {
                   echo "<li>";  // Nein, wir haben noch keine fünf. Weiteres li-Element ausgeben.
                   }
                echo "<a href='#'>". $cats->c_shortname ."</a></li>";
      }

      
      >   
      > Dieser Code ist noch ungetestet. Könnte das helfen?  
      
      Ja und wie das helfen kann. Vielen Dank.  
      Nur eins noch, was ich nicht recht verstehe. Nach 5 Einträgen macht er ja den clear style und setzt den Zähler wieder auf 0 zurück. Warum macht er aber nach dem zweiten 5er Pack den Clear Style nicht mehr? Das verstehe ich noch nicht ganz.  
        
      Danke und Gruss  
      Michi
      
      1. Dieser Code ist noch ungetestet. Könnte das helfen?
        Ja und wie das helfen kann. Vielen Dank.
        Nur eins noch, was ich nicht recht verstehe. Nach 5 Einträgen macht er ja den clear style und setzt den Zähler wieder auf 0 zurück. Warum macht er aber nach dem zweiten 5er Pack den Clear Style nicht mehr? Das verstehe ich noch nicht ganz.

        Der Zähler darf nicht auf 0 gesetzt werden sondern auf 1 und dann läufts.
        Vielen vielen Dank an alle, dir mir hier geholfen haben!!

        Danke und Gruss
        Michi

      2. Lieber Michi,

        Ja und wie das helfen kann. Vielen Dank.

        freut mich! Gern geschehen. Nach Gernots wichtigem Hinweis sollte mein style-Attribut so lauten: style="clear: left;"

        Nur eins noch, was ich nicht recht verstehe. Nach 5 Einträgen macht er ja den clear style und setzt den Zähler wieder auf 0 zurück. Warum macht er aber nach dem zweiten 5er Pack den Clear Style nicht mehr? Das verstehe ich noch nicht ganz.

        Wieviele <li>-Elemente werden denn insgesamt erzeugt? Wenn es exakt 10 sind, dann greift das zweite Mal nicht mehr, denn es würde das 11te <li> wieder mit dem style versehen...

        Poste doch mal den Quelltext-Ausschnitt mit der kompletten <ul>, in der die per PHP ausgegebenen <li>s drin sitzen! Dann wird mir klarer, was Du meinst!

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.