HTML / CSS: Was ist eine bessere Option für das Layout einer Baumstruktur von verschachtelten Elementen als verschachtelte Tabellen?

8

Ok, ich habe eine Reihe von Kontrollkästchen zum Auswählen von Kriterien. Um dem Argument willen sagen wir, dass die Daten so aussehen:

%Vor%

Die [] s stellen Kontrollkästchen dar.

Die offensichtlich erfundene Natur dieses Beispiels ignorierend, ist die Idee das:

  • Zunächst ist nur das Kontrollkästchen Fahrzeug sichtbar;
  • Wenn der Benutzer auf das Kontrollkästchen Fahrzeug klickt, wird die nächste Ebene angezeigt (Powered, Unpowered);
  • Wählt der Benutzer Powered, öffnet sich die nächste Ebene (Zweirad, Vierrad);
  • Wenn der Benutzer Powered deaktiviert, verschwindet diese Ebene.

Nun ist dies relativ einfach einzurichten, indem onclick das CSS-Attribut display zwischen block und none umschaltet.

Dies ist derzeit auf der Seite wie folgt strukturiert:

%Vor%

Ich sollte darauf hinweisen, bevor jemand fragt: Der Grund, warum das Kontrollkästchen in die Tabellenzelle eingefügt wurde, war, die Formatierung zu steuern. Es machte es leicht, effektiv einzurücken, da sich alles in der nächsten Tabellenzelle anordnen würde.

Es funktioniert alles gut, aber die Tabellenverschachtelung wird ziemlich tief. Ich denke immer, dass es einen besseren Weg geben muss. Es muss in der Lage sein, leicht dynamisch zu bauen und eine gute browserübergreifende Unterstützung für die Formatierung des "Baums" zu haben.

Ich sollte auch erwähnen, dass jQuery verfügbar ist. Ich benutze es für andere Dinge.

Vorschläge?

Bearbeiten: Ja, das Ankreuzen des Kontrollkästchens ist wichtig, da einige Kommentare beachtet wurden. Außerdem habe ich eine Lösung dafür, basierend auf den Antworten, die ich bekommen habe, als Antwort unten gepostet (zu groß, um sie hier hinzuzufügen), nur für diejenigen, die neugierig sind, ein Beispiel zu sehen.

    
cletus 27.01.2009, 22:19
quelle

10 Antworten

21
%Vor%

Edit: ein kleines css & amp; js zu zeigen & amp; Verschachtelte Elemente ausblenden (keine Kontrollkästchen)

%Vor%

und js ...

%Vor%

Bearbeiten Sie erneut, weil Sparr einige bessere Stile möchte (vorausgesetzt, die Kontrollkästchen haben einen Stil von "Checkbox"

%Vor%     
davethegr8 27.01.2009, 22:24
quelle
10

Sie könnten dies tun:

%Vor%

Sie würden dann den Padding / Rand der UL's auf 0 und 0 setzen. Dann setzen Sie das Padding-links der LI's auf 10px.

%Vor%

Fügen Sie für das JavaScript an jedes Kontrollkästchen ein Ereignis an, das bestimmt, ob die Geschwister-UL (falls vorhanden) sichtbar sein sollte. Wenn das Kontrollkästchen aktiviert ist, zeige es an, andernfalls verberge es.

    
Sampson 27.01.2009 22:24
quelle
4

Verschachtelte ungeordnete Listen sind die beste Vorgehensweise für diese Art von Dingen.

%Vor%     
Birk 27.01.2009 22:23
quelle
3

Willst du eine tiefe jQuery Magie sehen?

%Vor%

Hinweis: Die einzige Dekoration hier ist die Baumklasse.

%Vor%

und die Magie:

%Vor%

Damit wird das ganze Ding zu einem funktionierenden Öffnungs- und Schließbaum, wenn Sie auf die Kontrollkästchen klicken. Super.

Danke an davethegr8, Jonathon Sampson und andere um Rat.

    
cletus 28.01.2009 02:08
quelle
2

Ich muss vorschlagen, dass Sie zusätzlich zu den obigen Vorschlägen das JavaScript aus Ihrem Markup extrahieren. Mit einer Bibliothek wie lowpro (einer von meinen Favoriten) können Sie ein Objekt erstellen, um das Verhalten Ihrer verschachtelten Checkbox zu behandeln, und es unauffällig automatisch anwenden lassen. Wenn Sie Ihren Code so einpacken, wird Ihr Markup einfacher zu pflegen und Ihr Code einfacher und schneller zu schreiben, leistungsfähiger und einfacher zu verwalten.

    
Christopher Swasey 27.01.2009 22:33
quelle
1

Tabellen sind für tabellarische Daten. Verwenden Sie stattdessen verschachtelte Listen und CSS zum Formatieren.

Wenn Sie nach einer vollständigen Lösung suchen, verwenden Sie hier reines CSS für moderne Browser und JavaScript für IE:

%Vor%

Angenommen, ein Kontrollkästchen ist nicht breiter als 20px .

    
Christoph 27.01.2009 22:23
quelle
1

Während das jQuery-Plugin mcDropdown das verschachtelte Listenproblem auf eine andere Weise anspricht (keine Kontrollkästchen), könnte es sein für Ihre Bedürfnisse geeignet sein.

    
user59593 28.01.2009 01:33
quelle
0

Wenn Sie cb's erstellen, geben Sie ihnen eine CSS-Klasse, abhängig von der Ebene

%Vor%

CSS:

%Vor%

Wenn "left" nicht funktioniert, versuchen Sie es mit "margin-left".

    
Spikolynn 27.01.2009 22:30
quelle
0

Ich weiß, dass das nicht viel mit der Frage zu tun hat, also ist die Abstimmung nicht einfach nur eine Suggestion.

In diesem Beispiel von davethegr8:

%Vor%

Wenn Sie jedem Schritt eine Klasse zuweisen, können Sie mit jQuery einige coole Drop-down-Effekte mit einem Klick erstellen:

Wie

%Vor%

Nur eine kleine Suggestion allerdings:)

    
fmsf 27.01.2009 22:45
quelle
0

Wenn die Breite der Kontrollkästchen immer noch ein Problem ist (nach allen vorherigen Antworten ...), können Sie entweder:

  • Setzen Sie alle Checkboxen in eine feste Box, damit Sie genau wissen, wo der Text beginnt (und das Kontrollkästchen auf der nächsten Ebene)
  • Verwenden Sie einige jquery-Berechnungen, um die Breite zu erhalten und setzen Sie die Ränder der anderen Elemente dynamisch (scheint aber ein bisschen zu viel ...)

Die vorgeschlagene geschachtelte Listenstruktur wird offensichtlich verwendet.

    
jeroen 29.01.2009 01:05
quelle