css - inline-block 盒子下的内容文字错位问题
参考资料:
“display:block-inline形式的Span或Div中添加文字后,导致Span或Div排版掉落、错位”的原因及解决方法;
正文:
场景:两个 div 排在一行上,各有固定宽高,其中有一个 div 内部有文字和排版等其他填充;两个 div 杂七杂八的宽度加起来远小于 father 宽度。
拿到设计图之后,略想了一下,这不 so easy 么,既然有足够的宽度空间,那不就是随意发挥么:两 son 变 inline-block,那个有内容的 div 内或 padding ,或 flex,大致弄个上下等距不就 ok 了么,正好前面的人用 table-cell 来垂直居中,正好可以试试。然而事实证明太 naive 了,inline-block 中就藏了一个坑。
首先是思路中的效果:
.container {
width: 900px;
height: 300px;
background-color: #eee;
margin: 100px auto;
}
.inbox {
display: inline-block;
width: 400px;
height: 100px;
background-color: #7b7f88;
}
<div class="container">
<div class="inbox"></div>
<div class="inbox"></div>
</div>

很快啊,上面没什么问题(因为父元素的宽度足够,两个子元素之间的间隙可以忽略,当然这里也会出现隐藏坑,后叙)。于是很开心地去填充内容了,dom 结构变成:
<div class="container">
<div class="inbox"></div>
<div class="inbox">
<div>
<h2>55</h2>
</div>
</div>
</div>
愉快地 ctrl + s 之后 F5,然后就懵逼了,这不对啊,怎么成这样了,刚才不还好好的么,就加了句话???

于是经过翻山越岭地 Google baidu 之后,找到了参考中的资料:css 有个属性 vertical-align,它只在 display为 inline 或者 inline-block 的情况下起作用,默认值是 baseline。这意味着把元素设置成 inline(-block) 的时候,内部的文字会按照基线对齐,这也是为什么用尺子量,“55” 正好切了前一个 inbox 的 bottom。
那解决办法就简单了,每个 inbox 设置 vertical-aligh: top(如果父元素的高度是撑开的话,设置成middle、bottom、text-bottom、text-top 都可以),就可以回归思路,如下图:

其他:
在第一张图我们也看到, inline-block 的盒子之间是存在一点间隙的,这个问题和 HTML 的结构有关。正如上面我们贴的代码,两个 inbox 之间有一个换行,而浏览器在解释的时候遇到 inline(-block) 会把这个换行符解释成一个空白文本节点,这在视觉上就出现了间隙。解决办法有很多,贴两个常见的:
1. 代码写一行上,不过不利于维护;
2.父元素设置 font-size: 0,子元素重新设置字体大小;
各有优缺点,按需取用。
css - inline-block 盒子下的内容文字错位问题的更多相关文章
- 这些HTML、CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML、CSS、盒子模型、内容布局)
这些HTML.CSS知识点,面试和平时开发都需要 No1-No4 系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) ...
- web前端学习(三)css学习笔记部分(7)-- 文字和字体相关样式、盒子相关样式、背景与边框相关样式
12. 文字和字体相关样式 12.1 CSS3 给文字添加阴影 使用 text-shadow 属性给页面上的文字添加阴影效果,text-shadow 属性是在CSS2中定义的,在 CSS2.1 中 ...
- 纯css实现同一页面下选择之后更换内容效果
实现效果为如下:在同一页面下,当我选中输入手机号时,出现手机号输入框,当我选中输入验证码时,出现验证码输入框,当我选中设置密码时,出现密码框 在这里有一个小技巧,就是 1.对下面的输入框设置同样的样 ...
- CSS 概念 Block Inline Containing block
Block 元素 包括 "block-level box," "block container box," and "block box" ...
- 深度理解div+css布局嵌套盒子
1. 网页布局概述 网页布局的概念是把即将出现在网页中的所有元素进行定位,而CSS网页排版技术有别于传统的网页排版方法,它将页面首先在整体上使用<div>标记进行分块,然后对每个快进行CS ...
- CSS学习摘要-盒子模型
注:全文摘要自网络开发者网站,当然间隔也会整理一些思路和格式排版添加进去. CSS框模型(译者注:也被称为"盒模型")是网页布局的基础 --每个元素被表示为一个矩形的方框,框的内容 ...
- [19/06/06-星期四] CSS基础_盒子模型
一.盒子模型(框模型.盒模型) CSS处理网页时,它认为每个元素都在一个不可见的矩形盒子里. 为什么想象成盒子模型?因为把所有元素想象成盒子,那么我们对网页的布局就相当于摆放盒子.我们只需要把相应的盒 ...
- display:inline block inline-block 的区别
原文地址:http://blog.csdn.net/jly036/article/details/5506182 display:block就是将元素显示为块级元素. block元素的特点是: 总是在 ...
- Css之导航栏下拉菜单
Css: /*下拉菜单学习-2017.12.17 20:17 added by ldb*/ ul{ list-style-type:none; margin:; padding:; overflow: ...
随机推荐
- 26. docker compose 的安装 和 基本使用
1. 安装 docker compose https://docs.docker.com/compose/install/ 选择linux 即可 sudo curl -L "https:/ ...
- LeetCode——560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] 为两种不 ...
- IT培训行业变革大会,7月11日启程!
自上世纪八十年代PC时代起,IT行业走过了以2G移动网络和宽带网络.PC终端为主要载体,软件产品.应用软件和门户网站为特征产品的PC互联网时代. 以3/4G移动和高速宽带和移动终端为主要载体,移动支付 ...
- 01 语言基础+高级:1-4 接口与多态_day09【继承、super、this、抽象类】
day09[继承.super.this.抽象类] 三大特性——继承方法重写super关键字this关键字抽象类 教学目标能够解释类名作为参数和返回值类型能够写出类的继承格式能够说出继承的特点能够说出子 ...
- this关键字使用注意事项
1.当局部变量和成员变量重名时 ,java会启用就近原则,为了区分成员变量,最好再成员变量中加上this(this.成员变量),this的最主要的作用就是处理成员变量和局部变量重名的问题 例如,set ...
- C到C++转变简述
从 C 到 C++ 语言的转变 1.平时使用还以 printf, scanf 为主 printf 和 scanf 与 cin cout 相比效率更快 2.头文件改成如下,C++对C语言兼容 #incl ...
- 富文本编辑器Tinymce的示例和配置
Demo链接: https://download.csdn.net/download/silverbutter/10557703 有时候需要验证tinyMCE编辑器中的内容是否符合规范(不为空),就需 ...
- 获取文件MD5值(JS、JAVA)
文章HTML代码翻译于地址:https://www.cnblogs.com/linyihai/p/7040786.html 文件MD5有啥用? 文 ...
- OpenCV学习与应用
1.VS2019配置OpenCVhttps://blog.csdn.net/weixin_42274148/article/details/85321091 2.Python中使用PIL快速实现灰度图 ...
- PyTorch基础——迁移学习
一.介绍 内容 使机器能够"举一反三"的能力 知识点 使用 PyTorch 的数据集套件从本地加载数据的方法 迁移训练好的大型神经网络模型到自己模型中的方法 迁移学习与普通深度学习 ...