关于盒子模型中margin叠加现象的归类与思考

2024-02-23 03:32

本文主要是介绍关于盒子模型中margin叠加现象的归类与思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题由来

在对嵌套元素的子元素进行垂直方向上的居中操作时,采用margin-top会出现父元素和子元素一同下移的现象无法达到想要的效果。

<!--html代码块-->
<div id="father"><div id="son"></div>
</div>
 /*部分css代码块*/#son {background-color: #5A688F;width:50px;height: 50px;margin-left: 25px;/*子元素水平居中*/margin-top: 25px;/*试图将子元素垂直居中*/}

第一幅图是未设置margin-top: 25px;时的效果图:
这里写图片描述
第二幅图是设置了 margin-top: 25px;之后的效果图
这里写图片描述
分析:从第二张图片中可以看出来父元素和子元素一起发生了下移现象,没有达到子元素垂直居中的效果。整个现象的造成涉及到外边框叠加的现象。接下来进行分析

外边距叠加定义:
外边距叠加指的是在普通文档流中的块级元素的垂直外边距出现叠加现象。而要特别注意的是:行内框,浮动框,或者绝对定位框的外边距是不会叠加的。

场景一:

相邻块级元素垂直外边距叠加
这里写图片描述

 /*部分css代码块*/
#d1 {background-color: #5A688F;width: 100px;height: 100px;border: 1px solid red;margin-bottom: 20px;}
#d2 {background-color: yellow;width: 100px;height: 100px;border: 1px solid red;margin-top: 20px;}

如图,当两个块级元素垂直摆放时时,他们的外边距不是40px而是叠加后的20px。(如果一大一下,叠加后的边距为大的那一个);
**原理分析:**实际上外边距叠加的意义非常的大,margin的存在意义是将两个相邻的元素分隔开来。如果不出现外边距叠加,那么像上边的两个相邻元素的垂直距离就已经是40px了,浏览器不允许造成如此大的浪费,所以出现了垂直距离上的外边距叠加,在进行网页布局的计算的时候一定要注意。

场景二:

嵌套元素中的外边距叠加现象:
在场景一中已经分析得出来外边距叠加的时候最终的距离是最大的那一个。
注意:
这里涉及到一个特性,块元素的margin外边距非常的嚣张,在他附近存在元素的时候,他就一定要凑上去,从相邻元素的padding或者border开始撑开margin距离,如果相邻的元素没有padding和border,那就会一直顶到content。

请耐心听我哔哔!!!

因此,我用上边的特性来解释一开始出现的那个问题,父元素没有padding和border,所以给子元素设置margin-top的时候,子元素这往上一顶就没有丝毫阻拦的直接顶到了body上,一个margin-top就想撑开25px;话说,力的作用是相互的。这就相当于父元素上边的元素设置了一个margin-bottom反作用给父元素,想将它推开25px;可是由于父元素没有border和padding,所以就会直接作用在父元素的content内容区上,但是父元素的content内容区就是子元素的区域,子元素也没有padding和border直接作用在了子元素身上;也就是说,我这一巴掌直接打到了两个人的脸上,所以他们同时向下移动25px;

解决办法:
1)给父元素增加一个border
2)给父元素增加一个padding-top
**注意:**上述两个方法都是为了制止子元素margin的嚣张气焰。但是在标准盒子模型下改变padding和border会将盒子模型的布局整个都会改变,所以不提倡使用;
3)给父元素添加overflow:hidden属性,浏览器有可能是担心子元素设置的margin-top太大,将自己撑出了父元素的范围,所以就会自动下移,此时设置overflow属性就会将父元素的躁动强行按下!

场景三:

第三种场景是一个空元素(没有padding和border)的margin-top,margin-bottom也会叠加起来。举这个例子就有点为难我胖虎了。。。。结论就是==这就是一系列空的段落元素占用的空间非常小的原因了。

最后的总结

1)外边距叠加不止发生在同等级的块级元素,还发生在嵌套的元素身上。
2)空元素的上下margin也会出现合并的现象。

存在即是合理,分开即是不合适,透过现象看本质,扎实基础。

这篇关于关于盒子模型中margin叠加现象的归类与思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/737374

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus