前言

最近看到一篇文章,弗里得木的翻译笔记,里面有个问题没有解决,就是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. 在VS 2012或2013中使用WSE

    1,首先下载 WSE http://www.microsoft.com/en-us/download/confirmation.aspx?id=14089 2,安装的时候选上, 3,C:\Progra ...

  2. 为Arch Linux添加鼠标支持(gpm)

    gpm的安装 在Arch Linux中安装gpm $ pacman -S gpm 如果你正在使用触控板,需要安装一下插件 $ pacman -S gpm xf86-input-synaptics 需要 ...

  3. 【Leetcode】Divide Two Integers

    Divide two integers without using multiplication, division and mod operator. class Solution { public ...

  4. Python web前端 09 jQuery

    Python web前端 09 jQuery 一.三个重要网址 http://jquery.cuishifeng.cn/ #中文查询网站 http://www.bootcdn.cn/ #引入jq ht ...

  5. git 各个区的区别

    Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited) 把文件往Git版本库里添加的时候,是分两步执行的: 第一步是用 git add 把文 ...

  6. C++_IO与文件5-文件的输入与输出

    大多数计算机程序都使用了文件.文件本身是存储在某种设备上的一系列字节. 通常,操作系统管理文件,跟踪它们的位置.大小.创建时间等. 除非在操作系统级别上编程,否则通常不必担心这些事情. 真正需要的是将 ...

  7. 【算法笔记】B1048 数字加密

    1048 数字加密 (20 分) 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 ...

  8. 高精度的N进制转换模板(转K神)

    /* 高精度进制转换 把oldBase 进制的数转化为newBase 进制的数输出. 调用方法,输入str, oldBase newBase. change(); solve(); output(); ...

  9. npm install时 报错Maximum call stack size exceeded

    给npm降级或者升级 降级 : npm install -g npm@5.4.0 升级 : npm install -g npm  升级到最新版

  10. Dojo2 前端框架基本操作

    安裝CLI,需要先有npm: npm install -g @dojo/cli npm install -g @dojo/cli-create-app 创建项目目录,-n 后面是名字,创建完成后会自动 ...