float等比例布局


当页面缩小时,想让排列在一行的3个div不换行,该怎么搞定? 
我的代码主要是这样的... 

<style type="text/css">  
.left {  
    float:left;  
    display:inline;  
}  
.center{  
    float:left;  
    display:inline;  
}  
.right{  
    float:right;  
    display:inline;  
}  
</style>  
<div class="left"><div>  
<div class="center"><div>  
<div class="right"><div>  
页面平铺的时候都是正常的,但页面一缩小,div就换行了。 
请大家给点思路!


我先用固定长度把3个div都固定死,页面一缩小还是换行。然后我用百分比把3个div固定死,还是换行。都不知道什么原因。


你要动态调整3个div的宽度 用这个 
<div style="width:100%;" id="outer">   
    <div class="left"></div>      
    <div class="center"></div>      
    <div class="right"></div>     
</div> 


Javascript代码  

<script type="text/javascript">  
    (function _w(){  
        var outer=document.getElementById('outer');  
        var w=outer.offsetWidth;  
        var cw=outer.childNodes[1].offsetWidth;  
        var mlrw=w-cw;  
        if(mlrw<0)return;  
        outer.childNodes[0].style.width=outer.childNodes[2].style.width=Math.floor(mlrw/w*50)+'%';  
    })();  
    window.οnresize=_w;  
</script>  

中间那个div给个固定长度


float为什么会换行


在W3school上面找到原因了,原话如下: 
假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。 


也就是如果我把最外层的div宽度固定死,比如960px,就不会发生这样的问题。 
但是如果定义成100%,最外层div下面的第二个div的宽度却是固定的,当我页面缩小时,没有足够的空间可供它浮动,所以就跳到下一行了。。。



摘自:http://www.iteye.com/problems/45251



原创:

<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="UTF-8">
<title>网站概览</title>
<link rel="stylesheet" href="http://at.alicdn.com/t/font_400532_4wyibvzj00r1wcdi.css">
<link rel="stylesheet" href="../css/bootstrap.min.css">
<link href="../css/comon0.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" media="all" href="../../../plugins/dateUtil/css/daterangepicker-bs3.css" />
<style>
.chart-row>:first-child{
   margin-left:0;
}
.chart-item{
  float: left;    
   min-height:250px;
    margin-left:10px; 
}
 .chart-row>:last-child{
    float:right;
} 
</style>

</head>
<body >
  <div class="barseach">
    <div class="headbar">
      <h1>网站概览</h1>
   </div>
    <div class="tab_search">
      <form class="form-inline">
        <div id="choiceUL"  style="margin-bottom:5px;display:inline-block;"></div>
           <div class="form-group"><a href="javascript:void(0)" class="btn btn-primary" id="query"  οnclick="query()"><i class="icon iconfont icon-chaxun"></i>查询</a></div>    
      </form>
    </div>
  </div>
 
<div class="padd20"   id="flexCtrl" ng-controller="FlexCtrl"> 
  <div class="chart-row navbox clearfloat" >
          <div class="chart-item padd15 bgwhite "  width-flex="1" row-width="rowWidth"></div>
          <div class="chart-item padd15 bgwhite "  width-flex="1" row-width="rowWidth"></div>
          <div class="chart-item padd15 bgwhite "  width-flex="1" row-width="rowWidth"></div>
  </div>
  
  <div class="chart-row  navbox clearfloat">
          <div id="test" class="chart-item padd15 bgwhite" width-flex="2" row-width="rowWidth"></div>
          <div class="chart-item padd15 bgwhite" width-flex="1" row-width="rowWidth"></div>
  </div>
  
  <div class="chart-row  navbox clearfloat">
          <div class="chart-item padd15 bgwhite" width-flex="1" row-width="rowWidth"></div>
  </div>
<div>    
</body>
<script src="../js/jquery1.11.js"></script>
<script  src="../js/bootstrap.min.js"></script>
<script src="../../../plugins/angular/angular.js"></script>
<script src="../../../plugins/dateUtil/js/moment.js"></script>
<script src="../../../plugins/dateUtil/js/daterangepicker.js"></script>
<script src="../../../js/ToolUtils.js"></script>
<script src="../js/dzgzptTool.js"></script>
<script src="../js/XWFXdatepicker.js"></script>
<script>
var app =angular.module('app',[]);
</script>
<script src="../js/ngFlex.js"></script>
<script>
$(document).ready(function() {
	$("#choiceUL").datepicker();
});
</script>
</html>


自定义ngFlex指令

/*根据比重的大小,确定元素在一行布局中的宽度比例*/
 angular.module("app").controller('FlexCtrl', ['$scope', "$window","$timeout",function ($scope,$window,$timeout) {
	 $scope.rowWidth = $(".chart-row").eq(0).width();
 }]);



angular.module("app").directive("widthFlex",function($window){	
	
	function updateWidthRatio($scope, elem){
		var num = $(elem).siblings().length+1;  
		var flex = parseInt($(elem).attr("width-flex"));
		var flexSum =flex;
		for(var i = 0;i<num-1;i++){
			flexSum += parseInt($(elem).siblings().eq(i).attr("width-flex"));
		}				
		var parentWidth =  $scope.rowWidth;
		var marginLeftWidth =   (num==1)?0:parseInt($(elem).siblings().eq(num-2).css("margin-left"));
		marginLeftWidth = (marginLeftWidth == 0) ?  parseInt($(elem).css("margin-left")) : marginLeftWidth ;
		var ratio = ((parentWidth - marginLeftWidth*(num-1))*flex/flexSum)/parentWidth*100;
		 $(elem).css("width",ratio+"%");
	}
	
	
	return {
		restrict:"A",
		replace:true,
		scope:{
			rowWidth:"="    //隔离作用域下,父控制器$scope上的对象必须作为指令的属性值,这里必须用双向绑定
		},
        link:function ($scope, elem, attrs) { 
        	updateWidthRatio($scope, elem);
        	$scope.$watch(attrs.rowWidth, function (value) {    //在指令里只能监听attrs.rowWidth的变化,不能监听$scope.rowWidth的变化
        		 updateWidthRatio($scope, elem);
            })
        }  
	}
})

//使用float做等比例布局,网页缩放、窗口大小改变情况下会出现换行,所以监听onresize事件,从而重置宽度比例
window.onresize = function(){
	var rowWidth = $(".chart-row").eq(0).width();
	var $scope = angular.element($("#flexCtrl")).scope();
	$scope.rowWidth = rowWidth;
	$scope.$apply();
}






以上布局是用float模拟flex出来的效果,子元素会全部占满父元素的空间。


如果要让子元素不必占满父元素的空间,只要保持相应的比例即可,可以使用bootstrap的栅格布局。

bootstrap的栅格布局中,通过设置内距(padding)从而创建列与列之间的间距。

行容器(.row),其定义了“margin-left”和”margin-right”值为”-15px”,用来抵消第一个列的左内距和最后一列的右内距。

所以bootstrap的栅格布局也不会出现换行的情况。


<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="UTF-8">
<title>网站概览</title>
<link rel="stylesheet" href="http://at.alicdn.com/t/font_400532_4wyibvzj00r1wcdi.css">
<link rel="stylesheet" href="../css/bootstrap.min.css">
<link href="../css/comon0.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" type="text/css" media="all" href="../../../plugins/dateUtil/css/daterangepicker-bs3.css" />
<style>
.row{
   margin-bottom:10px;
}
.row:last-child{
   margin-bottom:0px;
}
.row li a {
   min-height:150px;
}
</style>

</head>
<body >
  <div class="barseach">
    <div class="headbar">
      <h1>网站概览</h1>
   </div>
    <div class="tab_search">
      <form class="form-inline">
        <div id="choiceUL"  style="margin-bottom:5px;display:inline-block;"></div>
           <div class="form-group"><a href="javascript:void(0)" class="btn btn-primary" id="query"  οnclick="query()"><i class="icon iconfont icon-chaxun"></i>查询</a></div>    
      </form>
    </div>
  </div>
 
<div class="padd20"  > 
   <!-- 数据面板 -->
  <div class="indextab navbox" >
    <ul  class="row"   >
    <li class="col-xs-3"><a></a>
    </li>
    <li  class="col-xs-3"><a></a>
    </li>
    <li  class="col-xs-3"><a></a>
    </li>
    <li  class="col-xs-3"><a></a>
    </li>
    </ul>
     <ulclass="row"   >
    <li  class="col-xs-3"><a></a>
    </li>
    <li  class="col-xs-3"><a></a>
    </li>   
    </li>
    </ul>
  </div>
 <!--  数据面板 end -->
  
  <div class="navbox bgwhite padd15"  id="qktj" style="min-height:320px">
  </div>
  
<div>    
</body>
<script src="../js/jquery1.11.js"></script>
<script  src="../js/bootstrap.min.js"></script>
<script src="../../../plugins/angular/angular.js"></script>
<script src="../../../plugins/dateUtil/js/moment.js"></script>
<script src="../../../plugins/dateUtil/js/daterangepicker.js"></script>
<script src="../../../js/ToolUtils.js"></script>
<script src="../js/dzgzptTool.js"></script>
<script src="../js/XWFXdatepicker.js"></script>
<script>
var app =angular.module('app',[]);
</script>
<script>
$(document).ready(function() {
	$("#choiceUL").datepicker();
});
</script>
</html>

效果如下:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值