Pohon di Twitter Bootstrap [ditutup]

108

Saya telah mencoba untuk membuat pohon (seperti pohon direktori) yang menggunakan CSS dan JS sesedikit mungkin (hanya untuk negara bagian, dll), dan saya ingin tahu apakah ada beberapa plugin pohon yang bagus untuk bootstrap atau jquery-ui bootstrap .


Untuk referensi atau bagi orang yang bingung tentang pertanyaan ini, saya mencari sesuatu seperti dynatree untuk bootstrap.

kumarharsh
sumber

Jawaban:

181

Membangun dari Vitaliy's CSS dan Mehmet's jQuery , saya mengubah atag menjadi spantag dan memasukkan beberapa Glyphicons dan lencana ke dalam saya mengambil widget pohon Bootstrap .

Contoh: pendapat saya tentang widget pohon Bootstrap

Untuk kredit tambahan, saya telah membuat Ikon Githubproyek GitHub untuk menghosting kode jQuery dan LESS yang digunakan untuk menambahkan komponen pohon ini ke Bootstrap. Silakan lihat dokumentasi proyek di http://jhfrench.github.io/bootstrap-tree/docs/example.html .

Sebagai alternatif, berikut adalah sumber LESS untuk menghasilkan CSS itu (JS dapat diambil dari jsFiddle ):

@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 French
sumber
sudah selesai dilakukan dengan baik. Kecuali, tentu saja, kelakuan aneh anak-anak li .parent_liyang kehilangan warna latar belakangnya dan menjadi abu-abu saat orang tuanya diarahkan (di pohon kedua Anda).
kumarharsh
Terima kasih @Harsh. Perilaku hover yang menurut Anda aneh mengikuti pemrograman Vitaliy untuk memberi pengguna indikator visual node mana yang akan diciutkan.
Jeromy French
1
@JeromyFrench Pohon ini memiliki pengalaman yang sangat menyenangkan dan mulus. Persis seperti yang saya kejar ketika saya mencari. Kerja bagus.
Nathan Moos
5
terima kasih untuk kodenya. bagaimana Anda menutup default? ketika Anda mengunjungi halaman, saya ingin halaman itu diciutkan? Bisakah kamu membantuku? Terima kasih.
Erdem Ece
5
jsfiddle.net/jayhilwig/hv8vU :: Saya memperbarui kode dan membuat fiddle baru di sini untuk bootstrap 3.0:
jayseattle
79

Percayakah Anda bahwa tampilan pohon pada gambar di bawah ini tidak menggunakan JavaScript apa pun, tetapi hanya bergantung pada CSS3? Lihat CSS3 TreeView ini , yang bagus dengan Twitter BootStrap:

TreeView

Anda bisa mendapatkan info lebih lanjut tentang ini di sini http://acidmartin.wordpress.com/2011/09/26/css3-treevew-no-javascript/ .

Praveen Kumar Purushothaman
sumber
wow ... ini bagus ... aku harus memeriksanya ... terima kasih ...
kumarharsh
1
@Harsh Tentu, bootstrapnya siap dan terima jawaban saya jika itu membantu. :) PS: Kami sedang menggunakannya. :)
Praveen Kumar Purushothaman
Solusinya tampaknya bagus, tetapi ada beberapa fitur, yang kami inginkan dan tidak disediakan dalam versi ini, seperti penyorotan cabang, dll. Namun bagaimanapun, ini adalah contoh yang sangat baik tentang bagaimana melakukan penataan pohon
kumarharsh
1
menemukan contoh yang bagus thecssninja.com/demo/css_tree
surya
1
Perlu dicatat bahwa posting blog yang dirujuk dalam jawaban berisi beberapa CSS sederhana, yang tidak berfungsi untuk saya, tetapi demo sebenarnya berisi beberapa CSS yang lebih rumit (dan tidak dijelaskan).
Robin Green
53

Jika seseorang menginginkan versi vertikal dari tampilan pohon dari jawaban Harsh, Anda dapat menghemat waktu:

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
sumber
1
Sederhana dan elegan. Suara positif :)
thefourtheye
1
Solusi sempurna!
CORSAIR
Wow, solusi hebat - dan mudah dikembangkan!
rkallensee
Di mana fungsionalitas penciutan diperluas?
Syed Aqeel Ashiq
41

Bagi mereka yang masih mencari pohon dengan CSS3, ini adalah kode fantastis yang saya temukan di internet:

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: Selain kodenya, saya juga suka cara situs menunjukkannya beraksi ... sangat inovatif.

kumarharsh
sumber
5
Ini sebenarnya bukan jenis pohon yang Anda sarankan dalam pertanyaan Anda. Saya percaya Praveen Kumar harus dianugerahi dengan jawabannya
Blowsie
2
Saya sedang mencari pohon seperti yang pertama, melihat jawaban ini, dan memutuskan untuk menggunakan ini sebagai gantinya. Lucu bagaimana inspirasi bisa mengubah solusi!
Eric
2
@Blowsie: Saya telah mempertimbangkan saran Anda dan keadilan telah diberikan, lol. Senang rasanya melihat proyek mandiri berkembang karena beberapa permintaan acak oleh beberapa orang acak.
kumarharsh
Demo cepat: jsfiddle.net/pdcmoreira/6Lghm43a
Pedro Moreira
36

Jika seseorang menginginkan versi treeview yang dapat diperluas / diciutkan dari jawaban Vitaliy Bychik, Anda dapat menghemat waktu :)

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ş
sumber
:) bagus! Ide bagus +1.
Alex
1
Saya menambahkan $ ('. Tree> ul> li: first-child'). Show (); untuk mendukung banyak pohon di halaman. Terima kasih
suku84
8

Plugin jquery Treeview hebat lainnya adalah http://www.jstree.com/

Untuk tampilan lebih lanjut Anda harus memeriksa jquery-treetable
http://ludo.cubicphuse.nl/jquery-plugins/treeTable/doc/

Gal Margalit
sumber
Menurut situs tersebut, itu tidak didukung lagi sejak April 2010
levelnis
oh sayang sekali itu tidak didukung ... terlihat bagus.
kumarharsh
3
Hai, kedua perpustakaan sudah diperbarui dan didukung
Gal Margalit
Mereka didukung - lihat github.com/ludo/jquery-treetable/releases
Bartek Jablonski