CSS中关于linebox的baseline位置移动的理解
前言
最近看到一篇文章,弗里得木的翻译笔记,里面有个问题没有解决,就是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位置移动的理解的更多相关文章
- CSS中的before和:after伪元素深入理解
1.定义: “伪元素”,顾名思义.就是它创建了一个虚假的元素,并且将其虚假的元素插入到目标元素的内容之前或之后. 2:特点: a.它在实际文档中不改变什么,但是对用户可见,可以通过css控制,源码中看 ...
- CSS中vertical-align的默认值baseline的理解
写在前面的话 在学校业余学习了一个月的CSS,人生中第一篇博客就献给CSS了,欢迎大家指正文章中不正确的地方,在此感谢.在尝试开始写博客的时候查了好多资料,原本以为写自己熟悉的知识的博客很容易,没想到 ...
- CSS中盒子模型和position(一)
今天遇到几个css中的重要的知识点,记得这些都是以前看过的:margin.padding.border和position.可是用起来还是有很多的问题,以前自己看过去总是懒得记录,等到用起来了都不知道自 ...
- css中的baseline
这是css中的一个容易被人忽略的概念,今天在知乎上看到一个问题,这个问题应该是关于baseline,才去补习了一下关于baseline的知识,首先我来还原一下问题: <div style=&qu ...
- 关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置)
关于CSS中的定位使用子绝父相(子类绝对位置和父类相对位置) 欢迎转发,但是请填写原博客地址https://www.cnblogs.com/JNovice/p/9536910.html 前言:最近在 ...
- 如何在CSS中映射的鼠标位置,并实现通过鼠标移动控制页面元素效果
映射鼠标位置或实现拖拽效果,我们可以在 JavaScript 中做到这一点.但实际上,在CSS中有更加简洁的方法,我们可以在不使用JavaScript 的情况下,仍然可以实现相同的功能! 只使用CSS ...
- CSS中的IFC和BFC入门
CSS中的IFC和BFC入门 提到CSS,首先会想到的就是盒模型,如果对于盒模型不是很理解的,看这里.这是一个基础的系列,看了盒模型还可以看看box-sizing,好了不多说了,下面介绍今天的重点 ...
- CSS中各种布局的背后(*FC)
CSS中各种布局的背后,实质上是各种*FC的组合.CSS2.1中只有BFC和IFC,CSS3 中还增加了FFC和GFC. 盒模型(BoxModel) 上图为W3C标准盒模型,另外还有一种IE盒模型(I ...
- 浅析CSS中的BFC和IFC
1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...
随机推荐
- 在Windows上搭建Git Server (2)
第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” ...
- Sql server if-else以及switch
--相当于C#中的if-else 根据levle列的值来判断自定义列显示的内容--要求then后面的数据类型必须一致 select * ,头衔=case when [levle]=1 then '菜鸟 ...
- Gym - 101908C 树状数组 逆序对
Grandpa Giuseppe won a professional pizza cutter, the kind of type reel and, to celebrate, baked a r ...
- CentOS安装pip并修改源为豆瓣源
使用yum进行安装 yum install python-pip 若出现 No package python-pip available. 则解决方法如下: yum -y install epel-r ...
- web图标icon tomcat图标icon
有时候我们需要更改项目图标为自己的,毕竟tomcat的小猫图标用着不得劲. 你看打开百度等网站时,在地址栏前面就会出现一个蓝色的熊掌状图标或者其他的样式的图标,如果在桌面新建此链接的快捷方式,则桌面图 ...
- springMVC下载功能
前台页面 <a href="download">下载</a> 后台代码 /** * 文件下载 * @param request * @return * @t ...
- RNA-Seq基因组比对工具HISAT2
原文网址: http://blog.biochen.com/archives/337 HISAT2是TopHat2/Bowti2的继任者,使用改进的BWT算法,实现了更快的速度和更少的资源占用,作者推 ...
- Windows 搭建ASP.NET Boilerplate项目开发环境
1.本机安装对应版本的.net core 2.安装vs2017或以上版本 3.从ABP官网下载模板,我下载的是前后端分离的Angular模板 4.用vs2017分别打开前后端,还原Nuget包 5.前 ...
- SQL数据库“单个用户”不能访问,设置为多个用户的解决方法
USE master; GO DECLARE @SQL VARCHAR(MAX); SET @SQL='' SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) FROM ma ...
- windows_study_1
描述:win8/windows server 设置用户登陆密码永不过期 解决: 第一步:打开控制面板,点击系统和安全第二部:管理工具第三步:本地安全组策略第四步:看图 第五步:把密码过期天数,改成0 ...
