CSS3 弹性盒模型与流式布局

image

  这是一个常见的页面布局,Header→Body→Footer,中间Body包含两到三列,重要内容放置在html靠前位置,优先加载,html代码如下:

<div class="wrapper">
<header>Header</header>
<article>
<div class="main">Main</div>
<aside class="aside">Aside</aside>
<aside class="sub">Sub</aside>
</article>
<footer>Footer</footer>
</div>

  如果使用传统的CSS来实现,比较麻烦,得使用float,margin负值,但是采用CSS3一个新增属性——display:box后,一切问题,迎刃而解。我们先看相关文档(飘零雾雨 CSS3手册):

  实现的CSS代码,左右定宽,中间自适应的流式布局,html、css代码量极少。

header{ height:100px; margin-top: 10px; border: 1px solid #000;}
article
{ height:300px; margin-top: 10px;}
footer
{ height:50px; margin-top: 10px; border: 1px solid #000;}
article
{ display:-webkit-box; display:-moz-box; display:box; width: 100%;}
.aside
{ width: 150px; border: 1px solid #f00; -webkit-box-ordinal-group:0; -moz-box-ordinal-group:0; box-ordinal-group:0;}
.main
{ -webkit-box-flex:1; -moz-box-flex:1; box-flex:1; -webkit-box-ordinal-group:1; -moz-box-ordinal-group:1; box-ordinal-group:1; margin: 0px 10px; border: 1px solid #f00;}
.sub
{ width: 200px; border: 1px solid #f00; -webkit-box-ordinal-group:2; -moz-box-ordinal-group:2; box-ordinal-group:2;}

  box-flex:<number>,number为任意数字,默认为0。意思为子元素按照父元素剩余空间分配比例,number即为比例数。两个aside的宽度分别为150px、200px,article剩余空间分配给main,如果article宽设为100%,即为流式布局。

  box-ordinal-group:<number>,元素按number值显示,数值较低的元素显示在数值较高的元素前面。本来页面加载顺序是【main】→【aside】→【sub】,我们把这3个的box-ordinal-group值分别设为1-0-2,这样就让aside在main左边显示了。

  最后,我们看下传统做法是怎样的。

  html代码:

<div class="old_method">
<div class="hd">Header</div>
<div class="bd">
<div class="bd_main">
<div class="main_content">Main</div>
</div>
<div class="bd_side">Side</div>
<div class="bd_sub">Sub</div>
</div>
<div class="ft">Footer</div>
</div>

  css代码:

.old_method{ margin-top: 20px;}
.hd
{ height:50px; margin-top: 10px; border: 1px solid #000;}
.bd
{ height:300px; margin-top: 10px; }
.ft
{ height:50px; margin-top: 10px; border: 1px solid #000;}
.bd
{ width: 100%; overflow: hidden;}
.bd_side
{ float: left; width: 150px; margin-left: -100%; margin-bottom: -3000px; padding-bottom: 3000px; background-color: #f00; }
.bd_main
{ float: left; width: 100%; margin-bottom: -3000px; padding-bottom: 3000px; background-color: #ccc; }
.bd_main .main_content
{ margin: 0px 200px 0 150px;}
.bd_sub
{ float: left; width: 200px; margin-left: -200px; margin-bottom: -3000px; padding-bottom: 3000px; background-color: #f60;}

  通过margin负值把side拉到左边,sub拉上右边;margin-bottom: -3000px; padding-bottom: 3000px;使两边同高,效果图如下:

  完整代码如下:

View Code
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>css3 弹性盒模型</title>
<meta name="Keywords" content="" />
<meta name="Description" content="" />
<style type="text/css">
header
{ height:50px; margin-top: 10px; border: 1px solid #000;}
article
{ height:300px; margin-top: 10px; }
footer
{ height:50px; margin-top: 10px; border: 1px solid #000;}
article
{ display:-webkit-box; display:-moz-box; display:box; width: 100%;}
.aside
{ width: 150px; border: 1px solid #f00; -webkit-box-ordinal-group:0; -moz-box-ordinal-group:0; box-ordinal-group:0;}
.main
{ -webkit-box-flex:1; -moz-box-flex:1; box-flex:1; -webkit-box-ordinal-group:1; -moz-box-ordinal-group:1; box-ordinal-group:1; margin: 0px 10px; border: 1px solid #f00;}
.sub
{ width: 200px; border: 1px solid #f00; -webkit-box-ordinal-group:2; -moz-box-ordinal-group:2; box-ordinal-group:2;}

.old_method
{ margin-top: 20px;}
.hd
{ height:50px; margin-top: 10px; border: 1px solid #000;}
.bd
{ height:300px; margin-top: 10px; }
.ft
{ height:50px; margin-top: 10px; border: 1px solid #000;}
.bd
{ overflow: hidden;}
.bd_side
{ float: left; width: 150px; margin-left: -100%; margin-bottom: -3000px; padding-bottom: 3000px; background-color: #f00; }
.bd_main
{ float: left; width: 100%; margin-bottom: -3000px; padding-bottom: 3000px; background-color: #ccc; }
.bd_main .main_content
{ margin: 0px 200px 0 150px;}
.bd_sub
{ float: left; width: 200px; margin-left: -200px; margin-bottom: -3000px; padding-bottom: 3000px; background-color: #f60;}
</style>
</head>
<body>
<div class="wrapper">
<header>Header css3 方法</header>
<article>
<div class="main">Main</div>
<aside class="aside">Aside</aside>
<div class="sub">Sub</div>
</article>
<footer>Footer</footer>
</div>
<div class="old_method">
<div class="hd">Header 不用css3的方法</div>
<div class="bd">
<div class="bd_main"><div class="main_content">Main</div></div>
<div class="bd_side">Side</div>
<div class="bd_sub">Sub</div>
</div>
<div class="ft">Footer</div>
</div>
</body>
</html>










  

 

转载于:https://www.cnblogs.com/leecanz/archive/2012/03/05/2379723.html

购物商城项目采用PHP+mysql有以及html+css jq以及layer.js datatables bootstorap等插件等开发,采用了MVC模式,建立一个完善的电商系统,通过不同用户的不同需求,进行相应的调配和处理,提高对购买用户进行配置….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值