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 ...
随机推荐
- Oracle有哪些诊断事件
作者:eygle | [转载请注出处]链接:https://www.eygle.com/archives/2004/12/oracle_diagnostics_events_list.html 经常有 ...
- mysql使用命令
1.创建用户 create user 'name'@'host' identified by 'psssword'; 2.授权 grant select, updata,insert (all) on ...
- Shell命令-用户用户组管理之userdel、groupadd
文件及内容处理 - userdel.groupadd 1. userdel:删除用户 userdel命令的功能说明 userdel 命令用于删除用户帐号.userdel 可删除用户帐号与相关的文件.若 ...
- 02-Django项目创建
第一.Django项目创建 django-admin startproject 项目名 # 注意如果使用虚拟环境,创建应用必须先进入虚拟环境 进入项目目录,tree看项目结构(此时提示tree com ...
- Web-babyphp
题目地址 http://web.jarvisoj.com:32798/ 首先先观察网页,点击about发现下面包含这些 看到GIT,那么基本可以明确这题有.git泄露,我们用GitHack来获取源码分 ...
- java.net 基本测试
java.net 基本测试 包 java.net java.net.ssl 类 java.net.URL 测试类 package com.mozq.boot.kuayu01.demo; import ...
- 01_javaSE面试题:自增变量
开启刷面试题,都是根据视频进行刷面试题的 自增变量,只要记住两点 i++ 是先赋值后计算 ++i 是先计算后赋值 看下面的代码 int i = 1; i = i++; int j = i++; int ...
- ASP.NET开发实战——(十三)ASP.NET MVC 与数据库之EF实体类与数据库结构
大家都知道在关系型数据库中每张表的每个字段都会有自己的属性,如:数据类型.长度.是否为空.主外键.索引以及表与表之间的关系.但对于C#编写的类来说,它的属性只有一个数据类型和类与类之间的关系,但是在M ...
- ASP.NET开发实战——(八)ASP.NET MVC 与数据库之MySQL
之前介绍了My Blog如何使用ADO.NET来访问SQL Server获取数据.本章将介绍如何使用My SQL来完成数据管理. 在使用My SQL之前需确保开发环境中安装了My SQL数据库和Con ...
- 重构 改善既有代码的设计 (Martin Fowler 著)
第1章 重构, 第一个案例 1.1 起点 1.2 重构的第一步 1.3 分解并重组 statement() 1.4 运用多态取代与价格相关的条件逻辑 1.5 结语 第2章 重构原则 2.1 何谓重构 ...