“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法

摘要:
最近,当我使用三个跨度(或divs)来制作带有圆角边框的按钮时,这很酷~但是当我在中间跨度上写文本时,带文本的跨度的下降程度与上面文本的大小有关。然后我尝试使用垂直对齐来直接修改文本的重心位置:带文本的范围与不带文本的区域对齐!很明显,垂直对齐设置不正确。

转:http://www.xuebuyuan.com/825857.html

故事:

最近在使用3个span(或div)制作带圆角边框的按钮时,按照常识,把span的display设置成inline-block,这样就可以设置span的width和height了,很爽的~

可是当我在中间的span写上文字的时候,神奇的事情发生了:

“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法第1张

是的,写上字的那个span掉下来了,掉落,排版错位,很恶心的东西!使用Chrome的开发者工具查看,css和盒模型没有半点问题,郁闷中……

仔细观察发现,掉落的高度貌似跟文字的高度差不多,试了下,如果把文字字体加大,发现变成这样了:

“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法第2张

是的,有文字span向上移动了一些!也就是说,掉落的那个、有文字的span的掉落程度跟它上面的文字的大小有关系,文字的大小代表什么?大号文字的重心明显比小号文字的重心高,于是把字体改回原来的样子,然后试着使用vertical-align直接修改文字的重心位置为:

vertical-align:top

得到这样的结果:

“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法第3张

成功了!有文字的span跟没有文字的span对齐啦!

原因:

很明显是vertical-align设置错误的问题,谷歌了下vertical-align的用法,找到如下链接:

CSS属性Vertical Align使用方法讲解

http://www.jzxue.com/wangyesheji/css/201006/11-3937.html

大体意思是,vertical-align只用在display属性inline或inline-block的情况下才能使用,默认为baseline,就是“display属性inline或inline-block”的控件的底端跟文字的baseline(基线)对齐:

“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法第4张

所以,在设置vertical-align之前,左右两个没有文字的span的底端跟中间那个有文字的span里的文字的基线对齐了,所以中间那个span就下降了文字高度的尺寸。而改变文字的尺寸后,基线随之被提高,然后中间有文字的那个span也就跟着上去了。设置vertical-align:top后,左右两边的span的top跟中间span的top对齐,问题解决了~

示例代码

顺带转载那篇文章吧~

《CSS属性Vertical Align使用方法讲解》(转自:http://www.jzxue.com/wangyesheji/css/201006/11-3937.html

CSS有一个属性叫Vertical Align。当你第一次学习它的时候会有些困惑,因此我觉得我们可以通过它的用法来了解它。最基本的用法像这样:

img{ 
vertical-align: middle; 
}

注意在这个应用案例中,它被应用到了img元素上。图片通常是行内元素,意味着它通常是和文字在一起的。但是到底”在一起”确切的是什么意思?这就是Vertical-align所要解决的。

有效值为:baseline,sub,super,top,text-top,middle,bottom,text-bottom,length或者百分比值。

我认为最让人使人困惑的是,当大家尝试着给块级元素使用vertical-align时,却得不到任何结果。如果你有一个大一些div,其中包含一个小的div,你希望小的能够在大的之内垂直居中对其,vertical-align没法帮到你。Douglas Heriot有好方法来实现这种效果。

 

Baseline

vertical-align默认的值就是baseline(如果你没有做任何声明的话)。图片会和文字以文字基线为准对其。注意下行字母降到了基线以下。图片不会和下行字母的最下端对齐,那不是基线。

baseline2.png

Middle

也许vertical-align的最常用的用法是给图标大小的图片设置为”middle”。结果有着跨浏览器的一致性。

vert-align-cross-browser.jpg

浏览器能够让文字和图片精确的对齐:

vert-align.png

要小心如果图片比当前文字和行高要大的话,在需要的时候它会将下面的线条向下推:

pushdown.png

Text-bottom

和基线不同,它是文字的底端,是下行文字靠近的方向。图片也可以很好的和它对齐。

text-botto.png

Text-top

和text-bottom相反的就是text-top,当前文字的最高点。你也可以依次对齐。注意下面的文字,Georgia字体,最上端要比图片高出一点。

text-top.png

Top和Bottom

Top和Bottom类似于text-top和text-bottom,但是他们不受文字的限制,依赖于所在行的所有东西(比如另外一张图片)。因此如果一行有两张图片,不同的高度,而且都要比所在行的文字大,它们的顶端(或者底端)就会对齐,而不理会文字的大小。

Sub和Super

这两个值的意思是上标和下标,因此元素按照这个方式对齐自身如下:

subandsuper.png

在表格中垂直对齐

不像图片,表格默认为居中垂直对齐:

table-middle.png

如果你希望文字与表格的顶部或者底部对齐,应用top或者bottom对齐。

topandbottom.png

当给表格应用vertical-align时,是靠顶部、底部还是居中对齐要看运气。没有一个值是能够解释的通的,不同的浏览器有不可预料的结果。比如,在表格中给文字应用text-bottom对齐方式时,IE6中是在底部,Safari4中是在顶部。设置为sub,IE6中是在中间,Safari4中是在顶部。

Vertical Align和Inline-Block

图片,从理论上来说是行内元素,表现上却像是行内块级元素。你可以给它设置高度和宽度,它会遵守,不像其它行内元素。

给行内块级元素应用vertical-align,表现就像如上图片那样,这是vertical-align是最少让你担心的。但是那是另外一个故事了……

不要使用缩写

通常你会在表格中看到”valign”来实现垂直对齐。比如,<td valign=top>。需要说明的是这种缩写是不应该使用的。真的没有任何理由这样使用CSS。

 

 

欢迎加入,Java,前端的共同学习【爱问共享编程部落】 479668591

免责声明:文章转载自《“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Canal使用小结H5 可堆叠的圆环进度条,支持任意数量子进度条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

帆软常用JS

1.鼠标移动图片放大 $("td[id^=A] img").mouseover(function(e){var col=Number($(this).attr("col"))+1; //获取鼠标当前所在单元格的col var row=$(this).attr("row"); //获取鼠标当前所在单元格的row var img=this.src; //获取到...

h5---链接

在标题下方加入如下代码实现链接下方下划线取消 <style> a:link {text-decoration: none;color:red;} a:visited {color:green;text-decoration:none;} a:hover  {color:blue;text-decoration:underline;} a:ac...

矩阵, 矩阵 , Android基础控件之ImageView

天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原创,希望各位看官冷静勿喷,能接受的赞一个,不能接受的速喷赶紧走......(转载请注明出处,没功劳也有苦劳...) 这篇介绍的是Android常用控件之Ima...

java-mysql(3) 读写image

在mysql里面用来存储图片有一个特殊的数据对象叫做 Blob(Binary Large Object). 数据库里面插入一张图片: 第一步:需要为图片创建一个文件对象 File img = new File(proppath); FileInputStream fileInputStream = null; try { fileInputS...

C++ opencv高速样例学习——读图显示

1.关键函数 1. 读入图片 imread(图片或位置,显示格式)默觉得:IMREAD_COLOR 显示格式:  IMREAD_UNCHANGED =-1    // 8bit, color or not    IMREAD_GRAYSCALE    = 0    // 8bit, gray    IMREAD_COLOR           = 1  ...

uniapp支付宝小程序上传图片转base64

最近使用uniapp涉及到一个上传图片的功能,原本看官方文档api觉得没问题,正常开发, 1. 首先微信端没问题 uni.getFileSystemManager().readFile({ filePath: url, //选择图片返回的相对路径 encoding: "base64", //编码格式 succes...