移动web开发----高效移动web布局

flexbox弹性盒子布局

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
混个划分:父元素用display:webkit-flex;说明使用弹性布局,它的子元素有一个元素是固定宽度width:100px的,剩下的元素就按照剩余宽度等比划分。

小技巧:
不定宽高的水平垂直居中

//第一种方法:绝对定位配合translate(-50%,50%)方法
.myoff-wrapper{
	position:absolute;//首先绝对定位
	top:50%;
	left:50%;
	z-index:3;
	-webkit-transform:translate(-50%,50%);
	border-radius:6px;
	background:#fff;
}
//第二种方法:flex方法
.parent{
	display:-webkit-flex;
	justify-content:center;//子元素水平居中
	align-items:center;//子元素垂直居中
}

学习最好的方式直接自己撸码写demo然后调试验证。。。跑下面的demo:

flex布局中padding和margin都是没问题的,

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Web的Flex弹性盒模型</title>
<style>
	body{
		font-family: '微软雅黑';
		/*font-family: cursive, '微软雅黑';*/
		padding: 0;
		margin: 20px 0 40px;

		font-size: 16px;
		background-color: #F9F9F9;
	}
	h1{
		color: #0BF;
		text-indent: 15px;
	}
	h3{
		color: #6D7273;
		text-indent: 15px;
		padding: 10px 0;
		background-color: #fff;
	}
	p{
		margin: 0;
		padding: 0;
		color: #666;
		margin-bottom: 5px;
	}

	.boxes{
		padding: 0 10px;
		overflow: hidden;
		display: -webkit-flex;
		flex-wrap: wrap;
		align-content:flex-start
	}
	.box{
		width: 400px;
		padding: 8px;
		margin-right: 20px;
		margin-bottom: 10px;
		display: inline-block;
		box-shadow: 2px 2px 3px 1px #E0E0E0;
	}

	.boxstyle{
		padding: 8px 0;
	}
	.boxborder{
		border: 1px dashed #B6B6B6;
	}
	.demo{
		color: #fff;
		display: -webkit-flex;
		text-align: center;
	}
	.demo .item{
		line-height: 40px;
		background-color: #ddd;
	}
	.demo .item:nth-child(1){
		background-color: #E46C49;
	}
	.demo .item:nth-child(2){
		background-color: #37B0D3;
	}
	.demo .item:nth-child(3){
		background-color: #68B33D;
	}
	.demo .item:nth-child(4){
		background-color: #E46775;
	}
	.demo .item:nth-child(5){
		background-color: #CFC731;
	}
	.demo .item:nth-child(6){
		background-color: #8370F4;
	}

	.demo .item span{
		display: block;
	}

	.demo2 .item{
		height: 60px;
		width: 150px;
		word-wrap: break-word;
		line-height: 1.5;
	}

	.demo-row{
		flex-direction: row;
	}
	.demo-row-reverse{
		flex-direction: row-reverse;
	}
	.demo-column{
		height: 200px;
		flex-direction: column;
	}
	.demo-column-reverse{
		height: 200px;
		flex-direction: column-reverse;
	}

	.demo-nowrap{
		-webkit-flex-wrap: nowrap;
		width: 400px;
	}
	.demo-wrap{
		-webkit-flex-wrap: wrap;
		width: 400px;
	}
	.demo-wrap-reverse{
		-webkit-flex-wrap: wrap-reverse;
		width: 400px;
	}
	.demo-align-content{
		width: 400px;
		flex-wrap: wrap;
		height:200px;
		border: 1px dashed #B6B6B6;
	}
	.demo-align-content .item:nth-child(1), .demo-align-content .item:nth-child(2), .demo-align-content .item:nth-child(3),
	.demo-align-content .item:nth-child(4), .demo-align-content .item:nth-child(5), .demo-align-content .item:nth-child(6){
		background-color: #717171;
		width: 80px;
		margin: 2px 10px;
	}

</style>
</head>
<body>
	<h1>Web的Flex弹性盒模型</h1>
	<section class="content">

		<h3>[ flex ]</h3>
		<div class="boxes">
			<div class="box">
				<div class="boxstyle">
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo1">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="flex:2">flex: 2;</div>
					<div class="item" style="flex:1">flex: 1;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>display: -webkit-flex; </p>
				</div>
				<div class="demo demo2 boxborder">
					<div class="item" style="margin-right:10px;">
						<span>width:150px;</span> <span>margin-right:10px;</span></div>
					<div class="item" style="flex:1">flex: 1;</div>
					<div class="item" style="margin-left:10px;">
						<span>width:150px;</span> <span>margin-left:10px;</span></div>
				</div>
			</div>
		</div>

		<h3>[ flex-direction ]</h3>
		<div class="boxes" style="width:900px">
			<div class="box">
				<div class="boxstyle">
					<p>flex-direction: row; /*default*/</p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-row">
					<div class="item" style="flex:1">flex: 1;</div>
					<div class="item" style="flex:2">flex: 2;</div>
					<div class="item" style="flex:3">flex: 3;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>flex-direction: row-reverse;</p>
					<p>display: -webkit-flex; </p>
				</div>
				<div class="demo demo-row-reverse">
					<div class="item" style="flex:1">flex: 1;</div>
					<div class="item" style="flex:2">flex: 2;</div>
					<div class="item" style="flex:3">flex: 3;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>flex-direction: column;</p>
					<p>display: -webkit-flex; </p>
				</div>
				<div class="demo demo-column">
					<div class="item" style="flex:1">flex: 1;</div>
					<div class="item" style="flex:2">flex: 2;</div>
					<div class="item" style="flex:3">flex: 3;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>flex-direction: column-reverse;</p>
					<p>display: -webkit-flex; </p>
				</div>
				<div class="demo demo-column-reverse">
					<div class="item" style="flex:1">flex: 1;</div>
					<div class="item" style="flex:2">flex: 2;</div>
					<div class="item" style="flex:3">flex: 3;</div>
				</div>
			</div>
		</div>

		<h3>[ flex-wrap ]</h3>
		<div class="boxes" style="width:1310px">
			<div class="box">
				<div class="boxstyle">
					<p>-webkit-flex-wrap: nowrap; /* default */</p>
					<p>display: -webkit-flex; </p>
					<p>width: 400px</p>
				</div>
				<div class="demo demo-nowrap">
					<div class="item" style="width: 100px">100px;</div>
					<div class="item" style="width: 200px">width: 200px;</div>
					<div class="item" style="width: 300px">width: 300px;</div>
				</div>
			</div>
			<div class="box">
				<div class="boxstyle">
					<p>-webkit-flex-wrap: wrap</p>
					<p>display: -webkit-flex; </p>
					<p>width: 400px</p>
				</div>
				<div class="demo demo-wrap boxborder">
					<div class="item" style="width: 100px">100px;</div>
					<div class="item" style="width: 200px">width: 200px;</div>
					<div class="item" style="width: 300px">width: 300px;</div>
				</div>
			</div>
			<div class="box">
				<div class="boxstyle">
					<p>-webkit-flex-wrap: wrap-reverse</p>
					<p>display: -webkit-flex; </p>
					<p>width: 400px</p>
				</div>
				<div class="demo demo-wrap-reverse boxborder">
					<div class="item" style="width: 100px">100px;</div>
					<div class="item" style="width: 200px">width: 200px;</div>
					<div class="item" style="width: 300px">width: 300px;</div>
				</div>
			</div>	
		</div>

		<h3>[ flex-flow ]: flex-direction flex-wrap; /* 自个体会吧 */</h3>

		<h3>[ justify-content ]</h3>
		<div class="boxes" style="width:1310px;">
			<div class="box">
				<div class="boxstyle">
					<p>/* 效果如同 float:left; */</p>
					<p>justify-content: flex-start; /* default */</p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="justify-content: flex-start;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p><p>/* 效果如同 float:right; */</p></p>
					<p>justify-content: flex-end;</p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-justify boxborder"  style="justify-content: flex-end;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>/* 第三代水平居中方案 */</p>
					<p>justify-content: center;</p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-justify-end boxborder" style="justify-content: center;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>justify-content: space-between; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-justify boxborder" style="justify-content: space-between;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>justify-content: space-around; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-justify-end boxborder" style="justify-content: space-around;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>
		</div>

		<h3>[ align-self ]</h3>
		<div class="boxes">
			<div class="box" style="width:1000px;">
				<div class="boxstyle">
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="width: 1000px; height:200px;">
					<div class="item" style="width:200px; align-self:flex-start;">align-self:flex-start;</div>
					<div class="item" style="width:200px; align-self:flex-end;">align-self:flex-end;</div>
					<div class="item" style="width:200px; align-self:center;">align-self:center;</div>
					<div class="item" style="width:200px; align-self:auto;">
						<span>align-self:auto;</span>
						<span>/*default */</span>
					</div>

					<div class="item" style="width:200px; align-self:baseline;">align-self:baseline;</div>
					<div class="item" style="width:200px; align-self:stretch;">align-self:stretch;</div>
				</div>
			</div>
		</div>

		<h3>[ align-items ]</h3>
		<div class="boxes">
			<div class="box">
				<div class="boxstyle">
					<p>align-items: flex-start; /* default */</p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="align-items: flex-start;height:200px;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>align-items: flex-end; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="align-items: flex-end;height:200px;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>/* 第三代垂直居中 */</p>
					<p>align-items: center; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="align-items: center;height:200px;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>align-items: baseline; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="align-items: baseline;height:200px;">
					<div class="item" style="width:100px">width:100px;</div>
					<div class="item" style="width:100px">width:100px;</div>
				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>align-items: stretch; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo boxborder" style="align-items: stretch;height:200px;">
					<div class="item" style="width:100px; height:100px;">height:100px;</div>
					<div class="item" style="width:150px; min-height:20px;">min-height:20px;</div>
					<div class="item" style="width:150px; max-height:60px;">max-height:60px;</div>
				</div>
			</div>
		</div>


		<h3>[ align-content ]</h3>
		<div class="boxes">
			<div class="box">
				<div class="boxstyle">
					<p>/* <span style="color:red"> 对比 align-items</span>*/</p>
					<p>align-items: flex-start</p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-items: flex-start">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>

				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>align-content: flex-start; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-content: flex-start;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>

				</div>
			</div>

			<div class="box">
				<div class="boxstyle">
					<p>align-content: flex-end; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-content: flex-end;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>

				</div>
			</div>
			<div class="box">
				<div class="boxstyle">
					<p>align-content: center; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-content: center;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>

				</div>
			</div>
			<div class="box">
				<div class="boxstyle">
					<p>align-content: space-between; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-content: space-between;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>
				</div>
			</div>
			<div class="box">
				<div class="boxstyle">
					<p>align-content: space-around; </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-content: space-around;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>

				</div>
			</div>		

			<div class="box">
				<div class="boxstyle">
					<p>align-content: stretch; /*default*/ </p>
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="align-content: stretch;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" >d</div>
					<div class="item" >e</div>
					<div class="item" >f</div>

				</div>
			</div>	
	
		</div>	

		<h3>[ order ]</h3>
		<div class="boxes">
			<div class="box" style="width:1000px;">
				<div class="boxstyle">
					<p>display: -webkit-flex;</p>
				</div>
				<div class="demo demo-align-content" style="width: 1000px;height:40px;">
					<div class="item" >a</div>
					<div class="item" >b</div>
					<div class="item" >c</div>
					<div class="item" style="order:-1; width:120px"> d (order:-1) </div>
					<div class="item" >e</div>
					<div class="item" >f</div>
				</div>
			</div>
		</div>

	</section>
	

</body>
</html>

兼容性:

  • IOS可以使用最新的flex布局
  • Android4.4以下,只能兼容旧版的flexbox布局
  • Android4.4及以上,可以使用最新的flex布局

介于兼容性问题,建议使用旧版的flexbox方案。
这里写图片描述

响应式设计

响应式核心的逻辑是媒体查询

//当页面的宽度达到1024px的时候就用以下的样式
@media screen and(max-width:1024px){
	#pagewrap{
		width:95.5%;
	}
	#content{
		width:62%;
	}
	#content .article .hr{
		width:66%;
		margin-left:34%;
	}
}

媒体类型:
screen(屏幕)
print(打印机)
handheld(手持设备)
all(通用)

常用媒体查询参数:
width:视口宽度
height:视口高度
device-width:设备的宽度
device-height:设备的高度
orientation:检查设备处于横向(landscape)还是竖屏(portrait)

设计点一:百分比布局
仅仅使用媒体查询来适应不同的固定宽度设计,只会从一组CSS到另一组CSS的切换。两种之间没有任何平滑的渐变,当没有命中媒体查询的范围时,页面展示就会不可控,出现滚动或者换行。
比如突然苹果又出了个iPad min,,这就尴尬了。。。
这里写图片描述

设计点二:弹性图片

img{
	max-width:100%;
}

很简单,如同第一点布局使用百分比,图片也使用百分比。其背后的思路是:无论何时,都全包在一个容器里面,以最大的宽度完整的显示图片
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值