您现在的位置是:网站首页> 编程资料编程资料
深入理解css中的margin属性(推荐)CSS重要属性之 margin 属性知识大整合(必看篇)CSS margin全面了解浅谈css margin重叠CSS 之margin知识点(必看)细说CSS中margin属性的使用 深入解析CSS中margin属性的使用CSS中使用负margin值来调整居中位置css的margin collapsing导致最上面会出现一个横条css行内元素padding,margin,width,height没有变化css中padding和margin的异同点介绍
2023-10-21
297人已围观
简介 这篇文章主要介绍了深入理解css中的margin属性(推荐),具有一定参考价值,有需要的可以了解一下。
之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些“坑”的,下面我会介绍margin的基本知识以及那些“坑”。这篇博文主要分为以下几个部分:
- margin--基础知识
- margin--在同级元素(非父子关系)之间应用
- margin--在父元素和子元素之间应用(重点)
- margin--margin值的单位为%时的几种情况
第一部分:margin--基础知识
要介绍margin的基础知识,我们不可回避地要谈到css盒子模型(Box Model),一般而言,css盒子模型是用来设计和布局的。它本质上是一个盒子,包括:外边距(margin)、边框(border)、内边距(padding)以及最中间的内容(content)。下图即为盒子模型(这里只谈W3C规范的标准盒模型,而不谈IE5和IE6在怪异模式中使用的非标准的盒子模型):

我们要介绍的margin在最外层,因为margin(外边距)一定是透明的,所以它可以用来使得不同的盒子之间留有一定的间隙从而达到布局美观等效果。从上面的盒子模型中我们可以看到,margin在四周均存在,我们可以使用margin-top、margin-right、margin-bottom、margin-left分别设置这四个方向的margin值。(注:由于这部分知识较为基础,所以我不再在这部分不做更多介绍)
第二部分:margin--在同级元素(非父子关系)之间应用
这一部分主要介绍水平方向和竖直方向的外边距的合并问题。
(1)水平方向的外边距合并
两个水平方向的盒子相遇,那么最终两者之间的距离为左边盒子的右外边距和右边盒子的做外边距之和。
例1:
代码如下:
水平方向的两个盒子 宽为100px,右边距为50px宽为100px,左边距为50px
效果如下:

这时两者之间的距离刚好为100px。
补充说明:大家可以看到,为了使得两个div(块状元素)脱离正常的文档流我使用了display:inline-block;属性,另外,我还把body的font-size设置为0,这样可以解决inline-block自身的问题,否则两个div的举例会大于100px。当然使用float也可以使得两个div出现在同一行中。
(2)竖直方向的外边距合并
两个竖直方向的盒子相遇时,其竖直方向的距离等于上方盒子的下外边距和下方盒子的上外边距中较大的一个。
例2:
水平方向的两个盒子 高为100px,下边距为100px高为100px,上边距为50px
效果如下:

这时我们肉眼都可以观察出来,两者竖直方向的举例大约为100px(实际就是100px)而非100+50=150px;这正是因为两个竖直方向的盒子相遇时,其竖直方向的距离等于上方盒子的下外边距和下方盒子的上外边距中较大的一个。
另外一个有趣的例子就是:假设有一个元素同时设置了margin-top和margin-bottom,但是内容为空,那么这两个margin值也会叠加,值为两者最大的一个,它类似与竖直方向上两个盒子margin值的叠加。代码如下:
水平方向的两个盒子 上面的div,高100px
最终的效果如下:

我们发现这时在上面的div和在下面的div之间的举例并不是100+50=150px,而是两者中的最大者,即100px。
那么W3C为什么会设定这样的标准而不设定和水平方向一样的标准呢?即margin值的叠加,实际上这也是有一定的道理的。比如我们需要设计一个由若干个段落构成的一个页面。我们需要设置margin-top和margin-bottom使得第一段和页面的最上方有一段距离,使得最后一段和最下方有一段距离。下面是不叠加和叠加的效果图:

我们可以看到左边的页面没有重叠,那么两个段落之间的举例就是最上方的两倍间距了,而右边的页面发生了重叠,则所有的间距都是相等的。或许这就是这样设定标准的目的吧,谁知道呢?
第三部分:margin--在父元素和子元素之间应用(重点)
第二部分介绍了同级元素之间使用margin,而这一部分将要介绍最有意思的父元素和子元素之间margin的应用。这一部分,我们同样从两个方面来讨论。一方面是子元素设置水平方向上的margin值,另一方面是子元素设置竖直方向的margin值。
(1)在子元素中设置水平方向的margin值
我们可以设置margin-left来控制子元素的左边框和父元素的左边框之间的举例。
例3:
margin 宽度为100px,margin-left为100px。
我将子元素的margin-left设置为了100px;效果如下:

即子元素的左边框和父元素的左边框之间的距离为100px。与在同级元素之间设置margin不同,因为同级元素之间的margin不会考虑到padding,但是在父元素和子元素就不同了,那么如果父元素中如果有padding,效果会是什么样的呢?请看下面一个例子:
例4:
下面我们在上面例子的基础上给父元素添加padding值。
margin 宽度为100px,margin-left为100px。
上面的代码给父元素添加了100px的padding值,效果如下:

我们可以看到子元素举例上方的距离为100px,因为子元素一定是在父元素的content的部分的,这点毫无疑问。
但是经过测量可以发现子元素的左边框距离父元素的左边框之间的距离为200px,因为其中还有100px的左padding值,前面的例子因为我没有设置padding值,所以没有观察出来,因此这就说明了在子元素中设置margin-left,其值实际上是子元素的左边框距离父元素左padding内侧的距离。
例5:margin-right的使用和margin-left的使用是相似的,我在这里只举一个例子。
这个例子在子元素中设置了margin-right值,如下所示:
margin 宽度为100px,margin-right为100px。
这个例子与例4的区别仅在与子元素的位置不同。效果如下:

通过这个例子可以说明margin-right的值是子元素的右边框和父元素的右padding内侧的距离。只是前面的几个例子我没有使用padding,所以无法观察出来。
(2)在子元素中设置竖直方向的margin值
按照前面的经验,理论上来说,我们同样可以通过设置margin-top的值使得子元素的上边框和父元素的上padding的内侧留有一定的距离。那么我们就试试吧!
例6:
margin 高度为100px,margin-top为100px。
这个例子我设置了margin-top为100px,效果如下:

这并不是我们想要的效果啊,我们希望子元素的上部距离父元素的上部为100px,可是我们看到的却是父元素的上部距离浏览器页面的上部有100px的距离,这是为什么呢?哪里出现问题了呢?
实际上这是因为当父元素没有设置padding值以及border值时,出现了一个bug--父元素的上方与子元素的上方完全重合在了一起,无法分开。所以才会导致上述这种父元素和子元素同时向下的情况。
对于这种问题解决方法有下面几种:
- 方法一:给父元素添加padding-top值
- 方法二:给父元素添加border值
- 方法三:给父元素添加属性overflow:hidden;
- 方法四:给父元素或者子元素声明浮动float
- 方法五:使父元素或子元素声明为绝对定位:position:absolute;
- 方法六:给父元素添加属性 overflow:auto; positon:relative;(注:此方法为后续添加,感谢博友@小精灵Pawn提供此方法)
方法一:基于例6,在父元素的css代码中添加padding-top:1px;效果如下:

方法的唯一缺点就是增加了1px的误差。
方法二:基于例6,在父元素的css代码中添加border-top:1px solid transparent;效果如下:
提示:
本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- CSS控制文字换行、裁剪css控制文字自动换行的实现方法html、css 禁止文字自动换行属性word-breakdiv+CSS设置一行内文字超过宽度不换行且不显示截断文字加...css固定宽度并且让最后一行文字换行css 解决英文字符与阿位伯数字自动换行 css是如何实现在页面文字不换行、自动换行、强制换行的方法
- css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况浅析CSS中单位px、rem、em、vh、vw之间的区别CSS 中px、em、rem、%、vw、vh单位之间的区别详解CSS3移动端vw+rem不依赖JS实现响应式布局的方法浅析rem和em和px vh vw和% 移动端长度单位如何利用vw+rem进行移动端布局
- 详解CSS3阴影 box-shadow的使用和技巧总结 CSS3 box-shadow属性实例详解CSS3阴影效果样式库box-shadows.css 53种css3 box-shadow阴影(外阴影与外发光)图示讲解CSS3实现多重边框的方法总结详解CSS3的box-shadow属性制作边框阴影效果的方法CSS3里box-shadow属性的使用方法示例详解
- 深入理解css中position属性及z-index属性(推荐)css关于position属性的用法详解(绝对定位和相对定位的混淆)css position 设置元素的定位方式详解CSS position:absolute全面了解CSS 定位之position全面了解CSS z-index 层级关系优先级的概念CSS中的z-index属性基本使用教程详解CSS中的z-index属性在层叠布局中的用法深入解析CSS中z-index属性对层叠顺序的处理
- 详解CSS中zoom属性或overflow:auto属性清除浮动的作用ie7中overflow:auto无效的解决方法DIV背景图片在Firefox下不显示通过overflow:auto可解决CSS教程:导致一些问题的overflow-CSS教程-网页制作-网页教学网overflow:auto的用法详解
- 无需JS和jQuery代码实现CSS3鼠标浮动放大图片css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果基于CSS3实现鼠标滑过图片上移代码用纯css3实现的图片放大镜特效效果非常不错
- CSS3实现文字波浪线效果示例代码纯CSS实现波浪移动效果的示例纯css3制作鼠标悬停波浪形状弹性下拉菜单特效源码css3实现逼真的波浪起伏动画特效源码CSS3实现的波浪闪动文字动画特效源码纯css3实现的音阶波浪loading加载动画特效源码纯css3实现的文字波浪动画特效源码纯CSS3实现波浪形菜单效果源码纯CSS3实现3D波浪形动画有波浪起伏的效果CSS Houdini实现动态波浪纹效果
- CSS3常用的几种颜色渐变模式总结利用CSS3把图片变成灰色模式的实例代码什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条CSS3 RGBA色彩模式使用实例讲解CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义使用CSS实现黑暗模式和高亮模式的切换功能
- IE8下CSS3选择器nth-child() 不兼容问题的解决方法css3之UI元素状态伪类选择器实例演示总结30个CSS3选择器 css3类选择器之结合元素选择器和多类选择器用法对CSS3选择器的研究(详解)详解CSS3中属性选择器新增加的特性CSS3中的常用选择器使用示例整理CSS3 新增选择器的实例
- 我叫MT 关于紫卡技能FAQ_手机游戏_游戏攻略_
