Twitter Bootstrap'taki Ağaçlar [kapalı]


108

Mümkün olduğunca çok CSS ve olabildiğince az JS kullanan bir ağaç (bir dizin ağacı gibi) oluşturmaya çalışıyorum (yalnızca durumlar için vb.) Ve önyükleme için bazı iyi mevcut ağaç eklentileri olup olmadığını bilmek istiyorum. veya jquery-ui bootstrap .


Referans için veya bu soru hakkında kafası karışan insanlar için, bootstrap için dynatree gibi bir şey arıyorum .

Yanıtlar:


181

Bina Vitaliy CSS ve Mehmet jQuery , ben değiştim aetiketler spanetiketler ve bazı anonim Glyphicons ve badging içine bir Bootstrap ağaç widget'ındaki almak benim .

Misal: Bootstrap ağaç widget'ını benimsem

Ekstra kredi için, GitHub simgesibu ağaç bileşenini Bootstrap'e eklemeye giden jQuery ve LESS kodunu barındırmak için bir GitHub projesi oluşturdum . Lütfen http://jhfrench.github.io/bootstrap-tree/docs/example.html adresindeki proje belgelerine bakın .

Alternatif olarak, bu CSS'yi oluşturmak için LESS kaynağı burada (JS, jsFiddle'dan alınabilir ):

@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;
    }
}

aferin. Tabii ki, .parent_liarka plan rengini kaybeden ve ebeveynleri (ikinci ağacınızda) üzerine geldiğinde gri olan çocukların garip davranışları hariç .
kumarharsh

Teşekkürler @Harsh. Garip olduğunu düşündüğünüz fareyle üzerine gelme davranışı, kullanıcıya hangi düğümlerin daraltılacağına dair görsel bir gösterge vermek için Vitaliy'nin programlamasını takip eder.
Jeromy French

1
@JeromyFrench Bu ağacın çok güzel ve pürüzsüz bir deneyimi var. Tam olarak aradığımda peşindeydim. İyi iş.
Nathan Moos

5
kod için teşekkürler. varsayılanı nasıl daraltırsınız? Sayfayı ziyaret ettiğinizde daraltılmasını istiyorum? bana yardım eder misin? Teşekkürler.
Erdem Ece

5
jsfiddle.net/jayhilwig/hv8vU :: Kodu güncelledim ve bootstrap 3.0 için burada yeni bir keman
çatalladım

79

Aşağıdaki resimdeki ağaç görünümünün JavaScript kullanmadığına, sadece CSS3'e dayandığına inanabiliyor musunuz? Twitter BootStrap ile iyi olan bu CSS3 TreeView'a bakın :

Ağaç görünümü

Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz http://acidmartin.wordpress.com/2011/09/26/css3-treevew-no-javascript/ .


vay ... bu iyi bir
soru

1
@Harsh Tabii, önyüklemesi hazır ve yardımcı olursa lütfen cevabımı kabul edin. :) Not: Kullanıyoruz. :)
Praveen Kumar Purushothaman

Çözüm iyi görünüyor, ancak dal vurgulama gibi istediğimiz ve bu sürümde sağlanmayan birkaç özellik var. Ama yine de, ağaç şekillendirmenin nasıl yapılacağına dair çok iyi bir örnek
kumarharsh


1
Cevapta atıfta bulunulan blog gönderisinin benim için çalışmayan bazı basit CSS'ler içerdiğini, ancak gerçek demo biraz daha karmaşık (ve açıklanmamış) CSS içerdiğini belirtmek gerekir.
Robin Green

53

Birisi Harsh'ın cevabından ağaç görünümünün dikey versiyonunu isterse, biraz zaman kazanabilirsiniz:

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;
}

1
Basit ve zarif. Olumlu oy :)
thefourtheye

1
Mükemmel çözüm!
CORSAIR

Vay canına, harika çözüm - ve kolayca genişletilebilir!
rkallensee

Daraltma genişletme işlevi nerede?
Syed Aqeel Ashiq

41

Hala CSS3 ile bir ağaç arayanlar için, bu internette bulduğum harika bir kod parçası:

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;
}

Not: Kodun yanı sıra, sitenin onu eylemde gösterme şeklini de seviyorum ... gerçekten yenilikçi.


5
Bu aslında sorunuzda önerdiğiniz ağaç türüne hiç benzemiyor. Praveen Kumar'ın
cevabıyla

2
İlki gibi bir ağaç arıyordum, bu cevabı gördüm ve onun yerine bunu kullanmaya karar verdim. İlhamın bir çözümü değiştirmesi ne kadar komik!
Eric

2
@Blowsie: Önerinizi dikkate aldım ve adalet yerini buldu, lol. Rastgele bir adamdan gelen bazı rastgele talepler nedeniyle gelişen bağımsız bir proje görmek güzel.
kumarharsh


36

Birisi Vitaliy Bychik'in cevabından ağaç görünümünün genişletilebilir / daraltılabilir versiyonunu isterse, biraz zaman kazanabilirsiniz :)

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();
    });
});

:) Güzel! İyi fikir +1.
Alex

1
$ ('. Tree> ul> li: first-child') ekledim. Show (); sayfadaki birden çok ağacı desteklemek için. Teşekkürler
tribe84

8

Bir başka harika Treeview jquery eklentisi http://www.jstree.com/

Gelişmiş bir görünüm için jquery-treetable http://ludo.cubicphuse.nl/jquery-plugins/treeTable/doc/ adresini kontrol etmelisiniz.


Siteye göre, Nisan 2010'dan bu yana artık desteklenmiyor
levelnis

oh desteklenmiyor olması utanç verici ... yine de iyi görünüyor.
kumarharsh

3
Merhaba, her iki kitaplık da güncel ve destekleniyor
Gal Margalit

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.