css中的baseline
这是css
中的一个容易被人忽略的概念,今天在知乎上看到一个问题,这个问题应该是关于baseline
,才去补习了一下关于baseline
的知识,首先我来还原一下问题:
<div style="position:absolute;left:0;top:0;background:black;color:white;font-size:24px;">
<span style="background:red;margin:0;">
<span>sss</span><span style="overflow:hidden;display:inline-block;background:blue;">ssfdfdfdfdfdfdfdfdfds</span>sss
</span>
</div>
,为什么会产生这种现象,这种现象怎么解释?
这个问题,我在看后就是一脸懵逼的状态,但是看到貘吃馍香大神在下面利用了baseline,对做出一番解释,于是顺便去查了一下baseline。结果发现自己的只是有很大空缺。
首先我们来介绍一下什么是ifc:内联格式化上下文,ifc的line box(线框)高度由其包含行内元素中最高的实际高度计算而来,也就是说我们的线框高度是由该行行内级元素最高顶边与最低底边的距离。
行内级元素:行内级元素是那些不会为自身内容形成新的块,而让内容分布在多行中的元素,比如我们的将display设置成inline,inline-block等,都可以变为一个行内级元素。
inline-block后的元素,宽高margin设定有效,参与ifc,并且在行内对齐时使用自己的底边作为基线对齐位置。
inline后的元素,宽高margin设定无效,参与ifc,并且在行内对齐时使用它内文字基线作为基线对齐位置。
baseline:行内盒子依靠vertical-align属性来进行垂直面上的对齐,默认值为baseline,也就是与其父元素基线相对齐;但是当我们的vertical-align为bottom或者top的时候,这种情况下,必不会为其定义baseline,这种情况下,使其底边与父元素的baseline对齐。
我们来试着解释一下上面提到的那个问题:
我们的第二个span,首先是display: inline-block,css规范规定,被inline-block的行内盒子,其bseline就是其父元素的最后一个行内盒子的baseline,所以我们只为其添加inline-block,而不添加overflow:hidden;时,我们得到的是下图这样的情况:
这时并没有发生我们上面问题的那种情况,但是当这个被inline-block的行内盒子的overflow属性不是默认的visible时,此时这个行内盒子的baseline就不在是其父级元素的最后一个行内盒子的baseline,而变为了这个行内盒子的底边。也就是说这时与我们父元素的baseline对齐的就是我们被inline-block的行内盒子底边。
所以解决我们这种问题的原因也比较简单,也就是将我们的第二个span添加一个vertical: top;或者vertical: bottom;就可以,使我们的盒子的底边与父元素的baseline对齐。
相信很多人在刚接触前端或者中期时候总会遇到一些问题及瓶颈期,如学了一段时间没有方向感或者坚持不下去一个人学习枯燥乏味有问题也不知道怎么解决,对此我整理了一些资料 喜欢我的文章想与更多资深大牛一起讨论和学习的话 欢迎加入我的学习交流群907694362
css中的baseline的更多相关文章
- 浅析CSS中的BFC和IFC
1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...
- CSS中盒子模型和position(一)
今天遇到几个css中的重要的知识点,记得这些都是以前看过的:margin.padding.border和position.可是用起来还是有很多的问题,以前自己看过去总是懒得记录,等到用起来了都不知道自 ...
- 深入理解 CSS 中的行高与基线
1.基本概念 1. 基线.底线.顶线.中线 注意:基线(base line)并不是汉字文字的下端沿,而是英文字母“x”的下端沿. 2. 内容区 内容区是指底线和顶线包裹的区域(行内元素display ...
- 《转载》深入理解 CSS 中的行高与基线
这篇文章总结的很好,故转载收藏. 1.基本概念 1. 基线.底线.顶线.中线 注意:基线(base line)并不是汉字文字的下端沿,而是英文字母“x”的下端沿. 2. 内容区 内容区是指底线和顶线 ...
- 【css笔记】css中的盒模型和三种定位机制(固定定位,绝对定位,浮动)
html页面上的元素都可以看成是框组成的,框通过三种定位机制排列在一起就过程了我们看到的页面.而框就是盒模型. 盒模型 1.页面上的每个元素可以看成一个矩形框,每个框由元素的内容,内边距,边框和外边距 ...
- CSS中垂直居中的方法
昨天总结了css中水平居中的方法,今天来总结一下css中实现垂直居中的方法. line-height line-height用于实现单行文本的垂直居中,如下图中,我们要求单行文本垂直居中,只需要将di ...
- 一日一练-CSS CSS中percentage百分值的使用
子曰:学好百分值,考试考百分 首先是确定CSS 中的percentage 都可以应用在CSS 中的哪些属性,以及这些属性的值如何进行计算的,参考CSS 参考手册进行统计. 定位(Positioning ...
- css中的行高line-height
“行高”顾名思意指一行文字的高度.具体来说是指两行文字间基线之间的距离.基线实在英文字母中用到的一个概念,我们刚学英语的时使用的那个英语本子每行有四条线,其中底部第二条线就是基线,是a,c,z,x等字 ...
- CSS中易忽略的点
一.使用斜杠/分割的关键字 1.font H2{ font:12px/100% sans-serif; } 分割的分别是 字体大小 与 行高 ,其他关键是用空白符分割. 2.background di ...
随机推荐
- MySQL基于报错注入2
目标站点: 0x1 注入点判断 http://www.xxxxxx.com/pages/services.php?id=1 #true http://www.xxxxxx.com/pages/serv ...
- Redis之自问自答
Q:Redis客户端的批处理大量数据请求时,如何优化请求速率? A:管道技术:Redis是基于客户端-服务端模型的TCP请求/响应服务,且是阻塞式的,客户端需要等待服务端处理完数据后返回状态,才能继续 ...
- [PHP] vscode配置SFTP扩展同步文件
在我们的项目开发过程中,经常有一种模式,有一台linux的开发机作为我们的测试机器,上面安装了ftp服务.我们在windows系统的本地机器使用IDE编写代码,自动或者保存时同步上传到测试机下,这样就 ...
- Rust多线程中的消息传递机制
代码说话. use std::thread; use std::sync::mpsc; use std::time::Duration; fn main() { let (tx, rx) = mpsc ...
- luoguP3431 [POI2005]AUT-The Bus
安利系列博文 https://www.cnblogs.com/tyner/p/11565348.html https://www.cnblogs.com/tyner/p/11605073.html 做 ...
- github配置ssh及多ssh key问题处理
一.生成ssh公私钥 用ssh-keygen生成公私钥. $ssh-keygen -t rsa -C "你的邮箱" -f ~/.ssh/id_rsa_mult 在~/./ssh目录 ...
- django获取某一个字段的列表 values values_list flat=true
1.values() print(Question.objects.values('title')) #得到的是一个字典 <QuestionQuerySet [{'title': '查询优化之s ...
- Testng 简介
Testng是一套开源测试框架,是从Junit继承而来,testng意为test next generation,主要有以下特性: annotations 注释,如 @test @BeforeMet ...
- 对象锁和class锁
对象锁:就是这个锁属于这个类的对象实例,可以通过为类中的非静态方法加synchronized关键字 或者使用 synchronized(this) 代码块,为程序加对象锁. Class锁:就是这个锁属 ...
- oracle用户管理, 授权与回收权限
一. 用户管理参数, 0.删除用户: drop user 用户名 [cascade] 当我们删除用户时, 如改用户已创建过数据对象, 那么删除用户时必须加cascade参数, 用来同步删除 改用户的所 ...