0

0

css之margin属性详解

小云云

小云云

发布时间:2018-02-28 14:02:02

|

2769人浏览过

|

来源于php中文网

原创

作为前端狗的我们,每天都要和网页打交道。当 ui 将设计稿发给你时,css 的知识便显得尤为重要。而 css 这一标记性的语言,却时常让我很头疼:毫无逻辑性,并充满了各种坑爹的潜规则 ,以至于每次做项目时,大部分时间精力都浪费在了调整布局与样式上,详情可点击知乎上的为什么 css 这么难学?

正文

margin 算是性格刚烈的属性了,下面,我将从各个方面讲解 margin 的可怕之处。

元素尺寸的影响

通常一个元素的尺寸可分为:可视尺寸 与 占据尺寸
  1. 可视尺寸 - clientWidth (border - padding - size)

  2. 占据尺寸 - outerWidth (border - margin)

css之margin属性详解

立即学习前端免费学习笔记(深入)”;

margin 又是怎样影响这两个尺寸的呢?

首先,两个尺寸都需满足一定的条件。

可视尺寸的影响条件

  1. 适用于 没有设定 width/height 的块级元素 (宽高设死了,怎么会影响呢?)
    其中不包括 float absolute fixed 元素 ,inline水平 ,table-cell 元素

  2. 只适用于水平方向尺寸(margin-left/margin-right)

占据尺寸的影响条件

  1. 适用于 block/inline-block 水平元素

  2. 适用于 任何方向

  3. 与 width/height 值无关

  4. inline 元素只影响水平方向 (后面会提到)

影响示例

  1. margin 影响元素的可视水平尺寸
    margin的可视尺寸示例

  2. margin 影响占据尺寸 ,这个可以说是 margin 的本命技能了,就不举例了。

百分比单位

通常而言,margin 的单位中,百分比单位最容易让人头晕。

  1. 普通元素的百分比 margin 都是相对于 容器的宽度 计算的

    
    

  2. 绝对定位的百分比 margin 是相对于 第一个具有定位属性的祖先元素的宽度 计算的(relative/absolute/fixed)

    
    

重叠详解

重叠可谓是 margin 中的最重要的潜规则了。

发生情景

  1. 相邻的兄弟元素

  2. 父级和第一个/最后一个子元素

  3. 空的块级元素(自己和自己)

重叠条件

  1. 块级元素 (不包括 float 和 absolute 元素)

  2. 不考虑 writing-mode,只发生在垂直方向 (margin-top/margin-bottom)

  3. 父子 重叠条件

  • margin-top 重叠

  • margin-bottom 重叠

  1. 父元素 非格式化上下文元素 没有设置 overflow:hidden

  2. 父元素没有 border-bottom 设置

  3. 父元素没有 padding-bottom 设置

  4. 父元素和第一个子元素之间没有inline元素分割

    css3下载按钮效果
    css3下载按钮效果

    css3下载按钮效果,通过css3制作的按钮,其实之前用css也可以完成很漂亮的按钮,但是css3中家里更多的属性,使样式变得更加美观,网站里面肯定会用到按钮,无论是商城还是企业网站,所以按钮的样式要跟网站磨合,php中文网推荐下载!

    下载
  5. 父元素没有 height ,min-height,max-height 限制

  6. 父元素 非格式化上下文元素 没有设置 overflow:hidden

  7. 父元素没有 border-top 设置

  8. 父元素没有 padding-top 设置

  9. 父元素和第一个子元素之间没有inline元素分割

  • 空的块级元素 margin 重叠条件

    1. 元素没有 border 设置
    2. 元素没有 padding 设置
    3. 里面没有 inline 元素
    4. 没有 height,或者 min-height
  • 计算规则

    1. 正正取大值

      
      

      两个元素垂直距离为 : #top元素的 margin-top值
    2. 正负值相加

      
      

      两个元素垂直距离为: #top元素的margin-top值 加上 #bottom元素的margin-bottom值
    3. 负负最负值

      
      

      两个元素垂直距离为 : #top元素的 margin-top值
    4. 父级和第一个/最后一个子元素 发生重叠
      给子元素设置垂直方向的 margin ,等同于 给父元素设置相同的垂直方向的 margin 属性,
      也就是说 父子元素发生 margin 重叠时, 它们俩共用一个 margin 属性

    重叠意义

    • 连续段落或列表之类,如果没有margin重叠,排版会不自然。

    • 页面中任何地方,嵌套或直接放入任何空的 p,都不会影响原来的布局。

    • 遗落空的任意多个 p 元素,不会影响原来的阅读排版。

    margin auto

    当你使用 margin auto 时,就应该联想到一个词 :填充

    一个没有设置宽高的块级元素,会自动填充宽度

    如果 一侧是定值,一侧是 auto,则 auto 为剩余空间的大小

    如果两侧均是 auto,则平分 剩余空间

    示例如下:

    
    

    margin:auto 0 !== 垂直居中

    以上,我们可得当一个块级元素设置了 margin: 0 auto 可以实现水平居中,

    而为什么 margin:auto 0 不会垂直居中?

    答:一个块级元素会自动填充可用的水平尺寸,但不会填充垂直尺寸,是因为其根本没有任何可用的垂直空间。也就是说 margin: 0 auto , 总是有尺寸可以来填充的! 而 margin: auto 0 是没有任何尺寸的可以来填充的。

    失效情况

    当子元素的宽度大于父元素的宽度 ,是无法通过 margin: 0 auto 实现居中的
    因为,这个时候已经没有任何空间可以填充了,当宽度超出父元素时,margin 已经为负值了。

    垂直居中

    1. writing-mode 与垂直居中

      
      

    2. 绝对定位元素

      
      

    失效情景

    1. inline 水平元素的垂直margin 无效(margin-top/margin-bottom)

    2. margin 重叠发生

    3. 绝对定位元素非定位方位的 margin值 "无效"
      因为 绝对定位元素 脱离了文档流,与相邻元素没有关系,所以它不可能像普通元素一样,设置margin,推走其他元素

    4. margin 鞭长莫及
      因为 有某些元素破坏了 文档流,设置了 float absolute,造成了假象,margin不会根据 这些破坏元素作为标准

    5. display:table-cell/display:table-row 等声明的margin无效!某些替换元素除外,根据各个浏览器的实现方式作为区分。比如,给 button 元素声明 display:table-cell,但在 chrome 中,button 的 display 属性是 inline-block 。

    6. 内联特性导致 margin 失效
      margin-top: 负无穷, 但是,小到 1em 便无效了。
      因为它是内联元素,默认是基线对齐,x字母下边缘对齐,margin 值再大,也不会起作用。
      margin负无穷情景解析

    其他属性

    1. margin-start

    • 正常流向,margin-start 等同于 margin-left,两者重叠不相加

    • 如果水平流向是从右向左,margin-start 等同于 margin-right

    • 在垂直流下 ( writing-mode:vertical-*; ) margin-start 等同于 margin-top

  • margin-end 与 margin-start 相对

  • margin-before 默认情况等同于 margin-top

  • margin-after 默认情况等同于 margin-bottom

  • margin-collapse

    • margin-collapse:collapse;

      (默认值) 发生重叠
    • margin-collapse:discard;

      取消重叠,margin 重叠部分为 0 ,没有margin
    • margin-collapse:separate;

      不发生重叠,margin 重叠部分为 margin-top + margin-bottom

    相关推荐:

    浅谈margin负值的作用

    详解CSS中margin和padding的区别

    CSS的margin有什么作用

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    2026赚钱平台入口大全
    2026赚钱平台入口大全

    2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

    32

    2026.01.31

    高干文在线阅读网站大全
    高干文在线阅读网站大全

    汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

    24

    2026.01.31

    无需付费的漫画app大全
    无需付费的漫画app大全

    想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

    29

    2026.01.31

    漫画免费在线观看地址大全
    漫画免费在线观看地址大全

    想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

    6

    2026.01.31

    漫画防走失登陆入口大全
    漫画防走失登陆入口大全

    2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

    9

    2026.01.31

    php多线程怎么实现
    php多线程怎么实现

    PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

    1

    2026.01.31

    php如何运行环境
    php如何运行环境

    本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

    0

    2026.01.31

    php环境变量如何设置
    php环境变量如何设置

    本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

    0

    2026.01.31

    php图片如何上传
    php图片如何上传

    本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

    2

    2026.01.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    CSS3 教程
    CSS3 教程

    共18课时 | 5万人学习

    SciPy 教程
    SciPy 教程

    共10课时 | 1.3万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.1万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号