目录

CSS Margin 边距详解

开发实例

CSS 实现水平垂直居中

纯 absolute

absolute 加 calc

absolute 加 transform

absolute 加 margin

overflow 兼容 Safari 浏览器


CSS Margin 边距详解

1、简写属性语法:margin:[ <length> | <percentage> | auto ]{1,4}

2、适用于:所有元素,除table | inline-table | table-caption的表格类元素之外、继承性:无

3、动画性:看每个独立属性、计算值:看每个独立属性、媒 体:视觉

4、分拆纵向独立属性语法:

vertical-margin:<length> | <percentage> | auto

vertical-margin = margin-top,margin-bottom

5、默认值:0、适用于:所有元素,除table | inline-table | table-caption的表格类元素和非替代行内元素之外

6、动画性:当取值为 <length> | <percentage> 时、计算值:指定的百分比或绝对长度值

7、分拆横向独立属性语法:

horizontal-margin:<length> | <percentage> | auto

horizontal-margin = margin-right,margin-left

取值:

1)auto:水平(默认)书写模式下,vertical-margin计算值为0,horizontal-margin取决于包含块的剩余可用空间。详见:margin系列之keyword auto

2)<length>:用长度值来定义外补白。可以为负值

3)<percentage>:用百分比来定义外补白。水平(默认)书写模式下,参照其包含块的width进行计算,其它情况参照height,可以为负值

说明:简写属性。为元素设置所有四个方向(上右下左)的外边距。

1)margin属性接受1~4个参数值。如果提供四个参数值,将按上、右、下、左的顺序作用于四边;提供三个,第一个用于上,第二个用于左、右,第三个用于下;提供两个,第一个用于上、下,第二个用于左、右;只提供一个,同时用于四边。

2)非替代(non-replaced)行内元素可以使用该属性定义horizontal-margin;若要定义vertical-margin,必须改变元素为块级或行内块级。

3)外延边距始终透明,即不可见也无法设置背景等任何样式。

4)某些相邻的margin会发生合并,我们称之为margin折叠:

h2{margin:10px 0;}
div{margin:20px 0;}
......
<h2>这是一个标题</h2>
<div><h2>这是又一个标题</h2>
</div>

本例中,第1个h2的margin-bottom,div的margin-top,第2个h2的margin-top是相邻的,三者会被合并取其中最大的那个值作为最后的间隙,所以它们之间的margin间隙最后是(20px)。

如果给上例中的div加上border的话:

h2{margin:10px 0;}
div{margin:20px 0;border:1px solid #aaa;}
......
<h2>这是一个标题</h2>
<div><h2>这是又一个标题</h2>
</div>

本例中,第一个h2的margin-bottom(10px),div的margin-top(20px)将被合并,但第二个h2的margin-top不与它们合并,因为它被border分隔,不与它们相邻。

margin折叠常规认知:

margin折叠只发生在块级元素上;

浮动元素的margin不与任何margin发生折叠;

设置了属性overflow且值为非visible的块级元素,将不与它的子元素发生margin折叠;

绝对定位元素的margin不与任何margin发生折叠;

根元素的margin不与其它任何margin发生折叠;

对应的脚本特性为:margin

分拆纵向独立属性。为元素设置上、下外边距。

替代(Replaced)行内元素可以应用该属性;非替代(non-Replaced)行内元素要使用该属性必须改变元素为块级或行内块级。

水平(默认)书写模式下,margin 合并只发生在vertical-margin上。

对应的脚本特性分别为:marginTop, marginBottom

分拆横向独立属性。为元素设置上、下外边距。

所有的行内元素均可以应用该属性。

默认情况下,horizontal-margin不会发生 margin 折叠,除非将书写模式改变为纵向。

对应的脚本特性分别为:marginRight, marginLeft

开发实例

负值逆向移动

Html

<div class="commonEvenRowDiv"><span class="commonOddColumnDiv">81</span><span class="commonEvenColumnDiv">82</span><span class="commonOddColumnDiv">83</span><span class="commonEvenColumnDiv"><a href="javascript:ajaxToUdp('J32')" class="forcedLeftShift30 forcedTopShift30"><img src="data:image/area/futian_1.png"></a></span><span class="commonOddColumnDiv">85</span><span class="commonEvenColumnDiv">86</span><span class="commonOddColumnDiv">87</span><span class="commonEvenColumnDiv">88</span><span class="commonOddColumnDiv">89</span>
</div>

CSS

/*强制元素反向左移30*/
.forcedLeftShift30 {float: left;margin-left: -30px;
}/*强制元素反向上移30*/.forcedTopShift30 {float: left;margin-top: -20px;
}

页面效果

CSS 实现水平垂直居中

纯 absolute

这种方式比较好理解,兼容性也很好,但是需要知道子元素的固定宽高值。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style type="text/css">.out {border: 1px solid red;width: 300px;height: 200px;/*父元素使用相对定位*/position: relative;}.inner {background: green;width: 100px;height: 100px;/*子元素使用绝对定位*/position: absolute;;top: 50%;left: 50%;margin-left: -50px;margin-top: -50px;}</style>
</head>
<body>
<div class="out"><div class="inner">万里长城</div>
</div>
</body>
</html>

父元素 out 使用相对定位,子元素 inner 使用绝对定位

子元素相对顶部偏移 50%,相对左边偏移 50%

根据子元素 inner 自己的宽高,然后减去自己宽高的一半

1)绝对定位的百分比是相对于父元素的宽高,但绝对定位是基于子元素的左上角

2)借助外边距的负值让元素向相反方向定位,通过指定子元素的外边距为子元素宽/高一半的负值,让子元素居中

absolute 加 calc

方式一虽然好理解,但是要求被居中的子元素必须是固定宽高,而现在通常都是自适应的页面,所以需要优化。

css3 的 calc() 函数允许在属性值中执行数学计算操作(加减乘除),如下所示使用 calc() 指定一个元素宽的固定像素值为多个数值的和:

.foo {width: calc(100px + 50px);
}

从而引出了本方法,本方式子元素宽高值即可以固定的,也可以是相对的。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style type="text/css">.out {border: 1px solid red;width: 300px;height: 200px;/*父元素使用相对定位*/position: relative;}.inner {background: green;/**子元素宽高可以是固定值,也可以是相对值*/width: 200px;height: 100px;/*子元素使用绝对定位,父元素的宽高的50% 减去自己宽高的一半*/position: absolute;;left: calc(50% - 100px);top: calc(50% - 50px);}</style>
</head>
<body>
<div class="out"><div class="inner">万里长城</div>
</div>
</body>
</html>

如上所示子元素宽高为固定值。如下所示子元素宽高为相对值时,同理也是在自己的基础上再去掉一半即可。

        .inner {background: green;/**子元素宽高可以是固定值,也可以是相对值*/width: 80%;height: 60%;/*子元素使用绝对定位,父元素的宽高的50% 减去自己宽高的一半*/position: absolute;;left: calc(50% - 40%);top: calc(50% - 30%);}

absolute 加 transform

仍然是绝对定位,可以使用 css3 新增的 transform,transform 的 translate 属性也可以设置百分比,其是相对于自身的宽和高,所以可以将 translate 设置为 -50%,就可以做到居中了。《CSS3 transform 属性》

这种方式子元素宽高可以是固定的,也可以是相对的。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style type="text/css">.out {border: 1px solid red;width: 300px;height: 200px;/*父元素使用相对定位*/position: relative;}.inner {background: green;/*子元素宽高可以是固定值,也可以是相对值*//*width: 200px;height: 150px;*/width: 80%;height: 60%;/*子元素使用绝对定位*/position: absolute;;/**相对父元素距离顶部和左边偏移50%*/top: 50%;left: 50%;/*相对自己再向上和向左偏移自己的一半*/transform: translate(-50%, -50%);}</style>
</head>
<body>
<div class="out"><div class="inner">万里长城</div>
</div>
</body>
</html>

absolute 加 margin

这种方式也是非常常用的方式,被居中的子元素宽高可以是固定值,也可以是相对值,兼容性也很好。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title></title><style type="text/css">.out {border: 1px solid red;width: 300px;height: 200px;/*父元素使用相对定位*/position: relative;}.inner {background: green;/**子元素宽高可以是固定值,也可以是相对值*/width: 60%;height: 60%;/*子元素使用绝对定位*/position: absolute;;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}</style>
</head>
<body>
<div class="out"><div class="inner">万里长城</div>
</div>
</body>
</html>

通过设置各个方向的距离都是 0,再将 margin 设为 auto,就可以在各个方向上居中了。

overflow 兼容 Safari 浏览器

1、overflow 属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。

描述
visible 默认值。内容不会被修剪,会呈现在元素框之外。
hidden 内容会被修剪,并且其余内容是不可见的。
scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。
inherit 规定应该从父元素继承 overflow 属性的值。

2、overflow 设置的滚动条在 PC 上正常,有时候却在 Safari 上没有效果,此时加上 -webkit-overflow-scrolling: touch; 即可

.rightDiv {width: 80%;height: 90%;/*border: 1px #ff0000 solid;*/overflow: auto;/*兼容 Safari 浏览器*/-webkit-overflow-scrolling: touch;background-color: #344861;float: left;
}

CSS Margin 边距详解、CSS 实现水平垂直居中、overflow 兼容 Safari 浏览器相关推荐

  1. html css 距离顶部距离,详解CSS line-height和height

    最近在做CSS界面时经常遇到line-height和height这两个属性,一直没搞很明白,今天静下心来好好网上查阅了一下,算是有所领悟.https://blog.csdn.net/a20131263 ...

  2. CSS中line-height属性详解(CSS之四)

    CSS中line-height属性详解 基本概念 line-height,又称行高,指的是两行文字基线之间的距离,又可以称为这行文字所占的高度. 图中两行基线之间的距离就是行高,基线相关可以查看CSS ...

  3. css中reset属性详解,css中如何使用counter-reset属性

    css中如何使用counter-reset属性 发布时间:2020-09-23 14:26:58 来源:亿速云 阅读:83 作者:小新 这篇文章主要介绍css中如何使用counter-reset属性, ...

  4. css字体像素教程,详解CSS中的字体属性的使用

    字体族 font-family 示例: CSS Code复制内容到剪贴板 h2 {font-family:times,serif;} 注意:如果一个字体名多于一个单词(有空格),应该加上引号. 例如: ...

  5. html nthchild作用,详解CSS中:nth-child的用法

    前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是":nth-child". 下面我将用几个典型的实例来给大家讲解:nt ...

  6. 从零开始学前端 - 7. CSS盒模型 margin和padding详解

    作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...

  7. float属性html,详解CSS样式中的float属性

    详解CSS样式中的float属性.float是 css 样式的定位属性.我们在印刷排版中,文本可以按照需要围绕图片.一般把这种方式称为"文本环绕".在网页设计中,应用了CSS的fl ...

  8. 详解CSS的盒模型(box model) 及 CSS3新增盒模型计算方式box-sizing

    W3C规范 一般来说,页面中的每一个元素都会形成一个矩形盒子,渲染引擎根据给定的样式确定这个盒子的呈现.通俗的来说,页面的布局就是一个个盒子的排列和摆放.掌握了盒子呈现的本质,布局也就轻而易举. 在 ...

  9. css中table标签详解(一)

    css中table标签详解(一) 什么是table标签,以及table标签的组成? 不叨叨,直接上代码 <table><tr><td></td>< ...

  10. css样式继承规则详解

    css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...

最新文章

  1. MSCKF-Based Visual-Wheel Odometry 轮速视觉融合里程计
  2. document操作例题1-延迟注册与二级菜单
  3. boost::python::to_python_converter相关的测试程序
  4. C#泛型列表List实现二维数组的功能(令附C#泛型列表List基本用法总结)
  5. 做到我这样,你也能拿到京东Offer
  6. SpringCloud Hoxton版微服务- Gateway网关
  7. 使用wordpress_为什么我使用WordPress进行教育
  8. .net中的压力测试
  9. 河北外国语学院计算机宿舍,河北外国语学院宿舍怎么样 住宿条件好不好
  10. 程序员:请不要对我的代码指手画脚!
  11. 电脑只有一个c盘怎么办_新买的电脑,拿到手只有一个C盘,如何分成两个盘
  12. Bootloader解锁加锁 Android刷机
  13. iOS appicon 与 launchImage 尺寸一览
  14. JAVA面试算法小记
  15. 码元、码元速率、波特率、比特率理解
  16. 系出阿里“同门”的盒马鲜生要怎么走?
  17. 全面理解主成分分析(PCA)和MNIST数据集的Python降维实现
  18. 微信小程序插件下发优惠券踩坑
  19. Android视频教学下载大全(VeryCD上)
  20. 百度世界大会2021: 与时代共振,AI让生活更好

热门文章

  1. 拓端tecdat|R语言MCMC的rstan贝叶斯回归模型和标准线性回归模型比较
  2. 拓端tecdat|matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
  3. 拓端tecdat|windows中用命令行执行R语言命令
  4. 拓端tecdat|R语言文本主题模型之潜在语义分析(LDA:Latent Dirichlet Allocation)
  5. django数据库增删改查操作
  6. python定义一维数组
  7. 基于umi写一个用户管理CRUD
  8. python连接MongoDB,以及常用操作
  9. 问题1、图像分割预测时原始图片大小与预测图片大小不一致
  10. fuzzy仿真 MATLAB,基于Matlab的Fuzzy-PID控制器的设计与仿真