CSS 1.css介绍 css指的是层叠样式表(cascading style sheets) 官方文档:https://www.w3school.com.cn/css/index.asp为什么需要c
顺晟科技
2022-09-13 13:47:01
43
line-height: 指两行文字基线
之间的距离。
行高200px表示两行文字基线之间的距离是200px;
并不是真的垂直居中
!!只有字体大小为0的时候,才能真正的垂直居中。
围绕文字看不见的盒子,其大小跟字体大小有关。范围大概就是选中单行文本后,你选中的区域了。
就像span、a、em、图片按钮等这些inline水平的标签一样,内联盒子会排成一样显示。区域大小是文字内容的范围。
内联盒子的一种,当纯文本没有内联标签环绕的时候,就是匿名内联盒子。
文字每一行就是一个行框盒子。
每个行框盒子又是由一个一个的内联盒子组成。
每个包含盒子由一行一行的包含盒子组成。
就像一个block水平的元素
包含盒子
行框盒子
内联盒子+内容区域
内容区域(单行文字)高度【即字体大小】 + 行间距 = 行高;
即高度的表现准确来说不是行高,而是内容区域和行间距。
行高决定内联盒子高度。
行间距可大可小,甚至可为负值。
跟着用户的浏览器走。与元素字体关联
以上原因,不推荐使用。因为在不同人的电脑上会有不同的高度差距表现。
input框等元素默认行高是normal
根据当前元素文字的font-size大小计算
假设当前元素文字大小设置为20px,那么当前元素或者继承的父元素的行高是1.5,则当前元素实际行高值为1.5*20 = 30px;
比如1.5em、1.5rem、20px、20pt等
注意:使用百分比值作为行高值,相对于设置了该line-height属性的元素的font-size大小计算。
也就是说,line-height百分比值在哪个元素身上,那么最终值就是这个元素的字体大小*这个元素的行高值。其他元素继承了这个元素的行高时,不管你的字体多大都没用。
假设当前元素文字大小设置为20px,那么当前元素或者继承的父元素的行高是150,当前元素父元素的字体大小是14,则当前元素实际行高值为150% * 14 = 自己算,结果不重要,注意理解他的计算方式。
与line-height: 1.5;的区别就是:150%计算行高值时,任何元素中,都是乘与固定的父元素文字大小值。
ie8+以上浏览器支持。
特殊点的,input框等元素默认行高是normal,使用inherit可以让文本框样式可控性更强。尽量别用normal,因为normal也是根据不同浏览器不同元素不同字体大小实现的。非常不可控。
比较行高设置为1.5倍数值或150%/1.5em时的具体区别:
对于我们理论计算出来的行高值,支撑的事实如下图:
第一张图的:
第二张图的:
150%和1.5em的一致,这里只实验了150%。事实证明,直接将150%改成1.5em。原有效果也灭有变化。
a). 图片设置display: block; //因为基线对齐的原则只适用于内联元素及内联块元素。
b). 图片设置vertical-align: bottom;
c). 父元素设置line-height: 0;
做法:
<div class="box">
<img src="https://img3.mukewang.com/57a6f85b00013c7202090209-100-100.jpg" alt="">
</div>
/*核心代码*/
.box{
line-height: 300px;
text-align: center;
}
.box>img{
vertical-align: middle;
}
缺点描述:这种代码实现的居中效果,middle并不是绝对居中的。而是**基线往上1/2x高度的位置。
4像素
,并且,这个-4值是通过我本案例中计算出来的,仅适用于本案例,body是默认字体16px的情况下。其他情况估计还要具体测量计算。但是总之margin-top:负值;
这个思路是没错的了。
另外,这种写法只兼容到ie8+
多行文本水平垂直居中的原理跟上一页图片的实现是一样的,区别在于要把多行文本所在的容器的display水平转换成和图片一样的,也就是inline-block,以及重置外部继承的text-align和line-height属性值。
<div class="content-box">
<div class="content">
我是多行文本。多行文本水平垂直居中的原理跟上一页图片的实现是一样的,区别在于要把多行文本所在的容器的display水平转换成和图片一样的,也就是inline-block,以及重置外部继承的text-align和line-height属性值。
</div>
</div>
.content-box{
/* 核心: */
line-height: 300px;
text-align: center;
}
.content{
/* 核心: */
display: inline-block;
vertical-align: middle;
/* 覆盖:继承自父元素、用于布局的代码 */
line-height: 21px;
text-align: left;
/* 具体情况具体分析,本案例字体是16px,差距就是4像素。 */
margin-top: -4px;
}
完整代码:
即在ie6/7下,设置元素的高度属性会触发haslayout。
但是行高设置值不会触发。
这个我就偷懒不自己写代码了,直接截图:
09
2022-11
09
2022-11
09
2022-11
09
2022-11
19
2022-10
19
2022-10