今日励志语

往日不可追,来日犹可期,祝大家2019年继往开来

迷之间隙

我们创建一个导航列表,并将其列表 item 设置为 inline-block,主要代码如下:

<div class="nav"><div class="nav-item"><a>我</a></div><div class="nav-item"><a>我</a></div><div class="nav-item"><a>我</a></div>
</div>
.nav {background: #999;
}
.nav-item{display:inline-block; /* 设置为inline-block */width: 100px;background: #ddd;
}

效果图如下:

我们从效果图中可以看到列表 item 之间有一点小空隙,但是我们在代码中并没有设置 margin 水平间距。那么这个空隙是如何产生的呢?

这是因为我们编写代码时输入空格、换行都会产生空白符。而浏览器是不会忽略空白符的,且对于多个连续的空白符浏览器会自动将其合并成一个,故产生了所谓的间隙。

对于上面实例,我们在列表 item 元素之间输入了回车换行以方便阅读,而这间隙正是这个回车换行产生的空白符。

同样对于所有的行内元素(inline,inline-block),换行都会产生空白符的间隙。

如何消除空白符

从上面我们了解到空白符,是浏览器正常的表现行为。但是对于某些场景来说,并不美观,而且间隙大小非可控,所以我们往往需要去掉这个空白间隙。一般来说我们有两种方法来去掉这个换行引起间隙:代码不换行和设置 font-size。

代码不换行

我们了解到,由于换行空格导致产生换行符,因此我们可以将上述例子中的列表 item 写成一行,这样空白符便消失,间隙就不复存在了。其代码如下:

<div class="nav"><div class="nav-item">导航</div><div class="nav-item">导航</div><div class="nav-item">导航</div>
</div>

但考虑到代码可读及维护性,我们一般不建议连成一行的写法。

设置 font-size

首先要理解空白符归根结底是个字符,因此,我们可以通过设置 font-size 属性来控制产生的间隙的大小。我们知道如果将 font-size 设置为 0,文字字符是没法显示的,那么同样这个空白字也没了,间隙也就没了。

于是顺着这个思路就有了另一个解决方案:通过设置父元素的 font-size 为 0 来去掉这个间隙,然后重置子元素的 font-size,让其恢复子元素文字字符。

所以该方法代码如下:

.nav {background: #999;font-size: 0; /* 空白字符大小为0 */
}
.nav-item{display:inline-block;width: 100px;font-size: 16px; /* 重置 font-size 为16px*/background: #ddd;
}

使用该方法时需要特别注意其子元素一定要重置 font-size,不然很容易掉进坑里(文字显示不出来)。

对齐问题

由于 inline-block 属于行内级元素,所以 vertical-align 属性同样对其适用。

在正式讲解 vertical-align 之前,我们需要先说一些基本概念。

中线、基线、顶线、底线

中线(middle)、基线(baseline)、顶线(text-top、底线(text-bottom))是文本的几个基本线,其对应位置如下图:

  • 基线(base line):小写英文字母x的下端沿。
  • 中线(middle line):小写英文字母x的中间。
  • 顶线(text-top):父元素 font-size 大小所组成的一个内容区域的顶部
  • 底线(text-bottom):父元素 font-size 大小所组成的一个内容区域的底部
  • vertical-align 的值

vertical-align 只接受8个关键字、一个百分数值或者一个长度值。下面我们将看看各关键字如何作用于行内元素。

  1. baseline 默认元素的基线与父元素的基线对齐。
  2. sub 将元素的基线与其父元素的下标基线对齐。
  3. super 将元素的基线与其父代的上标 - 基线对齐。
  4. text-top 将元素的顶部与父元素的字体顶部对齐。
  5. text-bottom 将元素的底部与父元素的字体的底部对齐。
  6. middle 将元素的中间与基线对齐加上父元素的x-height的一半。
  7. top 将元素的顶部和其后代与整行的顶部对齐。
  8. bottom 将元素的底部和其后代与整行的底部对齐。
  9. <length> 将元素的基线对准给定长度高于其父元素的基线。
  10. <percentage> 像<长度>值,百分比是line-height属性的百分比。


打开微信扫一扫关注早读君,每天早晨为你推送前端知识,度过挤地铁坐公交的时光

「前端早读君008」新手必踩坑之display: inline-block相关推荐

  1. 「前端早读君007」css进阶之彻底理解视觉格式化模型

    今日励志 不论你在什么时候开始,重要的是开始之后不要停止. 前言 对于部分前端工程师来讲,有时候CSS令他们很头疼,明明设置了某个样式,但是布局就是不起作用. 如果你也有这种问题,那么是时候学习下什么 ...

  2. 阿里云新手必踩坑系列 - 安全组

    文章开始之前,先简单插播一段阿里广告,适合购买阿里云产品的新用户(新购或升级),欢迎大家领取,以支持博客长久发展: [阿里云幸运券领取地址]: http://wzfw.ltd/qjyl      (阿 ...

  3. 总结!一个产品新手的踩坑记

    本文讲的是总结!一个产品新手的踩坑记, 加入产品大家庭正好三个月了,在大佬们面前不敢造次,于是,觉得可以拿出来分享的,便是在这段春夏交替之光里,亲脚踩的一些坑,以及在坑里获得的一些小发现.所幸的是,在 ...

  4. YOLOV7分割新手WIN10踩坑过程

    一.前言 踩了三天的坑,终于成功配置好YOLOV7的分割部分了,泪目.网上的教程太少了,一开始卡在detetron2的安装问题上,然后卡在数据集的制作上,最后靠查github的Issues然后去找数据 ...

  5. 公众号 -「前端攻略 开光篇」

    作为一枚程序员,每件重要项目的开始都忍不住使用"Hello World". 这个公众号是不是来晚了?如果你有这个疑问,那么我想说:对于写作和思考,任何时候都不晚.我用四个简单的自问 ...

  6. Windows 10环境下「MSCOCO Captions」评估代码踩坑记录

    文章目录 引言 解决python2→python3.x问题 验证评估代码是否可以正确运行 解决 jar 包运行出错的原因 排查jar包运行出错的原因 解决Could not reserve enoug ...

  7. Python 3 报错 TypeError: object() takes no parameters【新手必过坑之一】

    在学习 Python 3 类的时候,有如下程序: class Dog():def __init__(self,name,age):#初始化属性name和ageself.name = nameself. ...

  8. 用Gitee Pages服务在线预览vue3前端项目:静态网站+多级路由+history模式(踩坑)

    目录 目标与前提 vue打包.预览遇到的坑以及原因 坑①:静态网站打开一片空白 坑②:子路由刷新或直接输入时,网页一片空白或404 坑③:首页加载时间过长 坑④:线上预览地址出错时,不显示404页面 ...

  9. 新手PADS踩坑之旅-layout asc文件导入导出错误

    第一种情况: 在保存别人的原理图和layout的封装库之后,从原理图导出asc文件会碰到找不到什么什么文件 这个时候首先在文件->库里面查找有没有保存这个库,如果导出都错了,八成是找不到的,想办 ...

  10. 新手亲自踩坑!Jmter使用CSV Data Set Config配置原件测试登录接口,察看结果树无响应问题

    使用网上找的一个登录接口案例来练手,有需要的可以进下方链接(我用的版本是jmter3.1和5.3) http://doc.nnzhp.cn/index.php?s=/6&page_id=12 ...

最新文章

  1. SpringBoot-服务端参数验证-JSR-303验证框架
  2. F1 score的意义
  3. azkaban安装编译3.86 教程
  4. 获取IP地址和MAC地址
  5. java求阶乘的程序_按要求编写Java程序(阶乘)
  6. 常用的 WEB 服务器
  7. 68 cookie在登录中的作用
  8. dev_t的主次编号
  9. 网络产品用户体验优化系列[一]概要
  10. 小白也会用的SQL优化工具推荐
  11. 5分钟三句代码实现抖音自动下载
  12. Python学习笔记—— 面向对象3. 继承和多态
  13. app邀请分享免填邀请码解决方案-邀请机制的要点、形式
  14. Word字体间距变大
  15. 【03】手把手教你构建垃圾分类系统-基于tensorflow2.3
  16. cd在linux命令意思,linux的cd .. 和cd / 命令分别是什么意思?
  17. linux访问网络图片,linux网络图形监控方法
  18. RSTP快速生成树简介、RSTP与STP的区别、RSTP BPDU字段信息、RSTP角色与端口状态介绍、RSTP工作过程之P/A机制详细分解)
  19. 044-JAVA输入/输出流-File类的应用
  20. response.sendError() 和 response.setStatus()的区别

热门文章

  1. iOS 指令集架构Architectures armv6、armv7、armv7s、arm64、arm64e、x86_64、i386
  2. Mac Book Pro Catalina不能打开软件,提示检查为恶意软件
  3. 【3月22日】2022年百度机器学习春实习笔试题解
  4. 人工智能十种“新”数学
  5. 8月7日晚八点分享-推荐系统面试/概览
  6. 多小区下小区上行速率的计算(5)
  7. oracle rac心跳机制_详解RAC集群中cache fushion原理
  8. 保密检查usb痕迹清除_MD型卧式多级泵泵轴抱死故障原因分析和检查维修处理
  9. 现代通信原理14.2:M进制数字调制信号波形的向量表示
  10. IDEA连接服务器执行python程序