使用盒模型实现多栏布局

  前面讲解display属性时介绍过多个属性值,这些属性值分别用于定义不同的“盒模型”。CSS 3还提供了一个box属性值,通过该属性值可以更好地实现多栏布局。需要指出的是,主流浏览器目前暂不支持标准的box属性值,因此实际使用时需要添加浏览器厂商前缀,例如-moz-、-webkit-等。
  通过float、inline-box方式实现的多栏布局相比,使用box属性值来实现多栏布局可以让多个栏目的底部对齐。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 盒模型实现多栏布局 </title>
    <style type="text/css">
        body{
            margin:0px;
        }
        div#container {
            display: box;
            display: -moz-box;
            display: -webkit-box;
            width: 960px;
            text-align: left;
        }
        #container>div {
            border: 1px solid #aaf;
            /* 设置HTML组件的width属性包括边框 */
            box-sizing: border-box;
            -moz-box-sizing: border-box;
            border-radius: 12px 12px 0px 0px;
            background-color: #ffc;
            padding:5px;
        }
    </style>
</head>  
<body>  
<div style="margin:auto;text-align:center;">  
<div id="container">  
<div style="width:220px">  
<h2>疯狂软件开班信息</h2>  
<ul>  
    <li>2011年11月10日&nbsp;已满已开班</li>
    <li>2011年12月02日&nbsp;爆满已开班</li>
    <li>2012年02月08日&nbsp;已满已开班</li>
</ul>  
</div>  
<div style="width:500px;">  
<h2>疯狂软件介绍</h2>  
&nbsp;&nbsp;&nbsp;&nbsp;疯狂Java品牌专注高级软件编程,以“十年磨一剑”的心态打造全国最强(不是之一)疯狂Java学习体系:包括疯狂Java体系原创图书,疯狂Java学习路线图,这些深厚的知识沉淀已被大量高校、培训机构奉为经典。<br/> 
&nbsp;&nbsp;&nbsp;&nbsp;疯狂Java怀抱“软件强国”的理想,立志以务实的技术来改变中国的软件教育。经过八年沉淀,疯狂Java强势回归。疯狂Java创始人李刚,携疯狂Java精英讲师团队肖文吉、李韩飞、黄勇、陈辉等老师将带给广大学习者“非一般”的疯狂。
</div>  
<div style="width:240px">  
<h2>公司动态</h2>  
<ul>  
    <li>《疯狂Java讲义》(第2版)上市</li>
    <li>泰豪电网软件公司来校召开现场招聘会</li>
    <li>疯狂学子赴武汉光谷软件园入职</li>
    <li>新华南方来校现场招聘</li>
</ul>  
</div>  
</div>  
</div>  
</body>  
</html>  

分栏布局与多栏布局的区别

  分栏布局与多栏布局是不同的,分栏布局只是将一篇文章分成多个栏目显示,HTML元素对内容的分栏位置是不确定的,因此分栏布局只适合显示单篇文章;多栏布局则是由开发者自己控制将页面分成多栏,分栏位置可以自己控制,因此更适合页面布局效果。

垂直排列的子布局

  CSS 3为box盒模型提供了如下属性。
  ➢ box-orient:设置box盒模型里子元素的排列方向。该属性支持如下两个属性值。
  □ horizontal:box盒模型里的子元素水平排列。如果没有为子元素指定高度,水平排列的box盒模型里子元素的高度等于父容器的高度。
  □ vertical:box盒模型里的子元素垂直排列。如果没有为子元素指定宽度,垂直排列的box盒模型里子元素的宽度等于父容器的宽度。
  ➢ box-ordinal-group:设置box盒模型里子元素的显示顺序。
  ➢ box-flex:设置box盒模型里子元素自适应宽度的比例。例如,box盒模型多余的空白宽度为150px,其中第一个子元素设置box-flex为1,第二个子元素设置box-flex为2,那么多余的空白宽度将会分给第一个元素的宽度为1501/(1+2)即50px,分给第二个子元素的宽度为1502/(1+2)即100px。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 垂直排列 </title>
    <style type="text/css">
        div#container {
            border: 1px solid black;
            padding: 5px;
            width: 600px;
            height: 140px;
            display: box;
            display: -moz-box;
            display: -webkit-box;
            box-orient: vertical;
            -moz-box-orient: vertical;
            -webkit-box-orient: vertical;
        }
        div>div {
            border: 1px solid #aaf;
            /* 设置HTML组件的width属性包括边框 */
            box-sizing: border-box;
            -moz-box-sizing: border-box;
            border-radius: 12px 12px 0px 0px;
            padding:5px;
        }
    </style>
</head>  
<body>  
<div id="container">  
    <div>栏目一</div>
    <div>栏目二</div>
    <div>栏目三</div>
</div>  
</body>  
</html>  

水平排列的子布局

  将box盒模型里子元素的排列方式改为水平排列,并使用box-ordinal-group属性指定元素的显示顺序。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 水平排列 </title>
    <style type="text/css">
        div#container {
            border: 1px solid black;
            padding: 5px;
            width: 600px;
            height: 140px;
            display: box;
            display: -moz-box;
            display: -webkit-box;
            box-orient: horizontal;
            -moz-box-orient: horizontal;
            -webkit-box-orient: horizontal;
        }
        div>div {
            border: 1px solid #aaf;
            /* 设置HTML组件的width属性包括边框 */
            box-sizing: border-box;
            -moz-box-sizing: border-box;
            border-radius: 12px 12px 0px 0px;
            padding:5px;
        }
    </style>
</head>  
<body>  
<div id="container">  
    <div style="box-ordinal-group:2;-moz-box-ordinal-group:2;
    -webkit-box-ordinal-group:2;">栏目一</div>
    <div style="box-ordinal-group:1;-moz-box-ordinal-group:1;
    -webkit-box-ordinal-group:1;">栏目二</div>
    <div style="box-ordinal-group:2;-moz-box-ordinal-group:3;
    -webkit-box-ordinal-group:3;">栏目三</div>
</div>  
</body>  
</html>  

  通过使用box-flex属性则可让box盒模型中的子元素自动占满整个父容器。例如,将页面中第一个子元素的box-flex设为1,第三个box-flex设为3。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 水平排列 </title>
    <style type="text/css">
        div#container {
            border: 1px solid black;
            padding: 5px;
            width: 600px;
            height: 140px;
            display: box;
            display: -moz-box;
            display: -webkit-box;
            box-orient: horizontal;
            -moz-box-orient: horizontal;
            -webkit-box-orient: horizontal;
        }
        div>div {
            border: 1px solid #aaf;
            /* 设置HTML组件的width属性包括边框 */
            box-sizing: border-box;
            -moz-box-sizing: border-box;
            border-radius: 12px 12px 0px 0px;
            padding:5px;
        }
    </style>
</head>  
<body>  
<div id="container">  
    <div style="box-flex:1;-moz-box-flex:1;
    -webkit-box-flex:1;">栏目一</div>
    <div>栏目二</div>
    <div style="box-flex:3;-moz-box-flex:3;
    -webkit-box-flex:3;">栏目三</div>
</div>  
</body>  
</html>  

注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。