1、外边距叠加

外边距叠加是指两个垂直外边距相遇时,这两个外边距会合并成一个外边距,就是二变一,关键是叠加后的外边距会取值两个外边距最大的那个;

例子如下:创建A、B两个盒子,A定义一个margin-bottom:30px;B定义一个margin-top:20px

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>探讨margin叠加</title>
<style type="text/css">
.s1{
width: 100px;
height: 100px;
background-color: red;
margin-bottom: 30px;
}
.s2{
width: 100px;
height: 100px;
background-color: blue;
margin-top: 20px;
}
</style>
</head>
<body>
<div class="s1"></div>
<div class="s2"></div>
</body>
</html>

结果

发现他们之间的外边距明显小于 两个之间的和,这个就是外边距叠加造成的效果

对于外边距叠加我们分三种情况讨论:

1、同级元素

2、父子元素

3、空元素

着重说下空元素:

当一个空元素有上下边距是,如果没有border或padding,则元素上边距与下边会发生合并

注意一下几点:

1、水平外边距永远不会发生叠加,水平外边距指的是:margin-left、margin-right

2、垂直外边距只有以上三种情况会发生叠加,垂直外边距指的是:margin-top、margin-bottom

3、外边距叠加后的值是两个垂直外边距最大的那个

4、外边距叠加针对的是block以及inline-block,不包括内联元素,因为margin对内联元素无效

负margin技术

当margin为负数的时候,对普通文档流和浮动元素的而影响是不一样的。

负margin对普通文档流的影响分两种

1、当元素的margin-left和margin-top为负数的时候,“当前元素”会被拉向指定位置

(就是你设置的这个盒子按你指定方向被拉出)

2、当元素的margin-right和margin-bottom为负数的时候,“后续元素”会被拉进来

(就是你的盒子会把旁边的邻居拉进来,覆盖在当前元素)

举例margin-top和margin-bottom

这是没有设置margin的代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>探讨margin叠加</title>
<style type="text/css">
.s1{
width:100px;
height: 300px;
}
.m1{
width: 100px;
height: 100px;
background-color: red; }
.m2{
height: 100px;
background-color: yellow; }
.m3{
height: 100px;
background-color: green;
} </style> </head>
<body>
<div class="s1">
<div class="m1">A</div>
<div class="m2">B</div>
<div class="m3">C</div> </div>
</body>
</html>

结果:

设置margin-top为负数后

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>探讨margin叠加</title>
<style type="text/css">
.s1{
width:100px;
height: 300px;
}
.m1{
width: 100px;
height: 100px;
background-color: red; }
.m2{
height: 100px;
background-color: yellow;
margin-top: -50px;
}
.m3{
height: 100px;
background-color: green;
} </style> </head>
<body>
<div class="s1">
<div class="m1">A</div>
<div class="m2">B</div>
<div class="m3">C</div> </div>
</body>
</html>

看见B把自己拉出去了,覆盖住元素A

我们再设置B的margin-bottom为负数

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>探讨margin叠加</title>
<style type="text/css">
.s1{
width:100px;
height: 300px;
}
.m1{
width: 100px;
height: 100px;
background-color: red; }
.m2{
height: 100px;
background-color: yellow;
margin-bottom: -50px;
}
.m3{
height: 100px;
background-color: green;
} </style> </head>
<body>
<div class="s1">
<div class="m1">A</div>
<div class="m2">B</div>
<div class="m3">C</div> </div>
</body>
</html>

这时候B把它的后续元素C拉进来,覆盖住它自己

可以同样去实验margin-left和margin-right

负margin的使用技巧

1、图片与文字对齐

2、自适应两列布局

3、元素垂直居中

4、tab选项卡

图片与文字对齐

当文字与图片并排的时候,在底部水平往上往往是不对齐的,这是因为图片与文字默认是基线对齐(vertical-align:baseline).如果想实现图片与文字底部水平方向对齐除了使用vertical-align:text-bottom这个方法外还可以使用

兼容性更好的负margin来实现

例如 没有设置margin时

设置margin

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>负margin</title>
<style type="text/css">
img{
margin: 0 3px -3px 0;
}
</style>
</head>
<body>
<img src="data:images/xinlang.jpg" alt="xinlang"/>新浪微博
</body>
</html>

结果

由此可以看出,默认情况下图片与文字在底部水平方向上是不对齐的 。我们再css中添加img{margin: 0 3px -3px 0;}就如上图所示。实际上,{margin: 0 3px -3px 0;}可以将它看成一条公式

2、自适应两列布局

自适应两列布局,指的是在左右两列中,其中有一列的宽度为自适应,一列宽度为固定的。如果使用float,一般只能实现固定的左右两列布局,并不能实现其中一列为自适应的布局

举例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>宽度自适应</title>
<style type="text/css">
.content,.sidebar{
float: left;
color: white;
}
.sidebar{
width: 500px;
background-color: purple;
}
.content{
width: 100%;
margin-right: -500px;
background-color: red;
}
/*防止浏览器可视区域不足发生文本重叠*/
.content p{
margin-right: 210px;
}
/*它是200px+10px,10px为它们间的间距*/
</style>
</head>
<body>
<div class="content"><p>宽度自适应</p></div>
<div class="sidebar"><p>固定宽度</p></div>
</body>
</html>

结果

我们改变浏览器的宽度就可以很快的看出自适应两列布局的实际效果,WordPress经典的两栏自适应布局就是使用这种方法实现

3、元素垂直居中

想要实现块元素垂直居中比较麻烦,不过有一个经典的方法就是使用position定位结合负margin

语法:

父元素{

position:relative;

}

子元素{

position:absolute;

top:50%

left:50%;

margin-top:"height值得一半";

margin-left:"width值得一半";

}

因为你会发现当left:50% top:50% 后,发现子元素盒子的左上角才是在中心点上,所以我们再有负margin技术,把它拉进。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>元素居中</title>
<style type="text/css"> .main{
width: 200px;
height: 200px;
position: relative;
margin: 0 auto;
background-color: yellow;
}
.sub{
position: absolute;
width: 50px;
height: 50px;
left: 50%;
top: 50%;
background-color: blue;
}
</style>
</head>
<body>
<div class="main">
<div class="sub"></div>
</div> </body>
</html>

结果

<html lang="en">
<head>
<meta charset="UTF-8">
<title>元素居中</title>
<style type="text/css"> .main{
width: 200px;
height: 200px;
position: relative;
margin: 0 auto;
background-color: yellow;
}
.sub{
position: absolute;
width: 50px;
height: 50px;
left: 50%;
top: 50%;
background-color: blue;
margin-top: -25px;
margin-left: -25px;
}
</style>
</head>
<body>
<div class="main">
<div class="sub"></div>
</div> </body>
</html>

结果:

深入margin的更多相关文章

  1. 金融量化分析【day112】:因子选股

    一.因子选股基础 二.因子选股策略实现代码 # 导入函数库 import jqdata import psutil #初始化函数,设定基准等等 def initialize(context): set ...

  2. 理解CSS外边距margin

    前面的话   margin是盒模型几个属性中一个非常特殊的属性.简单举几个例子:只有margin不显示当前元素背景,只有margin可以设置为负值,margin和宽高支持auto,以及margin具有 ...

  3. 深入理解CSS中的margin负值

    前面的话 margin属性在实际中非常常用,也是平时踩坑较多的地方.margin折叠部分相信不少人都因为这样那样的原因中过招.margin负值也是很常用的功能,很多特殊的布局方法都依赖于它.它看似简单 ...

  4. margin折叠-从子元素margin-top影响父元素引出的问题

    正在做一个手机端电商项目,顶部导航栈的布局是一个div包含一个子div,如果给在正常文档流中的子div一个垂直margin-top,神奇的现象出现了,两父子元素的边距没变,但父div跟着一起往下走了! ...

  5. CSS margin详解

    以下的分享是本人最近几天学习了margin知识后,大有启发,感觉以前对margin的了解简直太浅薄.所以写成以下文章,一是供自己整理思路:二是把知识分享出来,避免各位对margin属性的误解.内容可能 ...

  6. 基于Caffe的Large Margin Softmax Loss的实现(中)

    小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文:  http://www.miao ...

  7. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  8. 由css reset想到的深入理解margin及em的含义

    由css reset想到的深入理解margin及em的含义 原文地址:http://www.ymblog.net/content_189.html 经常看到这样语句,*{ margin:0px;pad ...

  9. 探究负边距(negative margin)原理

    W3C规范在介绍margin时有这样一句话: Negative values for margin properties are allowed, but there may be implement ...

  10. overflow:hidden与margin:0 auto之间的冲突

    相对于父容器水平居中的代码margin:0 auto与overflow:hidden之间存在冲突.当这两个属性同时应用在一个DIV上时,在chrome浏览器中将无法居中.至于为啥我也不明白.

随机推荐

  1. python全栈开发,Day1(python介绍,变量,if,while)

    python基础一 一,Python介绍 python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为 ...

  2. linux常见基本命令

    目录 1.更改文件基本属性 2.Linux文件与目录管理 3.Linux用户和用户组管理 4.磁盘管理 5.Linux vi/vim 6.linux查看防火墙状态及开启关闭命令 1.更改文件基本属性 ...

  3. python记录_day25 包

    1.包就是一个文件夹 当我们导入一个包的时候,默认执行这个包内的__init__.py文件 在python2中必须写__init__.py文件,python3中可以不写,但是最好也写上 代码的结构: ...

  4. 牛客小白赛1 F题三视图

    链接:https://www.nowcoder.com/acm/contest/85/F来源:牛客网 题目描述 Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型.既然你高考选了技术 ...

  5. C++笔试题总结

    1.C和C++的特点与区别? 答:(1)C语言特点:1.作为一种面向过程的结构化语言,易于调试和维护: 2.表现能力和处理能力极强,可以直接访问内存的物理地址: 3.C语言实现了对硬件的编程操作,也适 ...

  6. c# 操作文本文件

    计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集.基于Unicode字符集的编码方式有很多,比如UTF-7.UTF ...

  7. 自用chrome+油猴脚本,使用迅雷下载百度云大文件,一键离线下载

    油猴是有名的火狐浏览器插件(Greasemonkey),当然也有Chrome版本(tampermonkey),甚至IE.Safari.Opera都有……虽然这些插件是由不同的开发者开发出来的,界面也可 ...

  8. PAT 1013 Battle Over Cities

    1013 Battle Over Cities (25 分)   It is vitally important to have all the cities connected by highway ...

  9. 本地仓库有jar包maven依然报错的原因

    本地Maven仓库有所需jar包依然报错,missing……………… 既然有这个jar包为什么还会报错呢? 找到本地仓库后发现里面有一个_remote.repositories文件 问题在_remot ...

  10. 抓包工具Charles的简单使用

    一.Charles破解 下载安装及破解方法: 1.下载charles并安装    云盘下载地址:Windows 64bit 32bit 2.安装后先打开Charles一次(Windows版可以忽略此步 ...