利用float和margin实现两端对齐布局

 实现效果如下图:

这种布局方式一般我们都会想到直接使用float浮动外加margin-right做右侧留白,既实现多个小模块按顺序排列,

超出一行又会自动换行,从而实现这个效果。但是,实现过程中会遇到一个问题就是最右边的留白处理问题,

当然可以根据选择每行会有多少个模块,设置:nth-...为2n或者3n这种方式,操作css,从而实现。但是这种方式太麻烦了,

而且很不灵活,不是一个通用的解决方案。其实,可以利用margin改变元素尺寸特性来解决这个问题。

下面直接上代码:

<div class="wrapper">
		<div class="test-margin">
			<div>111</div>
			<div>222</div>
			<div>333</div>
			<div>444</div>
			<div>555</div>
			<div>666</div>
			<div>777</div>
		</div>
    </div>
.wrapper{
	width: 640px;
	overflow: hidden;
}
.test-margin{
	height: 100px;
	margin-right: -20px;
}
.test-margin::after{
	content: '';
	display: block;
	clear: both;
}
.test-margin > div{
	float: left;
	height: 100px;
	line-height: 100px;
	width: 200px;
	margin-right: 20px;
	margin-bottom: 20px;
	background-color: #dddddd;
	text-align: center;
}

最外层的div.wrapper为640px,每个模块为200px,中间有20px的留白间隙。

要怎么处理最右边多出来的20px留白呢?

在div.wrapper里面再套一层div.test-margin,这个div不设置width,保留流体特性,自动扩展到外围div.wrapper宽度。

将1 2 3 4 5...这几个div放到div.test-margin中,设置div.test-margin的margin-right : -20px。

此时,div.test-margin的可用宽度相当于100% + 20px,增加了div.test-margin的可用宽度。

当然,直接写div.test-margin的width多出20px也可以,但是只是适用于现在我这个模拟的场景。

在更复杂的场景中,我觉得这种方式还是有它的优势的,比如保证宽度是外围的100%,这个就不能写死width了吧。

 

参考: 《css世界》 ——张鑫旭

转载于:https://my.oschina.net/wangch5453/blog/2979901

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值