Bäume in Twitter Bootstrap [geschlossen]

108

Ich habe versucht, einen Baum (wie einen Verzeichnisbaum) zu erstellen, der so viel CSS und so wenig JS wie möglich verwendet (nur für Status usw.), und ich möchte wissen, ob es einige gute vorhandene Baum-Plugins für Bootstrap gibt oder jquery-ui Bootstrap .


Als Referenz oder für Leute, die über diese Frage verwirrt sind, suche ich etwas wie Dynatree für Bootstrap.

kumarharsh
quelle

Antworten:

181

Aufbauend auf Vitaliys CSS und Mehmets jQuery habe ich die aTags in spanTags geändert und einige Glyphicons und Badging in meine Einstellung zu einem Bootstrap-Baum-Widget aufgenommen .

Beispiel: Ich nehme ein Bootstrap-Baum-Widget an

Als zusätzliche Gutschrift habe ich ein Github-SymbolGitHub-Projekt erstellt, um den jQuery- und LESS-Code zu hosten, mit dem diese Baumkomponente zu Bootstrap hinzugefügt wird . Weitere Informationen finden Sie in der Projektdokumentation unter http://jhfrench.github.io/bootstrap-tree/docs/example.html .

Alternativ ist hier die WENIGER Quelle, um dieses CSS zu generieren (das JS kann von der jsFiddle übernommen werden ):

@import "../../../external/bootstrap/less/bootstrap.less"; /* substitute your path to the bootstrap.less file */
@import "../../../external/bootstrap/less/responsive.less"; /* optional; substitute your path to the responsive.less file */

/* collapsable tree */
.tree {
    .border-radius(@baseBorderRadius);
    .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
    background-color: lighten(@grayLighter, 5%);
    border: 1px solid @grayLight;
    margin-bottom: 10px;
    max-height: 300px;
    min-height: 20px;
    overflow-y: auto;
    padding: 19px;
    a {
        display: block;
        overflow: hidden;
        text-overflow: ellipsis;
        width: 90%;
    }
    li {
        list-style-type: none;
        margin: 0px 0;
        padding: 4px 0px 0px 2px;
        position: relative;
        &::before, &::after {
            content: '';
            left: -20px;
            position: absolute;
            right: auto;
        }
        &::before {
            border-left: 1px solid @grayLight;
            bottom: 50px;
            height: 100%;
            top: 0;
            width: 1px;
        }
        &::after {
            border-top: 1px solid @grayLight;
            height: 20px;
            top: 13px;
            width: 23px;
        }
        span {
            -moz-border-radius: 5px;
            -webkit-border-radius: 5px;
            border: 1px solid @grayLight;
            border-radius: 5px;
            display: inline-block;
            line-height: 14px;
            padding: 2px 4px;
            text-decoration: none;
        }
        &.parent_li > span {
            cursor: pointer;
            /*Time for some hover effects*/
            &:hover, &:hover+ul li span {
                background: @grayLighter;
                border: 1px solid @gray;
                color: #000;
            }
        }
        /*Remove connectors after last child*/
        &:last-child::before {
            height: 30px;
        }
    }
    /*Remove connectors before root*/
    > ul > li::before, > ul > li::after {
        border: 0;
    }
}
Jeromy Französisch
quelle
gut gemacht. Außer natürlich dem merkwürdigen Verhalten von Kindern .parent_li, die ihre Hintergrundfarbe verlieren und grau werden, wenn ihre Eltern darüber schweben (in Ihrem zweiten Baum).
Kumarshar
Danke @Harsh. Das Schwebeverhalten, das Sie für merkwürdig halten, folgt der Programmierung von Vitaliy, um dem Benutzer einen visuellen Indikator dafür zu geben, welche Knoten reduziert werden.
Jeromy French
1
@ JeromyFrench Dieser Baum hat eine sehr schöne, glatte Erfahrung. Genau das, wonach ich gesucht habe. Gute Arbeit.
Nathan Moos
5
Danke für den Code. Wie kollabieren Sie standardmäßig? Wenn Sie die Seite besuchen, möchte ich, dass sie reduziert wird? kannst du mir helfen? Vielen Dank.
Erdem Ece
5
jsfiddle.net/jayhilwig/hv8vU :: Ich habe den Code aktualisiert und hier eine neue Geige für Bootstrap 3.0 gegabelt:
jayseattle
79

Können Sie glauben, dass die Baumansicht im Bild unten kein JavaScript verwendet, sondern nur auf CSS3 basiert? Schauen Sie sich diese CSS3 TreeView an , die gut zu Twitter BootStrap passt:

Baumsicht

Weitere Informationen hierzu erhalten Sie hier http://acidmartin.wordpress.com/2011/09/26/css3-treevew-no-javascript/ .

Praveen Kumar Purushothaman
quelle
wow ... das ist gut ... ich muss das untersuchen ... danke ...
kumarharsh
1
@Harsh Sicher, sein Bootstrap ist fertig und bitte akzeptiere meine Antwort, wenn es hilfreich ist. :) PS: Wir benutzen es. :)
Praveen Kumar Purushothaman
Die Lösung scheint gut zu sein, aber es gibt einige Funktionen, die wir wollten und die in dieser Version nicht enthalten sind, wie z. B. das Hervorheben von Zweigen usw. Aber es ist trotzdem ein sehr gutes Beispiel für das
Baumstyling
1
fand ein schönes Beispiel thecssninja.com/demo/css_tree
surya
1
Es ist erwähnenswert, dass der in der Antwort erwähnte Blog-Beitrag ein einfaches CSS enthält, was für mich nicht funktioniert, aber die eigentliche Demo enthält etwas komplizierteres (und nicht erklärtes) CSS.
Robin Green
53

Wenn jemand eine vertikale Version der Baumansicht aus Harshs Antwort möchte, können Sie Zeit sparen:

http://jsfiddle.net/Fh47n/

.tree li {
    margin: 0px 0;

    list-style-type: none;
    position: relative;
    padding: 20px 5px 0px 5px;
}

.tree li::before{
    content: '';
    position: absolute; 
    top: 0;
    width: 1px; 
    height: 100%;
    right: auto; 
    left: -20px;
    border-left: 1px solid #ccc;
    bottom: 50px;
}
.tree li::after{
    content: '';
    position: absolute; 
    top: 30px; 
    width: 25px; 
    height: 20px;
    right: auto; 
    left: -20px;
    border-top: 1px solid #ccc;
}
.tree li a{
    display: inline-block;
    border: 1px solid #ccc;
    padding: 5px 10px;
    text-decoration: none;
    color: #666;
    font-family: arial, verdana, tahoma;
    font-size: 11px;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
}

/*Remove connectors before root*/
.tree > ul > li::before, .tree > ul > li::after{
    border: 0;
}
/*Remove connectors after last child*/
.tree li:last-child::before{ 
      height: 30px;
}

/*Time for some hover effects*/
/*We will apply the hover effect the the lineage of the element also*/
.tree li a:hover, .tree li a:hover+ul li a {
    background: #c8e4f8; color: #000; border: 1px solid #94a0b4;
}
/*Connector styles on hover*/
.tree li a:hover+ul li::after, 
.tree li a:hover+ul li::before, 
.tree li a:hover+ul::before, 
.tree li a:hover+ul ul::before{
    border-color:  #94a0b4;
}
Vitaliy Bychik
quelle
1
Einfach und elegant. Upvoted :)
thefourtheye
1
Einfach perfekte Lösung!
CORSAIR
Wow, tolle Lösung - und leicht erweiterbar!
Rkallensee
Wo ist die Collapse-Erweiterungsfunktion?
Syed Aqeel Ashiq
41

Für diejenigen, die noch mit CSS3 nach einem Baum suchen, ist dies ein fantastischer Code, den ich im Internet gefunden habe:

http://thecodeplayer.com/walkthrough/css3-family-tree

HTML

<div class="tree">
  <ul>
    <li>
      <a href="#">Parent</a>
      <ul>
        <li>
          <a href="#">Child</a>
          <ul>
            <li>
              <a href="#">Grand Child</a>
            </li>
          </ul>
        </li>
        <li>
          <a href="#">Child</a>
          <ul>
            <li><a href="#">Grand Child</a></li>
            <li>
              <a href="#">Grand Child</a>
              <ul>
                <li>
                  <a href="#">Great Grand Child</a>
                </li>
                <li>
                  <a href="#">Great Grand Child</a>
                </li>
                <li>
                  <a href="#">Great Grand Child</a>
                </li>
              </ul>
            </li>
            <li><a href="#">Grand Child</a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</div>

CSS

* {margin: 0; padding: 0;}

.tree ul {
  padding-top: 20px; position: relative;

  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

.tree li {
  float: left; text-align: center;
  list-style-type: none;
  position: relative;
  padding: 20px 5px 0 5px;

  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

/*We will use ::before and ::after to draw the connectors*/

.tree li::before, .tree li::after{
  content: '';
  position: absolute; top: 0; right: 50%;
  border-top: 1px solid #ccc;
  width: 50%; height: 20px;
}
.tree li::after{
  right: auto; left: 50%;
  border-left: 1px solid #ccc;
}

/*We need to remove left-right connectors from elements without 
any siblings*/
.tree li:only-child::after, .tree li:only-child::before {
  display: none;
}

/*Remove space from the top of single children*/
.tree li:only-child{ padding-top: 0;}

/*Remove left connector from first child and 
right connector from last child*/
.tree li:first-child::before, .tree li:last-child::after{
  border: 0 none;
}
/*Adding back the vertical connector to the last nodes*/
.tree li:last-child::before{
  border-right: 1px solid #ccc;
  border-radius: 0 5px 0 0;
  -webkit-border-radius: 0 5px 0 0;
  -moz-border-radius: 0 5px 0 0;
}
.tree li:first-child::after{
  border-radius: 5px 0 0 0;
  -webkit-border-radius: 5px 0 0 0;
  -moz-border-radius: 5px 0 0 0;
}

/*Time to add downward connectors from parents*/
.tree ul ul::before{
  content: '';
  position: absolute; top: 0; left: 50%;
  border-left: 1px solid #ccc;
  width: 0; height: 20px;
}

.tree li a{
  border: 1px solid #ccc;
  padding: 5px 10px;
  text-decoration: none;
  color: #666;
  font-family: arial, verdana, tahoma;
  font-size: 11px;
  display: inline-block;

  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;

  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

/*Time for some hover effects*/
/*We will apply the hover effect the the lineage of the element also*/
.tree li a:hover, .tree li a:hover+ul li a {
  background: #c8e4f8; color: #000; border: 1px solid #94a0b4;
}
/*Connector styles on hover*/
.tree li a:hover+ul li::after, 
.tree li a:hover+ul li::before, 
.tree li a:hover+ul::before, 
.tree li a:hover+ul ul::before{
  border-color:  #94a0b4;
}

PS: Abgesehen vom Code gefällt mir auch die Art und Weise, wie die Site ihn in Aktion zeigt ... wirklich innovativ.

kumarharsh
quelle
5
Dies entspricht nicht wirklich der Baumart, die Sie in Ihrer Frage vorgeschlagen haben. Ich glaube, Praveen Kumar sollte mit seiner Antwort ausgezeichnet werden
Blowsie
2
Ich suchte nach einem Baum wie dem ersten, sah diese Antwort und entschied mich stattdessen dafür. Lustig, wie Inspiration eine Lösung verändern kann!
Eric
2
@Blowsie: Ich habe Ihren Vorschlag berücksichtigt und Gerechtigkeit wurde gedient, lol. Es ist gut zu sehen, wie sich ein eigenständiges Projekt aufgrund einer zufälligen Anfrage eines zufälligen Mannes entwickelt.
Kumarshar
Schnelle Demo: jsfiddle.net/pdcmoreira/6Lghm43a
Pedro Moreira
36

Wenn jemand eine erweiterbare / reduzierbare Version der Baumansicht aus Vitaliy Bychiks Antwort haben möchte, können Sie Zeit sparen :)

http://jsfiddle.net/mehmetatas/fXzHS/2/

$(function () {
    $('.tree li').hide();
    $('.tree li:first').show();
    $('.tree li').on('click', function (e) {
        var children = $(this).find('> ul > li');
        if (children.is(":visible")) children.hide('fast');
        else children.show('fast');
        e.stopPropagation();
    });
});
Mehmet Ataş
quelle
:) nett! Gute Idee +1.
Alex
1
Ich habe $ ('. Tree> ul> li: first-child') hinzugefügt. Show (); um mehrere Bäume auf der Seite zu unterstützen. Danke
Stamm84
8

Ein weiteres großartiges Treeview-JQuery-Plugin ist http://www.jstree.com/.

Für eine erweiterte Ansicht sollten Sie jquery-treetable http://ludo.cubicphuse.nl/jquery-plugins/treeTable/doc/ überprüfen.

Gal Margalit
quelle
Laut der Website wird es seit April 2010 nicht mehr unterstützt
Levelnis
Oh, es ist eine Schande, dass es nicht unterstützt wird ... sieht aber gut aus.
kumarharsh
3
Hallo, beide Bibliotheken sind auf dem neuesten Stand und werden unterstützt
Gal Margalit
Sie werden unterstützt - siehe github.com/ludo/jquery-treetable/releases
Bartek Jablonski