Twitter中的树Bootstrap
我一直在努力创build一个树(如目录树),尽可能多的CSS和尽可能less的JS(只为状态等),我想知道是否有一些现有的良好的树插件引导或jquery-ui bootstrap 。
为了参考或为这个问题困惑的人,我正在寻找像dynatree的引导。
在Vitaliy的CSS和Mehmet的jQuery的基础上 ,我改变了a
标签span
标签,并将一些Glyphicons和徽章合并到我的Bootstrap树构件上 。
例:
额外的功劳,我创造了一个 GitHub项目来承载jQuery和LESS代码,将这个树组件添加到Bootstrap。 请参阅http://jhfrench.github.io/bootstrap-tree/docs/example.html上的项目文档。;
或者,这里是生成该CSS的LESS源代码(JS可以从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; } }
你可以相信下面的图像树视图不使用任何JavaScript,但只依赖于CSS3? 看看这个CSS3的TreeView ,这是很好的Twitter的BootStrap:
你可以在这里http://acidmartin.wordpress.com/2011/09/26/css3-treevew-no-javascript/得到更多的信息。;
如果有人想从哈什的答案中select树视图的垂直版本,可以节省一些时间:
.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; }
对于那些仍然在用CSS3search树的人来说,这是我在网上find的一段梦幻般的代码:
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:除了代码之外,我还喜欢网站展示它的方式…真的很有创意。
如果有人想从Vitaliy Bychik的答案中得到可扩展/可折叠的treeview版本,可以节省一些时间:)
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(); }); });
另一个很棒的Treeview jquery插件是http://www.jstree.com/
为了提前看法,你应该检查jquery-treetable
http://ludo.cubicphuse.nl/jquery-plugins/treeTable/doc/