【问题标题】:Tree view is getting wrapped树视图正在被包裹
【发布时间】:2019-06-17 13:44:41
【问题描述】:

当您调整窗口大小时,树视图会被包裹起来。

在 Bootstrap 中,表格不会在窗口调整大小时缩小,但会显示一个水平滚动条,可用于滚动表格以查看它。

如何才能做到像 Bootstrap 4 响应式表一样?因此,在调整窗口大小时,树视图不会缩小,并且水平滚动条变得可见,可以滚动并查看完整的树视图。

/*Now the CSS*/
* {margin: 0; padding: 0;}

.tree ul {
	padding-top: 20px; position: relative;
	
	transition: all 0.5s;
	-webkit-tranasition: 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;
}
<div class="tree">
	<ul>
		<li>
			<a href="#">1</a>
			<ul>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li><li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
				<li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
				<li>
					<a href="#">3</a>
					<ul>
						<ul>
            <li>
							<a href="#">3.1</a>
              <ul>
            <li>
							<a href="#">3.1.1</a>
						</li>
						<li>
							<a href="#">3.1.2</a>
						</li>
					</ul>
						</li>
						<li>
							<a href="#">3.2</a>
						</li>
					</ul>
					</ul>
				</li>
			</ul>
		</li>
	</ul>
</div>

【问题讨论】:

  • 您是否尝试过将固定宽度(即:不是 %)应用到树容器?然后,您可以使用 overflow: scroll 让容器所在的任何 dom 元素具有响应宽度
  • @Jacquesジャック 仍然尝试工作,然后我也尝试了下面的答案,它有点工作,但是树视图超出了容器 div 并且水平滚动条一直可见。
  • going out of the container div 是什么意思?否则它将无法滚动。此外,如果您希望滚动条消失,那是一个单独的问题。 css-tricks.com/forums/topic/…

标签: javascript html css treeview


【解决方案1】:

作为一个简单的例子,我在.tree 元素周围添加了一个容器,并给它一个width: 100%overflow: scroll。然后我将.tree 设置为静态宽度。似乎工作正常。

/*Now the CSS*/
* {margin: 0; padding: 0;}
.tree { width: 1000px; } /* ******* I added this ******* */
.tree ul {
	padding-top: 20px; position: relative;
	
	transition: all 0.5s;
	-webkit-tranasition: 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;
}
.tree-cont { width: 100%; overflow: scroll; }
<div class="tree-cont"> <!-- added this wrapper -->
<div class="tree">
	<ul>
		<li>
			<a href="#">1</a>
			<ul>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
        <li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li><li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
				<li>
					<a href="#">2</a>
					<ul>
            <li>
							<a href="#">2.1</a>
              
						</li>
						<li>
							<a href="#">2.2</a>
						</li>
					</ul>
				</li>
				<li>
					<a href="#">3</a>
					<ul>
						<ul>
            <li>
							<a href="#">3.1</a>
              <ul>
            <li>
							<a href="#">3.1.1</a>
						</li>
						<li>
							<a href="#">3.1.2</a>
						</li>
					</ul>
						</li>
						<li>
							<a href="#">3.2</a>
						</li>
					</ul>
					</ul>
				</li>
			</ul>
		</li>
	</ul>
</div>
</div>

【讨论】:

    【解决方案2】:

    请检查sn-p。

    /*Now the CSS*/
    * {margin: 0; padding: 0;}
    .tree{
    width:100%;
    overflow-x:scroll;
    }
    .scrollwidth{width:900px;}
    .tree ul {
    	padding-top: 20px; position: relative;
    	
    	transition: all 0.5s;
    	-webkit-tranasition: 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;
    }
    <div class="tree">
    	<ul class="scrollwidth">
    		<li>
    			<a href="#">1</a>
    			<ul>
            <li>
    					<a href="#">2</a>
    					<ul>
                <li>
    							<a href="#">2.1</a>
                  
    						</li>
    						<li>
    							<a href="#">2.2</a>
    						</li>
    					</ul>
    				</li>
            <li>
    					<a href="#">2</a>
    					<ul>
                <li>
    							<a href="#">2.1</a>
                  
    						</li>
    						<li>
    							<a href="#">2.2</a>
    						</li>
    					</ul>
    				</li>
            <li>
    					<a href="#">2</a>
    					<ul>
                <li>
    							<a href="#">2.1</a>
                  
    						</li>
    						<li>
    							<a href="#">2.2</a>
    						</li>
    					</ul>
    				</li>
            <li>
    					<a href="#">2</a>
    					<ul>
                <li>
    							<a href="#">2.1</a>
                  
    						</li>
    						<li>
    							<a href="#">2.2</a>
    						</li>
    					</ul>
    				</li><li>
    					<a href="#">2</a>
    					<ul>
                <li>
    							<a href="#">2.1</a>
                  
    						</li>
    						<li>
    							<a href="#">2.2</a>
    						</li>
    					</ul>
    				</li>
    				<li>
    					<a href="#">2</a>
    					<ul>
                <li>
    							<a href="#">2.1</a>
                  
    						</li>
    						<li>
    							<a href="#">2.2</a>
    						</li>
    					</ul>
    				</li>
    				<li>
    					<a href="#">3</a>
    					<ul>
    						<ul>
                <li>
    							<a href="#">3.1</a>
                  <ul>
                <li>
    							<a href="#">3.1.1</a>
    						</li>
    						<li>
    							<a href="#">3.1.2</a>
    						</li>
    					</ul>
    						</li>
    						<li>
    							<a href="#">3.2</a>
    						</li>
    					</ul>
    					</ul>
    				</li>
    			</ul>
    		</li>
    	</ul>
    </div>

    【讨论】:

      【解决方案3】:

      请检查sn-p。

      /*Now the CSS*/
      * {margin: 0; padding: 0;}
      .tree{width:100%;overflow-x:scroll;}
      .scrollwidth{width:900px;}
      .tree ul {
      	padding-top: 20px; position: relative;
      	
      	transition: all 0.5s;
      	-webkit-tranasition: 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;
      }
      <div class="tree">
      	<ul class="scrollwidth">
      		<li>
      			<a href="#">1</a>
      			<ul>
              <li>
      					<a href="#">2</a>
      					<ul>
                  <li>
      							<a href="#">2.1</a>
                    
      						</li>
      						<li>
      							<a href="#">2.2</a>
      						</li>
      					</ul>
      				</li>
              <li>
      					<a href="#">2</a>
      					<ul>
                  <li>
      							<a href="#">2.1</a>
                    
      						</li>
      						<li>
      							<a href="#">2.2</a>
      						</li>
      					</ul>
      				</li>
              <li>
      					<a href="#">2</a>
      					<ul>
                  <li>
      							<a href="#">2.1</a>
                    
      						</li>
      						<li>
      							<a href="#">2.2</a>
      						</li>
      					</ul>
      				</li>
              <li>
      					<a href="#">2</a>
      					<ul>
                  <li>
      							<a href="#">2.1</a>
                    
      						</li>
      						<li>
      							<a href="#">2.2</a>
      						</li>
      					</ul>
      				</li><li>
      					<a href="#">2</a>
      					<ul>
                  <li>
      							<a href="#">2.1</a>
                    
      						</li>
      						<li>
      							<a href="#">2.2</a>
      						</li>
      					</ul>
      				</li>
      				<li>
      					<a href="#">2</a>
      					<ul>
                  <li>
      							<a href="#">2.1</a>
                    
      						</li>
      						<li>
      							<a href="#">2.2</a>
      						</li>
      					</ul>
      				</li>
      				<li>
      					<a href="#">3</a>
      					<ul>
      						<ul>
                  <li>
      							<a href="#">3.1</a>
                    <ul>
                  <li>
      							<a href="#">3.1.1</a>
      						</li>
      						<li>
      							<a href="#">3.1.2</a>
      						</li>
      					</ul>
      						</li>
      						<li>
      							<a href="#">3.2</a>
      						</li>
      					</ul>
      					</ul>
      				</li>
      			</ul>
      		</li>
      	</ul>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        相关资源
        最近更新 更多