css 高度塌陷_web前端入门到实战:CSS 负边距的行为表现

96920bc474d198bf5759b392c4fa989b.png

CSS 中的负边距

margin 是可以设置为负值的,这会帮你实现靠近顶部/左边相邻元素的效果,或者实现靠近底部/右边相邻元素的效果。

先介绍下我们的测试元素:一个简单的包含三个段落的容器元素。注意,段落设置了固定宽度 250px

<div class="test-container"> <p>First paragraph with a bit of text in it to provide some content.</p> <p>Second paragraph with a bit of text in it to provide some content.</p> <p>Third paragraph with a bit of text in it to provide some content.</p></div><style>
* { box-sizing: border-box; }
.container {border: 5px double;width: 300px;padding: 0 10px;
}.container p {border: 1px solid;width: 250px;
}
</style>

效果:

9b7c88445053b52358a355630e6369f0.png

负边距 margin-top/bottom

先给第一段文本 margin-bottom: -15px,结果第二段文本的经浏览器重新计算,向上提升了 15px

7332e7df067fa14e3d54180f61b5fb62.png

第二段文本作为邻居紧跟在第一段文本后面,第二段文本和第三段文本之间的间距没有变化,整体依旧是垂直布局。

这个技巧比较适合用来微调位置,如果一个元素想要轻微的盖住前面一个元素的话,可以使用它。

现在恢复布局,给第二段文本 margin-top: -15px 看看效果。

c437e18510a62ea548d37a1fefc2de56.png

可以看见,跟在第一段文本使用 margin-bottom: -15px 的效果一样。第二段文本在此被向上提升了 15px。通过在浏览器控制台查看,第一段文本的 margin-bottom 仍是默认的 1rem

边距合并(Margin collapsing)

边距塌陷行为在负边距上的行为是不同的。

针对负边距场景:如果相邻两元素中一个是正边距,一个负边距,则 相邻间距(adjoining margin)= 正边距 - 负边距绝对值(结果两元素相交和相离,取决于谁的绝对值更大);如果相邻两元素中没有正边距,则 相邻边距 = 0 - 边距 1 绝对值 - 边距 2 绝对值(结果两元素相交)。

对正边距来说,规则是这样的:浏览器会比较第一段文本的 margin-bottom 和第二段文本的 margin-top,谁的值大,最终间距就是谁,以 margin-bottom: 16pxmargin-top: 4px 为例,那么最终的间距为 16px;而对存在负边距的场景就不是这样了,像上面一个是 margin-bottom: 1em(假设是 16px),一个是 margin-bottom: -15px,那么按照规则,最终的间距是 16px - 15px,得 1px,因为是正值,所以表示两者相离 1px 的距离。

可以看见,我们可以使用负边距达到两元素相互靠近的布局,而不会受到边距合并的影响。

到这里,算是介绍完负边距 margin-top/bottom 的情况了。

负边距 margin-left/right

负边距 margin-left/right 的工作方式与 margin-top/left 一样,元素还是有一个固定宽度。下面分别给第一和第二个文本段落设置 margin-left: -10pxmargin-right: -10px

72e57888a78188022e706b73ff761a2d.png

可以看见,第一个段落向左偏移了 10px,宽度没有变化,同时右边缘也向左移动了 10px

第二个段落的负 margin-right 值没有起作用。因为 margin-right 负值影响的是第二个段落右面的元素,当前第二个段落右边是没有元素的,因此看不到效果。

为了展示 margin-right 负值效果,需要将段落元素设置成浮动的,这样就有右边的相邻元素了。

df3a9f2a60bcb4917885ad1b01332c21.png

现在在段落上设置负边距。

8b10ac4d870261eb58b50405e8dc2268.png

可以看见,因为第一个段落设置了 margin-right: -10px,导致第二个段落向左偏移 10px。这跟之前看到的 margin-bottom 负值的效果是一样的。

同时,第二个段落设置了 margin-top: -10px,于是向上偏移了 10px。第三个元素设置了 margin-bottom: -10px,但没有效果,是因为底部没有元素。

注:margin-bottom: -10px 产生了影响,效果没有出来不只是因为底部没有元素——我们将第一个元素删除,就能看到父元素高度塌陷了,塌陷的高度正好等于第三个段落元素的负边距绝对值,即 10px(如下图)。而之前没有塌陷的原因是因为第一个元素的高度撑开了父元素,导致父元素高度无法塌陷。

7d1a871f00c5d9ec1217ff5c3cd41c16.png
<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 14px;">GIF.gif</figcaption>

需要注意的是,边距合并只适用于 margin-topmargin-bottom 属性,不对 margin-leftmargin-right 起作用,所以不用担心这里的左右边距的合并问题。

如果,我们只是给第二个段落设置 margin-left: -10px,能看到同样的效果。

b7f029296d40470948c10c5a4133d247.png

可以看见,在元素固宽情况下,margin-leftmargin-right 负值的行为表现跟 margin-topmargin-bottom 负值的行为表现是一样的。

width: automargin-right 负值

现在不为段落设置固定宽度,而是让它们使用默认的 width: auto 设置观察 margin-right 的负值行为表现。默认情况下,width: auto 段落元素默认会充满在父元素宽度,同时受限于父元素的 padding

现在分别给第一和第二个段落设置 margin-left: -10pxmargin-right: -10px,第三个元素同时设置 margin-left: -10pxmargin-right: -10px 查看效果。注意,为了方便对照,这里加入了一个参考元素(Reference paragraph):

91932006211cd97e0b799e3a38d62418.png

观察发现:第一个段落向左偏移了 10px,宽度增加了,右边缘未受到影响,位置未变;第二个段落向右偏移了 10px,宽度增加了,左边缘未受到影响,位置未变。这种情况,只在 width: auto 下发生,这与固定宽度的元素表现是不一样的。

第三个段落的左右两端都使用负边距值,导致左右都向外延伸了 10px 的距离,正好抵消了容器元素左右 10pxpadding。这是负边距最常用的应用场景——为了让内容与容器间保持一定的留白间隙,容器设置了 padding,但是内容里的一个标题需要延伸到整个容器的宽度展示(不畏外部 padding 值),这就到使用负边距的时候了。

eb5d1f8dc48408dffa6c98dcce16529c.png

这里贴出了上面结构的样式(容器元素设置了 padding: 10px)。

h5 { margin-left: -10px; margin-right: -10px; padding-left: 10px; margin-top: 0; margin-bottom: 0; background-color: grey; color: white; /* no width, so defaults to width: auto */ }复制代码

再一次要说明的是,这只在标题元素 width: auto 的情况下才能生效,不过这已经覆盖 99% 的实际使用场景了。

以上即是对负边距在简单场景下行为表现的阐述,以此为基础,我们就可以进一步研究负边距在弹性布局和网格布局中的行为表现了。

从最零基础开始的的HTML+CSS+JavaScript。jQuery,Ajax,node,angular框架等到移动端HTML5的项目实战【视频+工具+系统路线图】都有整理,在线解析,学习指导,点:【WEB前端学习圈⑤】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为手机怎么强制关机_华为手机电源键这么神?你只拿来锁屏关机,白浪费这么强的黑科技...

阅读本文前&#xff0c;请您先点击上面的蓝色字体“生活妙招噻”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到内容了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。手机电源键你用来干嘛&#xff1f;你肯定觉得它除了锁屏关机&#xff0c;就没其…

firefox使用掘金插件_Mozilla发布新的附加组件来修复旧版Firefox中的扩展禁用问题...

大约一个半星期前的5月4日&#xff0c;用于签署Firefox附加组件的证书过期&#xff0c;随后全球Firefox用户的已有附加组件和新添加附加组件完全停止工作。虽然在Mozilla在下一个周一早上发布修补程序版本&#xff0c;但由于问题解决不彻底&#xff0c;几天之后又发布了另一个&…

可以获得索引值码_SEO优化细节,怎样优化才能让网站获得更好的排名?

任何的网站&#xff0c;都是从“零开始”。无论是网站建设也好&#xff0c;还是网站优化也好&#xff0c;都是需要一步步的巩固基础才能有好的成效。对于网站优化来讲&#xff0c;更需要注重前期细节处理&#xff0c;这样后期的运营才能更好发展。SEO优化细节&#xff0c;怎样优…

file获取文件后缀_Python 工匠:高效操作文件的三个建议

前言在这个世界上&#xff0c;人们每天都在用 Python 完成着不同的工作。而文件操作&#xff0c;则是大家最常需要解决的任务之一。使用 Python&#xff0c;你可以轻松为他人生成精美的报表&#xff0c;也可以用短短几行代码快速解析、整理上万份数据文件。当我们编写与文件相关…

lte核心网由哪些设备组成_电气设备安装工程由哪些部分组成?

电气设备安装工程的组成通用电气设备安装项目是一个工程系统&#xff0c;通过接收电能&#xff0c;转换和分配电能&#xff0c;使用电能或从接收电能到分配给电气设备组成。根据其主要功能&#xff0c;它们分为电气照明系统&#xff0c;电源系统和配电系统。这种主要基于电能的…

guid主分区表损坏怎么办_抹盘提示进程失败,导致Win 10无法正常开机怎么办?...

点击上方「蓝字」关注我哦一般来说&#xff0c;ESP分区不足200MB会导致抹盘进程失败&#xff0c;并且损坏Win 10引导&#xff0c;需要进入PE模式将其修复。本教程所使用的PE为WePE。0、条件电脑进入PE系统。1、开始找到桌面上的“Dism”打开运行。打开程序后可能会提示临时目录…

bundle 安装_超级小白使用pip安装第三方库的正确姿势

为了感谢大家对“Python客栈”的关注与支持&#xff0c;即日起&#xff0c;我们每天会在留言中随机抽取三位粉丝发放6.6元小红包。快来参与吧&#xff01;11.pip是什么pip是python的包管理工具&#xff0c;python2.7/python3.4以上的版本都已经集成了该工具&#xff0c;我们可以…

arcgis js 地图打印_Arcgis在国土空间规划编制中的应用

规划行业经过多年的转变&#xff0c;从原来的城市规划到现在的国土空间规划&#xff0c;理论和技术应用都随之更新。新的国土空间规划在编制成果上&#xff0c;注重建立全国同一的国土空间基础信息平台。目前&#xff0c;单就国土空间规划的编制而言&#xff0c;已从传统规划的…

.network 中文文档_以太坊链下支付网络Raiden API中文文档

雷电网络(Raiden Network)是以太坊区块链的链下扩容方案&#xff0c;Raiden节点的Restful API官方文档中文版由汇智网提供&#xff0c;访问地址&#xff1a;http://cw.hubwiz.com/card/c/raiden-api/Raiden API访问端结点URL中通常包含有版本信息&#xff0c;以便支持对不同版本…

python write 写多行_如何用 Python 执行单行命令

一般来说&#xff0c;面对日常处理的一些小任务&#xff0c;直接用 sed,grep 之类的就可以搞定&#xff0c;更复杂一点的就会考虑 awk 或者用一些现成的轮子&#xff0c;要是 awk 搞不定我就只好用 Python 了。但有些时候&#xff0c;我仅仅只是想写一个一次性脚本&#xff0c;…

小红书点赞收藏有什么用_橱柜门用什么材料好?老师傅开口说话了!听进去算你的,收藏备用...

想做好一个橱柜&#xff0c;橱柜门的材质要选好&#xff0c;而一旦涉及到材质&#xff0c;那些专业生僻的叫法让人眼花缭乱&#xff0c;云里雾里的&#xff0c;难以理解。其实橱柜门的材质大概分为6大类&#xff0c;市面上主流的材质大致有3类。今天FUN姐就跟大家聊聊橱柜门到底…

ddr4服务器内存和普通内存_服务器内存介绍及其供电规范

内存(Memory)也称内存储器或主存储器&#xff0c;与CPU进行高速的数据沟通&#xff0c;用于暂时存放CPU的运算数据。见上图&#xff0c;内存紧挨CPU两侧布局&#xff0c;内存数量和容量根据系统需求和CPU能力决定&#xff0c;内存性能对服务器整体运行快慢起着至关重要的影响。…

小程序新闻列表页面布局代码_论坛小程序·“我的”页面布局

这次让我们来看看界面是怎么布局的吧&#xff01;比如打开模拟器里“我的”页面&#xff0c;找到其所对应的me文件夹里的文件打开me.wxml查看第一段代码&#xff0c;发现其中包含五个view类&#xff0c;他们的属性标签分别是&#xff1a;classamountBg、classimg、classaccount…

准考证打印系统关闭怎么办_2019年执业药师准考证无法正常打印,怎么办?

2019年各地区执业药师准考证打印入口陆续开通&#xff0c;但是很多考生会遇到准考证打印的问题&#xff0c;现小编整理了2019年执业药师准考证无法正常打印情况&#xff0c;供各位考生参考。一、打印准考证必须使用IE浏览器6.0或以上版本。二、禁用或卸载有关拦截工具。(Window…

安卓机更新系统会卡吗_安卓机可以用AirPods Pro吗?告诉你真实体验

[PConline评测]安卓系统可以使用AirPods Pro吗&#xff1f;从AirPods Pro发布起&#xff0c;这问题一直备受关注&#xff0c;毕竟苹果官方宣称AirPods Pro兼容多种苹果设备&#xff0c;可没说兼容安卓机。我们知道其他AirPods产品是可以用在安卓机上的&#xff0c;那么AirPods …

# 解析bt文件_BT、磁力链这些词语是什么意思?

“知其然知其所以然”。我们经常在下载资料的时候能看到BT、磁力链等词语&#xff0c;这些词语到底是什么意思呢&#xff1f;下载都会用&#xff0c;但是你了解吗&#xff1f;BT下载传统的下载模式是每个客户端从服务器拷贝文件&#xff0c;跟校园内常用的FTP一样。因为服务器宽…

怎么修改ppt的虚线间隔_还有一小时下班,领导交给我一份ppt,做不完不许走!...

相信在职场中的好多人&#xff0c;都会遇到领导突然给任务的时候&#xff0c;遇到这种情况该怎么办呢&#xff1f;还能怎么办&#xff1f;听话&#xff01;干活&#xff01;就是这份ppt&#xff0c;就是它&#xff0c;决定了我的下班时间&#xff01;ppt水平差&#xff0c;时间…

kitti pkl可视化_KITTI 3D Lidar 数据可视化

前言Lilikili&#xff1a;在尝试做Lidar方面的研究的时候&#xff0c;发现对于可视化大家的脑洞还不是很够&#xff0c;所以提供一些思路让大家蛤一下。数据集本次使用的数据集是KITTI 3D object detection条目下面的data_object_velodyne.zip&#xff0c;里面存储了二进制存储…

php mysql 排名_mysql中如何实现排名

mysql中实现排名的方法&#xff1a;使用demo函数&#xff0c;语法为【SELECT banji,avg(score) as AvgS FROM table_test GROUP BY banji ORDER BY AvgS DESC】。mysql中实现排名的方法&#xff1a;可用Demo实现注意里面的A&#xff0c;属于嵌套查询&#xff0c;所以排名会正确…

figtree如何编辑进化树_iTOL快速绘制颜值最高的进化树

iTOL简介大家在看高分文章时&#xff0c;总会惊叹于&#xff0c;为什么人家能做出那么好看而且高大上的系统发育树&#xff0c;而且好看的图也能直接提升文章的档次&#xff0c;冲击高分文章。人家的树不管是从配色还是各种注释信息都让人无可挑剔&#xff0c;而你每次花了半个…