inline-block基线对布局的影响&vertical-align&vertical-align等应用
2016-10-29 13:43
489 查看
在上一篇博客 http://blog.csdn.net/wmaoshu/article/details/52961394
中介绍了
由此可以看出对于inline-block元素来说,他的基线取决于元素本身的特性,在该元素中没有行内子元素(注意是DOM树的子元素,有块子元素不算或者块子元素中有行元素这个行元素算)的时候或者overflow不为visible,该inline-block的基线为margin-bottom的下边界。否则,以该元素中最后一个行框子元素的基线为该元素的基线。
注意,没有继承性。行内元素包含inline-block比如input……要注意基线的问题,还包括inline元素比如span,strong,i,em,未知的元素……
(1)以百分数为单位:以该元素inline-height的百分数为值,相对基线上移或者下移。(基线在一个行框中是固定了的不存在某个行内框有自己的基线)。在IE7下vertical-align百分数不支持line-height为小数的情况。
(2)以长度为值:行元素上移动或者下移动。无论是以百分数或者长度为单位,上移动或者下移动都会影响到行框或者行内框的高度。
(3)Bottom:元素行内框底部与行框底部对齐。
(4)Top:元素行内框顶部与行框顶部对齐。
(5)Middle:行内元素的中点和基线上方1/2x-height处对其。由于X的中点(即基线上方1/2x-height)并不是内容区域的中心,所以行内元素并不是严格上的垂直居中对齐。如下解析:
经过ps测量从x中心到上方是101px,而到下方是99px,上方比下方多出2px,并且图片的中心与x的中点对齐,所以说图片上方的空白区域会比下方多出2px。所以图片并不是严格的垂直居中对齐。(其实不只是图片,包括所有的行内元素即使是单行文本用line-height也不是单纯的垂直居中的,原因就是x文字有下沉效果)。
解决方案一:如果单纯又行替换元素的话或者行内块元素的话,可以将包含块的font-size设置为0,这样就可以垂直居中了。这是一种直接的办法,有局限性。
解决方案二:在行内块元素后面加一个span或者其他的行内空元素,然后将这两个行内元素都middle。这个方式是一种相对的办法,就是说将包含块内部的文字也居中,那么图片就和文字的中点对齐,同时从中点到两边的距离都相等。
一个应用:实现不定行文字和不定尺寸图片的水平居中。
中介绍了
line-height,探讨了行框模型以及行替代元素的空白节点问题。在这一篇中多次强调了在行框中 字母“x”的一半并不是内容区域的一半,这是由“文字下沉”导致的。在将要介绍的这一篇中介绍line-height一个好基友是vertical-align,他俩可以说无论在哪,都几乎如影随形,他俩配合可以完成一些一些意想不到的效果。
inline-block的基线问题。
先来看几个表现:由此可以看出对于inline-block元素来说,他的基线取决于元素本身的特性,在该元素中没有行内子元素(注意是DOM树的子元素,有块子元素不算或者块子元素中有行元素这个行元素算)的时候或者overflow不为visible,该inline-block的基线为margin-bottom的下边界。否则,以该元素中最后一个行框子元素的基线为该元素的基线。
vertical-align
先来介绍下基本规范:特性 | 值 |
---|---|
值 | baseline、middle、bottom、top、sub、sup、inherit等 |
初始值 | baseline |
应用于 | 行内元素或者表单元格 |
继承性 | 无 |
(1)以百分数为单位:以该元素inline-height的百分数为值,相对基线上移或者下移。(基线在一个行框中是固定了的不存在某个行内框有自己的基线)。在IE7下vertical-align百分数不支持line-height为小数的情况。
(2)以长度为值:行元素上移动或者下移动。无论是以百分数或者长度为单位,上移动或者下移动都会影响到行框或者行内框的高度。
(3)Bottom:元素行内框底部与行框底部对齐。
(4)Top:元素行内框顶部与行框顶部对齐。
(5)Middle:行内元素的中点和基线上方1/2x-height处对其。由于X的中点(即基线上方1/2x-height)并不是内容区域的中心,所以行内元素并不是严格上的垂直居中对齐。如下解析:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 300px; line-height: 200px; border: 2px solid; } img { width: 200px; vertical-align: middle; } </style> </head> <body> <div> <img src="images/image.jpg" alt="">X </div> </body> </html>
经过ps测量从x中心到上方是101px,而到下方是99px,上方比下方多出2px,并且图片的中心与x的中点对齐,所以说图片上方的空白区域会比下方多出2px。所以图片并不是严格的垂直居中对齐。(其实不只是图片,包括所有的行内元素即使是单行文本用line-height也不是单纯的垂直居中的,原因就是x文字有下沉效果)。
解决方案一:如果单纯又行替换元素的话或者行内块元素的话,可以将包含块的font-size设置为0,这样就可以垂直居中了。这是一种直接的办法,有局限性。
解决方案二:在行内块元素后面加一个span或者其他的行内空元素,然后将这两个行内元素都middle。这个方式是一种相对的办法,就是说将包含块内部的文字也居中,那么图片就和文字的中点对齐,同时从中点到两边的距离都相等。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { width: 300px; line-height: 200px; border: 2px solid; font-size: 20px; } img { width: 200px; vertical-align: middle; } span { vertical-align: middle; } </style> </head> <body> <div> <img src="images/image.jpg" alt=""> <span>X</span> </div> </body> </html>
一个应用:实现不定行文字和不定尺寸图片的水平居中。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> div { border: 2px solid; text-align: center; } img { width: 200px; vertical-align: middle; } p { margin: 0; display: inline-block; vertical-align: middle; border: 1px solid; } span { vertical-align: middle; /*这一步是关键*/ /*或者font-size: 0;也是额可以解决的*/ line-height: 400px; /*可以这么说,这个line-height: 400px;就是确定这个包含快的高度的*/ } </style> </head> <body> <div> <p>文字文字文字文字文字<br>文字文字</p> <img src="images/image.jpg" alt=""> <span></span> <!--运用第二条解决方案,目的就是让上面两个行内快元素垂直居中--> </div> </body> </html>
相关文章推荐
- 影响布局的inline-block的空白符的问题
- inline-block,vertical-align:middle
- inline-block元素与父div底边之间的间距问题(inline-block与vertical-align:baseline)
- vertical-align及IE7下的inline-block
- Vertical-Align: 关于inline,inline-block文本排版
- inline-block text-align: justify 实现自适应布局, 当子inline-block之间没有空格时失效及原因
- 两个inline-block消除间距和对齐(vertical-align)
- inline-block 导致元素下沉 解决方法添加vertical-align:middle属性
- display:inline-block/text-align:justify下列表的两端对齐布局
- Vaadin Web应用开发教程(33):UI布局-HorizontalSplitPanel和VerticalSplitPanel布局
- CSS布局入门--应用Block Formatting Context
- 关于line box,inline box,line-height,vertical-align之间的关系
- css块元素的 display 属性 inline-block 的应用
- IE67实现inline-block布局
- 用inline-block实现两列布局,在手机浏览器上有兼容性问题
- 比float更好的网页布局之inline-block
- li的排列 inline-block的应用
- css块元素的 display 属性 inline-block 的应用
- display:inline-block/text-align:justify下列表的两端对齐布局
- div 和 block&inline