使用浮动布局还是inline-block布局?
来源:互联网 发布:百度卫士软件管理中心 编辑:程序博客网 时间:2024/05/17 06:19
在上篇博客中对浮动做了介绍
http://blog.csdn.net/wmaoshu/article/details/52995912
浮动存在的问题也是很明显的,首先他会脱离文档流对父元素兄弟节点和孩子节点都有影响,那么为了实现对浮动布局的替代,那么我的考虑是使用inline-block。
浮动和inline-block他们在文档流中排版方式相似,但是inline-block是基线对齐,浮动是与所在的行框top对齐,同时他们对于width的计算都一样都是“自适应(shrink-to-fit)”并且margin为auto的时候都会定义为0。浮动和inline-block对于所构造的子元素的环境都是BFC。
区别就是在于浮动对其他元素造成影响但是浮动却不会,同时浮动可以向左向右浮动,inline-block的布局方向由文本的方向决定。同时一行几个浮动元素不存在行框的概念,所以对于不同高度的元素,可能会使得布局发生混乱,所以对于多了浮动元素,可能明确的确定这些浮动元素的height一致,但是inline-block元素元素外部的布局和行元素类似,所以根据行框形成的原理(行框的顶部回和最高的行框顶部对齐,行框额底部会和最低的行内框的底部对齐)
对于浮动存在的问题,就是要对其他受影响的元素通过清理浮动减少对他们的影响,同时inline-block由于本质属于行内内容,所以可能会有莫名的空白节点问题的存在,所以他们都要对附带的产生的问题济宁解决。
举例说明集中替代的方案。
例一:百度布局
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style> a { text-decoration:none; } p { margin: 0; padding: 0; } .clearfloat:after{ content: ""; display: block; clear: both; height: 0; visibility: hidden; } .box { display: inline-block; margin: 0 auto; } .row { border: 2px solid; } .row+.row { margin-top: 20px; } .cell { width: 75px; border: 1px solid; float: left; } .cell + .cell { margin-left: 20px; } img { width: 75px; height: 75px; } .name,.recom { text-align: center; margin-top: 5px; } .name { margin-top: 5px; } .recom { color: #999; } </style></head><body> <div class="box"> <div class="row clearfloat"> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字文字</a></div> <div class="recom"><p>文字文字文字文字</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字</a></div> <div class="recom"><p>文字文</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字</a></div> <div class="recom"><p>文字文文字文</p></div> </div> </div> <div class="row clearfloat"> <div class="cell "> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字</a></div> <div class="recom"><p>文字文</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字文字</a></div> <div class="recom"><p>文字文文字文文字文文字文</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字文字文字文字</a></div> <div class="recom"><p>文字文文字文文字文文字文文字文文字文</p></div> </div> </div> </div></body></html>
上述代码所示,由于列表项浮动,所以对于每一个列表的height不同显然不能在一个row中,否则可能由于浮动的特性会靠在另一个浮动的旁边,所以要加一个外框来限制布局。同时还要让row外面的边框清浮动。上述没有给cell元素明确width值,这利用了浮动的width收缩的特性。
Inline-block版本:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title></title> <style> a { text-decoration:none; } p { margin: 0; padding: 0; } .box { display: inline-block; width:285px; border: 1px solid; padding-left: 20px; font-size: 0; /*解决空白节点文字 否则可能影响布局*/ } .cell { display: inline-block; /*行内块化*/ width: 75px; /*根据inline-block和浮动的宽都具有“自适应收缩性”并且子元素存在文字描述,所以要明确的设置*/ vertical-align: top; /*与浮动不同默认为baseline所以要设置top*/ margin-right:20px; font-size: 16px; /*覆盖上述的设置*/ } img { width:75px; height:75px; } .name,.recom { text-align: center; margin-top: 5px; } .recom { color: #999; } </style></head><body> <div class="box"> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字文字</a></div> <div class="recom"><p>文字文字文字文字</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字</a></div> <div class="recom"><p>文字文</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字</a></div> <div class="recom"><p>文字文文字文</p></div> </div> <div class="cell "> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字</a></div> <div class="recom"><p>文字文</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字文字</a></div> <div class="recom"><p>文字文文字文文字文文字文</p></div> </div> <div class="cell"> <div class="img"><a href="#"><img src="images/image.jpg"></a></div> <div class="name"><a href="#">文字文字文字文字文字文字</a></div> <div class="recom"><p>文字文文字文文字文文字文文字文文字文</p></div> </div> </div></body></html>
使用inline-block方式,可以实现浮动的效果,但是要处理空白节点的问题。具体在代码中已经明确说明了。
- 使用浮动布局还是inline-block布局?
- 横向布局中浮动float和inline-block的使用
- 浮动布局-基于display:inline-block的列表布局
- 浮动布局-基于display:inline-block的列表布局
- 浮动布局-基于display:inline-block的列表布局
- 浮动布局 VS 基于display:inline-block的列表布局
- HTML-inline block布局
- inline-block布局
- 拜拜了,浮动布局-基于display:inline-block的列表布局
- 拜拜了,浮动布局-基于display:inline-block的列表布局
- inline-block代替浮动布局float:left列表布局最佳方案
- 拜拜了,浮动布局-基于display:inline-block的列表布局 张鑫旭博客笔记
- 拜拜了,浮动布局-基于display:inline-block的列表布局
- display:inline-block列表布局
- css布局之inline-block
- float布局和inline-block布局【原创】
- display:inline-block属性消除间隙(解决ie6.7)可代替浮动布局
- 还只会div+css浮动布局吗?你OUT了!听"老罗"讲解inline-block布局技术
- ide使用velocity静态模版
- eclipse报: Server Tomcat v8.0 Server at localhost failed to start
- Spring3.X企业开发实战(二):知识点
- 使用API23:Android 6.0编译并运行时HttpUtils报错
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher E HDU 1358
- 使用浮动布局还是inline-block布局?
- Java 实现定时任务的四种方式
- mob(sharedsdk)短信验证
- 值得推荐的C/C++框架和库 (真的很强大)
- nodejs 调用express模块出错
- Scala程序设计语言
- Dubbo架构设计详解
- fft基-2 dit算法
- PAT(Basic Level):数字分类(20)