前言

最近看到一篇文章,弗里得木的翻译笔记,里面有个问题没有解决,就是linebox的baseline为什么会移动呢?

在讨论这个问题之前读者需要对 默认值baseline 以及 其他属性值(天镶的博客)有一定了解。

下面详细描述这个baseline移动的问题,先上代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
div {
margin: 100px auto;
width: 500px;
background: #bbbbbb;
font-size: 30px; } span.child {
display: inline-block;
border: 10px solid #0000cc; } span.big {
display: inline-block;
width: 100px;
height: 200px;
background: #FF6600;
vertical-align: bottom;
}
/*
问题
child元素和文本框text的vertical-align的默认值为baseline,
将big元素的vertical-align分别设置为top、bottom、middle,
为什么child和text会随之移动?,而改变了veritical-align值的big元素却几乎没有移动
因为child和text的默认值为baseline,所以会移动是不是代表着linebox的baseline也移动了呢?
*/
</style>
</head>
<body>
<div>
<span class="child">child</span>
text
<span class="big"></span>
</div>
</body>
</html>

问题:

child和text的vertical-align的默认值为baseline,将big元素的vertical-align分别设置为top、bottom、middle,

为什么child和text会随之移动?而改变了veritical-align值的big元素却几乎没有移动。

因为child和text的默认值为baseline,所以会移动是不是代表着linebox的baseline也移动了呢?

我的想法:

其实baseline没有发生移动,只是CSS默认overflow不能向上溢出,所以只能强制把baseline的位置相对向下移动了。

上面这句话是本文的重点,理解了这句话后面就不用看了,后面将详细解释这句话。

正文

一、big元素的veritical-align设置为bottom

①首先,我们先把big元素给注释掉,只剩下child和text


②接下来我们把big元素vertical-align:bottom重新加上去,假设overflow可以向上溢出,那会出现这样的情况,以下属于个人yy


③可是没办法,overflow不能向上溢出,只能向下或向右溢出,现在就只能把这个盒子向下移动,并且保持父元素的margin-top为100px,于是乎,出现了这样的情况。


二、big元素的vertical-align设置为top

①首先,我们先把big元素给注释掉,只剩下child和text


②然后我们把big元素给加回来,因为vertical-align:top不会向上溢出,所以变成下面这样的情况


③到此就结束了,是不是还没明白我们在搞什么鬼,哈哈,那看看下面的总结。

总结

上面我们解释了为什么把big元素的vertical-align从bottom变为top后,big元素本身位置没有移动,

而child和text两个默认vertical-align为baseline却随之移动。

其实linebox的baseline并没有发生移动,只是overflow不能向上溢出,所以强制父元素盒子相对向下移动了。其他vertical-align设置为middle、text-top、text-bottom也是类似,这里就不再赘述了。

以上纯属个人的猜想,欢迎大家指正文章中不正确的地方,谢谢阅读。

CSS中关于linebox的baseline位置移动的理解的更多相关文章

  1. CSS中的before和:after伪元素深入理解

    1.定义: “伪元素”,顾名思义.就是它创建了一个虚假的元素,并且将其虚假的元素插入到目标元素的内容之前或之后. 2:特点: a.它在实际文档中不改变什么,但是对用户可见,可以通过css控制,源码中看 ...

  2. CSS中vertical-align的默认值baseline的理解

    写在前面的话 在学校业余学习了一个月的CSS,人生中第一篇博客就献给CSS了,欢迎大家指正文章中不正确的地方,在此感谢.在尝试开始写博客的时候查了好多资料,原本以为写自己熟悉的知识的博客很容易,没想到 ...

  3. CSS中盒子模型和position(一)

    今天遇到几个css中的重要的知识点,记得这些都是以前看过的:margin.padding.border和position.可是用起来还是有很多的问题,以前自己看过去总是懒得记录,等到用起来了都不知道自 ...

  4. css中的baseline

    这是css中的一个容易被人忽略的概念,今天在知乎上看到一个问题,这个问题应该是关于baseline,才去补习了一下关于baseline的知识,首先我来还原一下问题: <div style=&qu ...

  5. 关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置)

    关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置) 欢迎转发,但是请填写原博客地址https://www.cnblogs.com/JNovice/p/9536910.html  前言:最近在 ...

  6. 如何在CSS中映射的鼠标位置,并实现通过鼠标移动控制页面元素效果

    映射鼠标位置或实现拖拽效果,我们可以在 JavaScript 中做到这一点.但实际上,在CSS中有更加简洁的方法,我们可以在不使用JavaScript 的情况下,仍然可以实现相同的功能! 只使用CSS ...

  7. CSS中的IFC和BFC入门

    CSS中的IFC和BFC入门   提到CSS,首先会想到的就是盒模型,如果对于盒模型不是很理解的,看这里.这是一个基础的系列,看了盒模型还可以看看box-sizing,好了不多说了,下面介绍今天的重点 ...

  8. CSS中各种布局的背后(*FC)

    CSS中各种布局的背后,实质上是各种*FC的组合.CSS2.1中只有BFC和IFC,CSS3 中还增加了FFC和GFC. 盒模型(BoxModel) 上图为W3C标准盒模型,另外还有一种IE盒模型(I ...

  9. 浅析CSS中的BFC和IFC

    1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...

随机推荐

  1. C#实现,一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第35位数是多少, 用递归算法实现

    方法函数可以通过调用自身来进行递归.计算理论可以证明递归的作用可以完全取代循环. static void Main(string[] args) { Console.WriteLine(Ra()); ...

  2. php 对象方式传入参数

    类是单例模式,对象方式传入参数,如果参数过多是,使用形参容易混乱 class Object { /** * 基本配置信息 * @var array */ private $config = array ...

  3. vcftools安装与使用

    官网地址:https://vcftools.github.io/examples.html vcftools的软件下载:https://vcftools.github.io/examples.html ...

  4. 1080 MOOC期终成绩 (25 分)

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  5. Unix或Linux中&、jobs、fg、bg等命令的使用方法

    [From] http://blog.sina.com.cn/nenutechnology fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令 ...

  6. Oracle KEEP的用法

    [摘录自] http://blog.itpub.net/12932950/viewspace-687036/ http://flyfx.iteye.com/blog/1994993 聚合函数MIN, ...

  7. VS2015打开特定项目就崩溃

    今天在打开之前写的项目的时候,一开vs就崩溃关闭了,打开其他项目的.sln和.vsproj就可以,唯独有1个项目打不开,也不知道为啥,气死了. 去网上找到的解决办法: 步骤1:开始–>所有程序– ...

  8. Vue.js插槽slot和作用域插槽slot-scope学习小结

    一般来说,在Vue项目中使用父子组建时,都是把通用的HTML结构提取出来写成一个子组件,需要动态展示的数据用过prop属性传递,不过有时候我们可能想给子组件传递一个HTML代码,这个时候用prop不太 ...

  9. http statusCode(状态码) 200、300、400、500序列详解

    201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问.200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.201(已创建) 请求成功且服务器已创建了新的资源 ...

  10. Java 继承初探

    Java继承的基础 Java中,被继承的类叫做超类,继承超类的类叫子类.(一个子类亦可以是另一个类的超类) 继承一个类,只需要用关键字 extends 把一个类的定义合并到另一个类中就可以了. 例子中 ...