0.对自身可视宽度的影响

1>改变处于标准文档流中,未设置width值的block元素的可视宽度

在标准文档流中,对于没有设置宽度的block元素,当其具有内容或者设置高度后,其自身宽度为父元素宽度的100%,这个时候给block元素设置水平方向的margin值,就会改变元素的可视宽度。但是不能改变高度,因为block元素的高度是固定或者等于其内容的高度,并不会拉伸。

这个特点在bootstrap的布局里就有用到。

  1. <div class="wrap">
  2. 父元素padding: 0 10px;
  3. <div class="yellow">此block元素没有设置margin值</div>
  4. <div class="red">此block元素设置margin-left:-10px;margin-right:-10px; 拉伸了元素宽度</div>
  5. </div>
  1. * {margin:; padding:;}
  2.  
  3. .wrap {
  4. width: 400px;
  5. height: 400px;
  6. margin: 50px auto;
  7. padding: 0 10px;
  8. border: 1px solid #ccc;
  9. }
  10. .red {
  11. height: 100px;
  12. background-color: red;
  13. margin: 0 -10px;
  14. }
  15. .yellow {
  16. height: 100px;
  17. background-color: yellow;
  18. }

2>改变未设置宽度,但是设置了定位(成对设置的定位,如:top/bottom,left/right)的绝对定位元素的可视宽高

当绝对定位元素没有设置width,但设置了top/bottom,left/right值时,元素会被拉伸。比如设置left:0; right:0; 元素的宽度就是第一个相对定位的父元素的宽度的100%了,这时也能通过margin来改变元素的可视宽度。同样,对于绝对定位元素,我们也能改变它的可视高度。

  1. <div class="wrap">
  2. 父元素position: relative;
  3. <div class="yellow">绝对定位,并且设置top:0; bottom:0; 垂直拉伸元素,通过设置margin来改变可视高度</div>
  4. </div>
  1. * {margin:; padding:;}
  2.  
  3. .wrap {
  4. position: relative;
  5. width: 400px;
  6. height: 400px;
  7. margin: 50px auto;
  8. border: 1px solid #ccc;
  9. }
  10. .yellow {
  11. position: absolute;
  12. top:;
  13. bottom:;
  14. width: 100px;
  15. margin: 50px 0;
  16. background-color: yellow;
  17. }

1.百分比值的margin

跟padding一样,对于正常处于标准文档流的元素而言,当元素的margin值为百分比值时,其实际值等于父元素的宽度*百分比;

当元素设置绝对定位后,其实际值等于第一个相对于它定位的父元素的宽度*百分比

  1. <div class="wrap">
  2. 父元素宽度400px;
  3. <div class="yellow">margin-top:10%; 实际的margin-top=400px*10%=40px</div>
  4. </div>
  1. * {margin:; padding:;}
  2.  
  3. .wrap {
  4. width: 400px;
  5. height: 400px;
  6. margin: 50px auto;
  7. border: 1px solid #ccc;
  8. }
  9. .yellow {
  10. width: 200px;
  11. height: 200px;
  12. margin-top: 10%;
  13. background-color: yellow;
  14. }

2.margin重叠

margin重叠通常发生在兄弟元素之间以及父子元素之间,如果大家平时没有注意的话,margin重叠可能常常会给我们带来一些小麻烦,这里就把发生margin重叠的情况总结一下。

1>兄弟元素之间

当两个元素发生margin重叠时,其实际值的情况:

  1. 当两个margin值都为正时,实际值=两个中较大的值
  2. 当两个margin值是一正一负时,实际值=两个值相加
  3. 当两个margin值都为负时,实际值=两个中绝对值大的

那什么时候会发生margin重叠呢?

对于两个相邻的兄弟元素而言,只要是处于标准文档流中的block元素,垂直方向都会发生margin重叠。

2>父元素与第一个/最后一个子元素之间

  1. 设置border-top/bottom
  2. 设置padding-top/bottom
  3. 设置overflow:hidden/auto等属性,实现BFC

3.margin的auto值

给一个定宽的block元素设置margin: 0 auto;使元素水平居中,这应该是很多人经常使用的,不过对于auto值的具体作用,可能很少有人知道。

简单点说,对于未设置固定width或height值的元素,如果能自动拉伸,那么当设置了固定值后,auto就可以用来分配剩余空间大小。

感觉有点拗口,举个例子,有一个定宽的block元素,我们想让他在右边显示,最常用的就是使用float属性,不过用margin-left: auto;一样可以实现:

  1. <div class="wrap">
  2. <div class="red">margin-left: auto;</div>
  3. </div>
  1. * {margin:; padding:;}
  2.  
  3. .wrap {
  4. position: relative;
  5. width: 400px;
  6. height: 400px;
  7. margin: 50px auto;
  8. border: 1px solid #ccc;
  9. }
  10. .red {
  11. width: 100px;
  12. height: 100px;
  13. background-color: red;
  14. margin-left: auto;
  15. }

设置margin值为auto的有效场景包括:

  1. 普通定宽block元素,水平方向设置有效;
  2. 绝对定位元素,在设置了成对left/right,top/bottom或者都设置的情况下,定宽或定高都有效;
  3. 在父元素为display: flex;的情况下,子元素margin值为auto都有效

CSS属性之margin的更多相关文章

  1. CSS属性(pading margin)

    margin: margin:5px auto;意思上下为5,左右平均居中 margin-top: 20px; 上外边距                         margin-right: 3 ...

  2. 深入理解css中的margin属性

    深入理解css中的margin属性 之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些“坑”的,下面我会介绍margin的基本知识以及 ...

  3. 图解CSS的padding,margin,border属性

    原文出处:http://hi.baidu.com/sonan/item/af05cf8759810d1cc31627d5 觉得不错,保存以备用. --------------------------- ...

  4. 【转】图解CSS的padding,margin,border属性(详细介绍及举例说明)

    W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主要定义四个区域:内容(content).边框距(p ...

  5. 【转】图解CSS padding、margin、border属性

    http://www.cnblogs.com/linjiqin/p/3556497.html 图解CSS padding.margin.border属性W3C组织建议把所有网页上的对像都放在一个盒(b ...

  6. [转]图解CSS的padding,margin,border属性(详细介绍及举例说明)

    图解CSS的padding,margin,border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层 ...

  7. 图解CSS的padding,margin,border属性(详细介绍及举例说明)

    图解CSS的padding,margin,border属性 W3C组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层 ...

  8. 解说css中的margin属性缩写方式

    <html> <body> <div style="border: 1px solid red;"> <div style="b ...

  9. css属性兼容主流浏览器

    目前,对于网页中一些浏览器兼容性问题,可以使用css hack(css 招数)和浏览器Bug修复的方式解决. 名词解释: css Hack:针对特定浏览器编写冗余代码,这是一种欺骗浏览器的行为,预示着 ...

随机推荐

  1. Postgres中的SpinLock锁

    我们知道,在数据库中为了并发控制,少不了要使用各种各样的锁(lock).PostgreSQL中也不例外. 在PostgreSQL中有三种级别的锁,他们的关系如下: |上层 RegularLock | ...

  2. CentOS下安装Docker

    简介:本篇文章介绍如何在CentOS系统下面安装docker系统. 官方文档:https://docs.docker.com/install/linux/docker-ce/centos/ Docke ...

  3. vue封装插件并发布到npm上

    vue封装插件并发布到npm上 项目初始化 首先,要创建项目,封装vue的插件用webpack-simple很合适,vue init webpack-simple 项目名称此命令创建我们的项目的目录, ...

  4. Oracle数据库学习(四):学习中的遇到的问题

    一.xhost图形化界面安装问题 问题1:运行xhost +命令,出现命令没有找到错误 原因:Linux系统没有安装xhost图形化包. 解决办法:安装xhost图形化包,命令如下: yum what ...

  5. (转)Mysql主从复制搭建及详解

    http://www.cnblogs.com/kevingrace/p/6256603.html---------Mysql主从同步(1)-主从/主主环境部署梳理 原文:http://blog.csd ...

  6. security和oauth2.0的整合

    security和oauth2.0的整合 之前已经介绍过security的相关的介绍,现在所需要做的就是security和oauth2.0的整合,在原有的基础上我们加上一些相关的代码;代码实现如下: ...

  7. feign中的hytrix和turbin配置

    这里我用了两个生产者和两个消费者进行演示,如下图(画的不好看,凑活看看): 这里我就只讲下怎么注册到dashbord和相关的配置,提供者和消费者等代码可以去下载查看: https://github.c ...

  8. 安装Ubunutu音频视频库

    sudo apt-get install ubuntu-restricted-extras

  9. Modular Rails: The complete Guide to Modular Rails Applications 笔记

    fix SamuraiCRM/engines/core/test/dummy/config/routes 修改如下 Rails.application.routes.draw do mount Sam ...

  10. 定时IIS任务自动停止及解决办法

    ---恢复内容开始--- 操作系统:WinServer2008 R2 IIS版本:IIS7.0 目的:利用IIS挂载服务,定时或循环作业 症状:在网站的Global.asax.cs文件的Applica ...