CSS中margin:auto什么意思?margin:auto属性的用法详解
我们都知道使用margin:auto可以让元素水平居中的。但你有没有想过使用margin:auto可以让元素水平居中的原因,要回答这个问题,我们首先需要看一下margin:auto的工作原理。auto如果它适用于垂直居中,那么又是一种什么情况,下面我们来看具体内容。
首先auto是做什么的?
定义auto元素,因元素类型和上下文而异。在边距中,auto可以表示两种情况:占用可用空间或0 px。这两个将为元素定义不同的布局。
“自动”占用可用空间
这是我们利用auto最常见的用法。通过分配auto元素的左右边距,它们可以平等地占据元素容器中的可用水平空间 - 因此元素将居中。
|
1 2 3 |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
效果如下:

但是,这只适用于水平边距,它不适用于浮动和内联元素,并且它本身也不能用于绝对和固定定位元素。
推荐手册:CSS在线手册
由于auto左右边距均匀地占据“可用”空间,当你auto只给出其中一个时,你认为会发生什么?
左边距或右边距auto将占据所有“可用”空间,使元素看起来像是向右或向左偏移。
|
1 2 3 |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
效果如下:

“auto”为0px
如前所述,auto在浮动,内联和绝对元素中不起作用。所有这些元素已经决定了它们的布局,所以没有auto用于边距并期望它像这样集中。
这将破坏使用类似float的最初目的。因此设置这些元素的auto值为0px。
auto如果它没有宽度,也不会对典型的块元素起作用。到目前为止我向你展示的所有例子都有宽度。
值的宽度auto将具有0px边距。块元素的宽度通常覆盖其整个容器,它是auto或100%,因此margin:auto将被设置为0px。
auto设置垂直会是怎样的呢?
auto在顶部和底部边距中总是计算为0px(绝对元素除外)。W3C规范说它是这样的:
“如果”margin-top“或”margin-bottom“为”auto“,则其使用值为0”
到目前为止,为什么这没有说。这可能是因为典型的垂直页面流,页面大小在高度方面增加。因此,相对于页面本身而言,将元素垂直居中于其容器中不会使其显示为居中,这与水平完成(在大多数情况下)不同。
也许是因为同样的原因,他们决定为绝对元素添加一个例外,它可以在整个页面的高度垂直居中。
这也可能是由于边缘坍塌效应(相邻元素“边缘”的崩溃),这是垂直边距的另一个例外。
然而,后者似乎是一个不太可能的情况 - 因为不会折叠其边距的元素 - 如Floats和overflow其他元素visible,仍然为其分配0px垂直边距auto。
以绝对定位元素为中心
由于绝对定位元素恰好存在异常,我们将使用auto值垂直和水平居中。但在此之前,我们需要找出margin:auto实际工作的时间,就像我们希望它在绝对定位的元素中一样。
这是另一个W3C规范的用武之地:
“如果”left“,”width“和”right“中的所有三个都是”auto“:首先将”margin-left“和”margin-right“的任何”auto“值设置为0 ... ”
“如果三者中没有一个是”自动“:如果”margin-left“和”margin-right“都是”auto“,则在额外约束条件下解决方程式,即两个边距得到相等的值”
这几乎说,对水平auto的利润率,抓住间隔相等,则对值left,width并且right不应该auto,他们的默认值。因此,我们所要做的就是在绝对定位的元素中赋予它们一些价值。left并且right应该具有相同的值以实现完美的居中。
该规范还提到了垂直边距类似的东西。
“如果”top“,”height“和”bottom“中的所有三个都是auto,则将”top“设置为静态位置...”
“如果三者中没有一个是”自动“:如果”margin-top“和”margin-bottom“都是”auto“,则在额外约束下解决方程式,即两个边距得到相等的值......”
因此,对于一个绝对元件被垂直居中,其top,height和bottom值不应该auto。
现在结合所有这些,这是我们将得到的:
|
1 2 3 |
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
效果如下:

最后
如果您想要将页面上的元素向右或向左偏移而没有包含它的其他元素(就像浮点数一样),请记住有auto用于边距的选项。
将元素转换为绝对定位只是为了使它可以垂直居中可能不是一个好主意。还有其他选项,如flexbox和CSS变换,更适合那些。
转载自:https://www.php.cn/css-tutorial-412560.html
CSS中margin:auto什么意思?margin:auto属性的用法详解的更多相关文章
- 教程-Delphi中Spcomm使用属性及用法详解
Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...
- 关于CSS的table-layout属性的用法详解
前言: 今天来和大家详细说一下table-layout属性的用法. /*eg:设置表格布局算法*/ table{ table-layout:fixed; } ***本文关键词:table-layout ...
- css3中font-face属性的用法详解
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当中或许有许 ...
- moviepy音视频剪辑:moviepy中的剪辑基类Clip的属性和方法详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一. ...
- java中的Static、final、Static final各种用法详解
前言 对Static.final.Static final这几个关键词熟悉又陌生?想说却又不知怎么准确说出口?好的,本篇博客文章将简短概要出他们之间的各自的使用,希望各位要是被你的面试官问到了,也能从 ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- 盘点CSS中可以和不可以继承的属性
CSS中可以和不可以继承的属性 一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- SVN组成中trunk,branches and tags功能用法详解
SVN组成中trunk,branches and tags功能用法详解 我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...
随机推荐
- uni搜索功能实现
uni搜索功能的实现
- Java 在Excel中添加分离型饼图、环形图
一.概述 Excel中可支持多种不同类型的图表,本文介绍如何绘制分离型饼图和环形图.其中,分离型饼图的绘制可分为整体分离型(即设置饼图分离程度)和局部分离(即设置点爆炸型值)两种情况.下面将以Java ...
- 06_Intent和IntentFilter
Intent是同一个或不同的应用中的组件之间的消息传递的媒介,是一个将要执行动作的抽象描述,一般来说是作为参数来使用. Intent描述要启动的基本组件: IntentFilter对组件进行过滤. 下 ...
- IDEA无法识别src目录
如图 如此 即可 -------------------------------------------------------------------- 另一种办法是:让IDEA识别出module, ...
- 第6.6节 Python动态执行小结
一. Python动态执行支持通过输入数据流或文件传入Python源代码串,进行编译后执行,可以通过这种方式扩展Python程序的功能: 二. 动态执行方法可能导致恶意攻击,因此使用时需要 ...
- 第6章 Python中的动态可执行方法目录
第6.1节 Python代码编译 第6.2节 Python特色的动态可执行方法简介 第6.3节 Python动态执行之动态编译的compile函数 第6.4节 Python动态表达式计算:eval函数 ...
- 第14.14节 爬虫实战准备:csdn博文点赞过程http请求和响应信息分析
如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的 ...
- python zip()函数用法
zip() --内建函数 zip([iterable, ...]) 它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表) ...
- pandas LabelEncoder 测试集出现了训练集中未出现过的值怎么解决(y contains previously unseen labels 解决方法)
for i in categorical_ix: le = joblib.load(f"./LabelEncoder/{i}_LabelEncoder.model") #由于tes ...
- Scrapy+Scrapyd+Scrapydweb实现爬虫可视化
Scrapy+Scrapyd+Scrapydweb实现爬虫可视化 Scrapyd是一个服务,用来运行scrapy爬虫的 它允许你部署你的scrapy项目以及通过HTTP JSON的方式控制你的爬虫 官 ...