当年刚知道CSS display有 inline-block 这个神奇的属性的时候,感觉碉堡了,以为从此不用float了,什么div、p,只要 display: inline-block 就在一行上了。直到想用它装装逼的时候,才发现自己图样图森破,只能用一句话形容,当时我就懵逼了。。


莫名其妙的元素间隔

;;} 如此粗暴的reset方式。还是看个例子吧:

html:

<div id="text">
    <p>hahah</p>
    <p>hahhaha</p>
</div>

css:

#text p { display: inline-block; padding: 10px; background-color: red; color: #fff;}

显示:

两个inline-block的p出现了间隔。

对于其他的inline-block元素也是一样,比如img:

左右和上下都出现了间距。

那如何去掉他们呢。方法有很多:参见张鑫旭大大的博文:去除inline-block元素间间距的N种方法

我比较常用的 font-size:0 以及写的时候整成一行。。。orz

莫名其妙的对不齐

看下面的代码:

html:

<div id="img-text">
    <p class="bg-img"></p>
    <p class="words">wordswords</p>
</div>

css:

#img-text p { display: inline-block; }
#img-text .words { width: 100px; height: 100px; background-color: red; color: #fff; }
#img-text .bg-img { width: 100px; height: 100px; background-image: url(img/3.jpg); }

效果:

我勒个擦,为什么不能好好的排在一行,图上去了,文字下垂了。。。(我这里用的背景图,使用img标签也是一样的,写背景图主要是因为切图的时候好多都是以背景图出现的。)

解决方法也很简单,给图片或者背景设置 vertical-align: top 即可。

齐了!!!

其实对于其中的原理我也不是很清楚。在MDN上查了一下关于  vertical-align  的内容, vertical-align 适用于行内元素(inline)和表格单元格(table-cell)元素。所以就不要在div这些里面用它了。

再看它的取值,一大坨,不过大多数的取值有一个共性:那就是都是以父元素的基线为标准的。

问题来了父元素的基线是什么鬼。。。

基线大概就是以前上学时写拼音或者英语的四线格子的第三条线。。恩,大概是。

我给父元素加了几个字:

你会发现图片的底大概就在“我是父元素字体”这几个字的3/4处,img默认的vertical-align就是baseline。

然后我们看一下vertical-align取值top的时候是什么意思:

元素及其后代的顶端与整行的顶端对齐

很明了,与整行的顶端对齐,就是这个样子:

不过图片底部还是与父元素字体的大概3/4处对齐。

网上还有说设置为text-bottom神马的,不过我试验都是没有对齐的。

其实,啰嗦这么多,一个float就可以搞定。

而且,看他们贴的多近。

[2015-8-31更新]

张鑫旭大大最近又更新了一篇长文, 我觉得大家可以直接去看这一篇了, 从理论到应用:

CSS深入理解vertical-align和line-height的基友关系

inline-block元素的一些坑的更多相关文章

  1. CSS3如何去除 inline block 元素之间多出的空格

    display: inline-block 属性很好的避免了元素的浮动问题,但是会有点小问题,就是 inline-block 元素间的回车会被显示为一个空格.然而,我们写代码时,都是用回车来格式化的. ...

  2. 多个inline元素、block元素、inline-block元素在父容器中的换行情况

    1.首先看inine元素的换行情况 <style> *{padding:0;margin:0} div.wrap{width:200px;height:200px;border:1px s ...

  3. 当inline元素包裹block元素时会发生什么

    经常有图片链接写法如下: <a href="www.baidu.com"><img src="baidu.jpg" /></a&g ...

  4. inline元素、block元素、inline-block元素

    inline 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行,直到该行排满. block 块级元素:是可以控制宽和高.margin等,并且会换行.块级对象元素会单独占一行显示, ...

  5. block元素和inline元素的特点

    一.block元素的特点 1.处于常规流中时,如果width没有设置,会自动填充满父容器 2.可以设置height/width及margin/padding 3.处于常规流中时,布局在前后元素位置之间 ...

  6. 关于block元素和inline元素

    呃...这个会不会太基础了.最近在复习,所以基础知识也不能够忽略. 根据HTML 4.01 规范,其描述如下(http://www.w3.org/TR/html401/struct/global.ht ...

  7. inline元素、block元素

    inline元素 不会独占一行,相邻的行内元素会排列在同一行内,直到一行排不下才会换行 高.行高.以及外边距和内边距不可改变 宽度就是它的文字或图片的宽度,不可改变,随元素内容变化而变化 内联元素只能 ...

  8. inline,block,inline-block的区别

    display:block block元素会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父元素宽度. block元素可以设置width,height属性.块级元 ...

  9. inline, block, and inline-block

    总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通 ...

  10. display:inline block inline-block 的区别

    原文地址:http://blog.csdn.net/jly036/article/details/5506182 display:block就是将元素显示为块级元素. block元素的特点是: 总是在 ...

随机推荐

  1. DuiLib(二)——控件创建

    上一篇讲了窗口及消息,了解了大体的程序框架.这一篇说的是控件的创建. duilib支持XML配置文件,即根据XML创建窗口及控件,将界面与逻辑分开,便于修改及维护.上一篇的示例中可以看到在消息WM_C ...

  2. HTTP Post Request using Apache Commons

    Demonstrates an HTTP Post using the Apache Commons HTTP library. Required Libraries: httpcore-4.1.ja ...

  3. HDU 4821 String hash

    String Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. codeforces Gym 100500H A. Potion of Immortality 简单DP

    Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...

  5. delphi 保存网页MHT

    delphi 保存网页MHT   uses ADODB_TLB, CDO_TLB, ComObj,MSHTML;{$R *.dfm}{能把网页如 WWW.QQ.COM保存为一个单文件 .MHT但不能把 ...

  6. PAT 1003

    1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...

  7. 关于Service常驻内存不被清理的解决方法.

    众所周知, Service是跑后台的. 但是有些Rom厂商把一键清理做的真是太好用了, 以至于一键清理变成了一种习惯, Service已经变的不再是Service了. 那为什么像诸如360, 微信, ...

  8. IDEA 编译错误:java: try-with-resources is not supported in -source 1.6 (use -source 7 or higher to enable try-with-resources)

    错误描述 在用IDEA编译别人的项目的时候遇到下面的错误: java: try-with-resources is not supported in -source 1.6 (use -source ...

  9. 深入理解 GCD

    前言 首先提出一些问题: dispatch_async 函数如何实现,分发到主队列和全局队列有什么区别,一定会新建线程执行任务么? dispatch_sync 函数如何实现,为什么说 GCD 死锁是队 ...

  10. C#项目代码规范

    C#项目代码规范   前言 小菜就是小菜,几个人搞出来的项目,让公司大牛稍微看了下,最后送出了惨不忍睹四个字.命名各种各样,五花八门,大写英文.小写英文.大写拼音.小写拼音.英文和拼音组合.字母和特殊 ...