《CSS世界》注3:行内元素与对齐
时间:2023-03-30 18:06:42
CSS
上一篇:《CSS世界》注2:盒子模型的四族下一篇:《CSS世界》注4:Flow的保护与销毁写在页面布局前面,内联元素的垂直对齐是一个比较常见和基本的布局需求,但是我们经常会因为垂直对齐中的1px和2px而头疼。在这篇博客(《css世界》第5章)中,张大大深入讲解了垂直对齐的原理,并提供了内联元素垂直对齐的最佳实践。1.基本概念(1)Baseline(基线):字母x的下边(线)为基线(2)x-height:小写字母x的高度,术语描述为基线和中线(也叫作中线,midline之间的距离)ascenderheight:上升线的高度capheight:大写字母的高度median:中线descenderheight:下降线的高度(3)middleline:vertical-对齐:中间;middle指基线向上1/2x-height高度(近似垂直居中)(4)unitex:CSS中的相对单位,指小写字母x的高度用法:内联元素的垂直居中效果不受影响字体和字体大小.icon-arrow{display:inline-block;宽度:20px;高度:1ex;background:url(arrow.png)no-repeatcenter;}它的视觉高度完全由line-height决定。通俗地说,纯内联元素的视觉高度不受padding、margin、border属性的影响(我们在之前的博客中也有说明)2.1行间距的一个公式:行间距=行高-字体大小分配上下行间距规则:当行间距为偶数时,上下行间距平分;当行间距为基数??时,上边距向上舍入,下边距向下舍入;因为大部分字体都是有偏的下面2.2line-height实现居中的误区:实现单行文字居中的不是line-height=height,单独使用line-height就可以实现应用:使用line-height来实现多行文本居中根据行高实现...
/*近似居中对齐*/.box{宽度:280px;行高:120px;背景色:#f0f3f9;保证金:自动;}。内容{显示:内联电子块;行高:20px;边距:020px;文本对齐:左;vertical-align:middle;}/*绝对居中*/.box{font-size:0;}.box.content{font-size:initial;}原理:近似居中:.box行高为120,.content行height为20,“ghostblanknode”撑起整个content区域在.content前面绝对居中:在上面的基础上,由于middle(基线以上1/2x-height)近似居中。由于x-height受font-size的影响,当font-size为0时,可以理解为绝对居中。2.3line-height属性值line-height默认值为normal,也支持数值、百分比值、长度值。normal的默认值在不同的字体中解析不同,所以在实际开发中一般会重新设置line-height重点:假设font-size=14px;值:行高:1.5;==>line-height计算值为1.5*14px=21px百分比值:line-height:150%;==>line-height计算值为150%*14px=21pxlengthvalue:line-height:21px乍一看好像是line-height:1.5、line-height:150%和line-height这三种用法:1.5em完全一样,最后的行高是font-size的计算值。不过实际上面,line-height:1.5和其他两个还是有点区别的,就是继承细节不一样如果你使用一个值作为line-height的属性值,那么所有的子元素都会继承这个值;但是,如果您使用百分比值或长度值作为属性值,则所有子元素都会继承最终的计算值。做法:基本上各大网站都使用数值作为全局的line-height值3.vertical-align属性(重点)vertical-align作用的前提条件是:只能应用于行内元素和displayvalueistable-cell注意,浮动和绝对定位会使元素块化,也会使vertical-align3.1属性值失效四种属性值:线型,如baseline(默认值)、top、middle、bottom;文本类型,例如text-top、text-bottom;上标和下标类别,例如sub、super;数字百分比类别,例如20px、2em、20%等;根据不同的计算值,它们相对于基线向上或向下偏移,到最后是向上还是向下取决于vertical-align的计算值是正还是负。如果它是负值,它将向下移动。如果它是一个正值,它将向上移动。vertical-align:baseline相当于vertical-align:0vertical-align的百分比:margin和padding是相对于width计算的,line-height是相对于font-size计算的,vertical-align属性的百分比值这里是相对于line-height的计算值计算的3.2Vertical-align相关的问题及解决方案(一)案例一:如果任意一个块级元素中有图片,则块级元素的高度基本都高比图片的高度
.box{border:1pxsolid#ccc;}.box>img{height:96px;}原因:间隙的三大罪魁祸首是“幽灵空白节点”、line-height和vertical-align属性;在图片前面放置一个小写的x,你会发现图片的基线是元素的底部,与“幽灵空白节点”的基线(小写x的下边缘)对齐;解决办法:挡住图片:你可以喘口气去掉“ghostblanknodes”,line-height和vertical-alignl高度:0;字体大小:0;干掉基线对齐:vertical-align的取值可以是top、middle、bottom中的任意一个(2)情况2:使用text-align:justify;实现文本Text-align:justify;多用于文本排版,有一个很重要的特点:不会对齐最后一行的两端,所以如果要对齐单行文本,需要加上text-align:justify;:
姓名
联系方式
label> $font-size:14px;$line-height:1.5;.form{背景颜色:#eee;宽度:$font-size*5+150px;}label{display:inline-block;文本对齐:对齐;宽度:$字体大小*5;高度:$字体大小*$行高;溢出:隐藏;垂直对齐:底部;margin-right:10px;}label:after{content:'';宽度:100%;display:inline-block;}(3)情况三:使用text-align:justify;为了让列表的两端对齐,为了让最后一行也两端对齐,需要使用占位符元素来实现换行