一、区分block,inline,inline-block

  1、block

  block元素会独占一行,多个block元素会各自新起一行。默认情况下,block元素宽度自动填满其父元素宽度。

  block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。

  block元素可以设置margin和padding属性。

  2、inline

  inline元素不会独占一行,多个相邻的行内元素会排列在同一行里,直到一行排列不下,才会新换一行,其宽度随元素的内容而变化。

  inline元素设置width,height属性无效。

  inline元素的margin和padding属性,水平方向的padding-left, padding-right, margin-left, margin-right都产生边距效果;但竖直方向的padding-top, padding-bottom, margin-top, margin-bottom不会产生边距效果。

  3.inline-block

  inline-block 后的元素创建了一个行级的块容器,该元素内部(内容)被格式化成一个块元素,同时元素本身则被格式化成一个行内元素。

  直白一点的意思就是:inline-block 的元素既具有 block 元素可以设置宽高的特性,同时又具有 inline 元素默认不换行的特性。当然不仅仅是这些特性,比如 inline-block 元素也可以设置 vertical-align 属性。简而言之:

二、兼容性

  相对于针对手机上高版本-webkit-内核浏览器的流体布局方式flex()以及box()盒模型,inline-block的兼容性可谓有容乃大,但是网上还是有一种说法--ie6和ie7不支持inline-block,真的是这样吗,我们来探索一下。

  在 msdn 微软开发者社区,找到了 IE 从5.5 开始支持 inline-block 的证据:

The inline-block value is supported starting with Internet Explorer 5.5. You can use this value to give an object a layout without specifying the object’s height or width.

  既然这样,我们为什么还会看到这样的一组适配ie6,ie7代码呢:

  display:inline-block; 
  *display:inline; 
  *zoom:1;

  究其原因发现,在IE下,display:inline-block只是触发了元素的layout。比如将display:inline-block给到div上,只能保证这个div拥有块元素的特征(可以设置宽度和高度),但是还是行布局(产生换行)。接下来要设置display:inline.更改这个div的布局为内联布局(不产生换行)。

三、

  好了,给大家补充了基础知识之后就可以进入今天的正题了

  1、神奇的水平空隙

  元素被inline-block之后,水平方向会产生大小不固定的空隙

  

  如图:五个li之间的间隙就是inline-block产生的神奇现象。

  

  原来默认inline-block元素之间会产生换行符(类似空格之类的空白字符),除非你的html结构<li></li><li></li>写成这个鬼样子,但是这么写了之后可读性很差,我们当然不会用这么不优雅的方式解决问题,既然是字符,那么font-size:0不就好了,没错,可是并不是所有浏览器都支持font-size:0,怎么办呢?这时候就要请出我们的letter-spacing这个属性了,大部分情况下这个间隙是4px,那么我们只要设置letter-spacing:-4px就好了(关于间隙大小随着字号和字体的变化而不一样以及opera浏览器兼容问题请参考张鑫旭大神的文章http://www.zhangxinxu.com/wordpress/2010/11/%E6%8B%9C%E6%8B%9C%E4%BA%86%E6%B5%AE%E5%8A%A8%E5%B8%83%E5%B1%80-%E5%9F%BA%E4%BA%8Edisplayinline-block%E7%9A%84%E5%88%97%E8%A1%A8%E5%B8%83%E5%B1%80/")

  2、实现列表两端自适应布局(摒弃float)

  为什么我会摒弃float?

  首先,对于float,会面临清除浮动,高度坍塌等常见问题,最重要的,会引起重绘和回流等效率问题,也是我摒弃他的最重要原因,所以能用inline-block代替他为什么还坚持使用float呢。

  现在,请出我们的另一个主角--text-align:justify,并且当子元素高度不一致的时候我们可以通过verticle-align来调整垂直方向的位置。

  请记住:列表(或文字)要两端对齐的前提就是内容必须超过一行

  

  看吧,就是这么简单,但是大家也会注意到最后一行的排列问题,放心,我们一个个来解决。

  (1)最后一行也两边排列:

    

.justify_fix{display:inline-block; width:100%; height:0; overflow:hidden;}

    给html加一个class="justify_fix"的元素就可以了

  (2)最后一行左对齐排列:

.left_fix{height:0; padding:0; overflow:hidden;}

    html中补上n个class="left_fix"元素

    n的个数就是每行元素的列表个数啦

  好啦,问题解决了,怎么样,inline-block简单好用吧,只要记住和它搭配的这些个属性处理一般的布局应该不成问题。

  第一篇文,各路大神请指教~

浅谈inline-block的更多相关文章

  1. IOS 浅谈闭包block的使用

    前言:对于ios初学者,block通常用于逆向传值,遍历等,会使用,但是可能心虚,会感觉block很神秘,那么下面就一起来揭开它的面纱吧. ps: 下面重点讲叙了闭包的概念,常用的语法,以及访问变量, ...

  2. 浅谈 block(1) – clang 改写后的 block 结构

    这几天为了巩固知识,从 iOS 的各个知识点开始学习,希望自己对每一个知识理解的更加深入的了解.这次来分享一下 block 的学习笔记. block 简介 block 被当做扩展特性而被加入 GCC ...

  3. 对kotlin和java中的synchronized的浅谈

    synchronized在java中是一个关键字,但是在kotlin中是一个内联函数.假如分别在java和kotlin代码锁住同一个对象,会发生什么呢,今天写了代码试了试.首先定义people类 12 ...

  4. CSS属性中的display属性浅谈;

    首先我们要知道什么是块级元素和行内元素有什么区别: 承接上篇文章:(浅谈HTML和body标签) 块级元素:浏览器解析为独占一行的元素(例如:div.table.ul等.),浏览器会在该元素的前后显示 ...

  5. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  6. 浅谈Android应用保护(一):Android应用逆向的基本方法

    对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...

  7. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  8. 浅谈 Linux 内核无线子系统

    浅谈 Linux 内核无线子系统 本文目录 1. 全局概览 2. 模块间接口 3. 数据路径与管理路径 4. 数据包是如何被发送? 5. 谈谈管理路径 6. 数据包又是如何被接收? 7. 总结一下 L ...

  9. 浅谈iOS中MVVM的架构设计与团队协作

    说到架构设计和团队协作,这个对App的开发还是比较重要的.即使作为一个专业的搬砖者,前提是你这砖搬完放在哪?不只是Code有框架,其他的东西都是有框架的,比如桥梁等等神马的~在这儿就不往外扯了.一个好 ...

  10. 【转】浅谈Java中的hashcode方法(这个demo可以多看看)

    浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native i ...

随机推荐

  1. iOS-NSString-Base64String-Base64原理

    之前看到好多人找Str2Base64Str,还有好多自己写了方法的,仔细研究了下base64的编码原理(这个我写在下面),发现官方的API已经可以完成这项功能,这里贴出来供大家参考. 一言不合就上代码 ...

  2. Windows消息对Edit控件的处理

    例如对windows发消息让文本选中. SendMessage(Text1.hwnd,EM_GETSEL,0,-1 ); EC_LEFTMARGIN(&H1) EC_USEFONTINF // ...

  3. RESTful, 说说 http 的 patch method

    最早的时候,我们只需要 GET 和 POST 方法,POST 方法的引入也只是为了消除 URL 过长,参数隐藏,上传文件的问题,完全和语义无关.接触到 RESTful 之后,我们开始思考 GET 和 ...

  4. hadoop2.0 eclipse 源码编译

    在eclipse下编译hadoop2.0源码 http://www.cnblogs.com/meibenjin/archive/2013/07/05/3172889.html hadoop cdh4编 ...

  5. R语言 一元线性回归

    #一元线性回归的基本步骤#1.载入数据 给出散点图 x<-c(0.10,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.20,0.21,0.23) y< ...

  6. closest

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. js中State模式的解析及运用

     状态模式,在大的范畴中的定义为当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.每种编程语言有不同的实现方式,运用的范围也多用于游戏之中. 这里我用javascript来模拟状 ...

  8. java多线程编程(3)买票

    1,买票非同步版本 http://www.cnblogs.com/anbylau2130/archive/2013/04/17/3025347.html很详细 public class 多线程2 { ...

  9. UIImageVIew的使用

    UIImageView是一个用于显示图片的控件 构造方法:     UIImage * tempImage = [UIImage imageNamed:IMAGE_NAME];     imageVi ...

  10. 关于ATL的rgs注册文件

    转自:http://blog.csdn.net/idiszerg/article/details/3875934 使用ATL向导的话,会在resource中产生一个rgs的注册脚本文件放在" ...