当页面缩小时,想让排列在一行的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>
效果如下: