首页 > 其他分享 >css外边距合并和塌陷问题

css外边距合并和塌陷问题

时间:2024-07-15 12:55:05浏览次数:8  
标签:浮动 元素 塌陷 inline 外边 margin css 给父

使用margin定义块元素的垂直外边距时,可能会出现外边距的合并


相邻(兄弟)块元素垂直外边距的合并

当上下两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top 的时候,他们之间的垂直间距不是 margin-bottom 和 margin-top 之和。他们之间的距离为取两个值里面的较大者

解决方案:尽量只给一个盒子添加margin

注意:只有普通文档流中块元素的垂直外边距才会发生外边距合并。行内元素、浮动元素或绝对定位之间的外边距不会合并。

解决方法:

  1. 只给其中一个元素增加外边距,既然想要两个盒子的距离为40px,那么就直接让上面的盒子的下边距为40px或者让下面的盒子的上边距为40px(推荐)

  2. 使用浮动,给下面的元素增加浮动,使其脱离文档流就可以了

注意:不要给第一个元素增加浮动,否则第一个元素脱离文档流,第二个元素会自动填补,二者可能会重叠

     3.给下面的元素使用定位,使其脱离文档流就可以了,原理和浮动一样。

注意:position的值只能是absolute绝对定位和fixed固定定位

      4.将其中一个元素变为行内块元素

使用 display: inline-block;属性将其中一个元素变为行内块元素就可以了

display的很多属性值都可以解决外边距合并问题,常用的就是 inline-block flex或 inline-flex

     5.给其中一个元素增加一个父元素,给父元素添加overflow:hidden样式

这样会使兄弟元素不在同一个BFC区域下,这个元素就可以看做成隔离了的独立容器。容器内的元素不会影响容器外的元素

     6.给其中一个元素增加一个父元素,给父元素添加一个边框

     7.给其中一个元素增加一个父元素,给父元素增加内边距

嵌套(父子)块元素垂直外边距的塌陷


对于两个嵌套关系(父子关系)的块元素,如果父子元素都有上边距,此时父元素会塌陷较大的外边距值(也就是哪个的外边距大,父元素的外边距就会变成哪个)

同时满足下面条件条件就会产生外边距塌陷问题:

  • 子元素在父元素里面

  • 子元素有margin-top或margin-bottom值

解决方案:

  1. 为父元素定义上边框

  2. 为父元素定义内边距

  3. 为父元素添加 overflow:hidden

  4. 给父元素或子元素添加浮动,让其脱标

  5. 将父元素转换成行内块元素,display:inline-block;

  6. 给父元素或者子元素添加定位,原理也是让其脱标,不过只能使用绝对定位和固定定位。

  7. 给父盒子添加  flex或者  inline-flex

还有其他方法,比如浮动,固定,绝对定位的盒子不会发生塌陷

标签:浮动,元素,塌陷,inline,外边,margin,css,给父
From: https://blog.csdn.net/OYJP666/article/details/140434831

相关文章

  • CSS(2)
    6.复合选择器1.后代选择器选中所有后代,包括儿子,孙子等等格式:父选择器 子选择器{CSS属性}<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0......
  • CSS 样式缓存不更新
    来自......
  • html+css+js带数据储存功能的在线多人积分系统
    积分数据储存功能是通过cookies实现的,所以如果不把该网页部署在web服务器上再去访问保存积分数据后读取积分时会提示没有积分数据。如果不想使用积分数据保存功能,那直接放到一个HTML文件中打开运行即可  源码在后面  保存积分数据后,刷新页面或重新打开,只要点击读取按钮就......
  • css 自定义属性
    CSS自定义属性(CustomProperties),也称为CSS变量,是CSS中一种能够保存和复用值的机制。它们与常规的CSS属性不同,因为它们可以在整个文档中定义一次,然后在需要的任何地方使用。定义和语法定义一个自定义属性使用两个连字符(--)开头,后面跟着属性名,类似于下面的示例::root{--......
  • css设置弹性flex后,如果设置100vh高度不撑满的原因
    问题父元素设置height为100%,有两个子元素,第一个设置height:100vh,第二个设置flex:1,此时第一个高度无法撑满盒子原因+解决方式当父元素设置display为flex,第一个div设置高度64px,剩一个div设置高度为flex:1,这时候肯定两个子元素同高。但是如果此时设置第一个div的高度为100......
  • 前端HTML+CSS实现3D炫酷相册(附源码)
    前言    利用基础的html和css实现3D相册(可自我添加照片)    本人初衷是为了验证所学的知识,顺便想逗女朋友开心......
  • WEB前端03-CSS3基础
    CSS3基础1.CSS基本概念CSS是CascadingStyleSheets(层叠样式表)的缩写,它是一种对Web文档添加样式的简单机制,是一种表现HTML或XML等文件外观样式的计算机语言,是一种网页排版和布局设计的技术。CSS的特点纯CSS布局与结构式HTML相结合能帮助设计师分离外观与结构,和传统的表......
  • Web开发 —— 放大镜效果(HTML、CSS、JavaScript)
    目录一、需求描述二、实现效果三、完整代码四、实现过程1、HTML页面结构2、CSS元素样式3、JavaScript动态控制(1)获取元素(2)控制大图和遮罩层的显隐性(3)遮罩层跟随鼠标移动(4)控制遮罩层移动范围(5)显示放大图一、需求描述前端实现放大镜效果;鼠标移入图片区域,显示遮......
  • 前端 纯CSS border-radius画一个波浪动画
    利用border-radius生成椭圆并不是利用旋转的椭圆本身生成波浪效果,而是利用它去切割背景,产生波浪的效果。HTML:<h2>波浪动画</h2>SCSS:body{position:relative;align-items:center;min-height:100vh;background-color:rgb(118,218,255);ov......
  • CSS基础
    CSS基础CSS的使用盒子模型CSS选择器基本选择器伪元素选择器伪类选择器1.结构性伪类选择器2.UI状态伪类选择器3.其他伪类选择器CSS选择器优先级弹性盒子模型定位CSS长度单位1.绝对长度单位2.相对长度单位CSS的使用<!--行内样式在元素内部style=“”-->......