用CSS让DIV上下左右居中的方法

例如 一个父div(w:100%;h:400px)中有一个子div(w:100px;100px;)。让其上下左右居中。

方法一(varticle-align

理念

利用表格单元格的居中属性。

步骤

  • 父div外层配置一个div,同时设置为表格元素 (display: table),宽度为100%
  • 父div配置为表格单元格元素 (display: table-cell)
  • 父div配置居中属性(vertical-align: middle),使子div上下居中
  • 子div通过margin配置左右居中(margin-left:auto; margin-right:auto

例子

<style>* {margin: 0; padding: 0; box-sizing: border-box;}.table {display: table; width: 100%;}.father {display: table-cell; vertical-align: middle;}.son {margin: auto;}
</style>
<body><div class="table" ><div class="father" style="width: 100%; height: 400px; border: 1px solid rebeccapurple;"><div class="son" style="width: 100px; height: 100px;background: palegreen;"></div></div></div>
</body>

注:

  • 表格单元格比较特殊,如果只有一个单元格时,它的宽度默认会占父级(table|tr)宽度的100%;
  • table默认宽度不会撑开,需要手动配置
    width:100%;

方法二(line-height

理念

当父div的行高等于自身高度时,内部的行内元素会上下居中显示。行内块没有固定高度时也会上下居中显示。通过文本居中属性

text-align:center
,可以使内部行内元素或行内块元素左右居中显示。

步骤

  • 子div设定为行内块元素(display:inline-block);
  • 父div设置行高(line-height)使子div上下居中
  • 父div设置文本居中(text-align:center)使子div左右居中。

例子

<style>* {margin: 0; padding: 0; box-sizing: border-box;}.father {line-height: 500px; text-align: center; font-size: 0;}.son { display: inline-block;/* display: inline-flex;display: inline-grid;display: inline-table; */}
</style>
<body><div class="father" style="width: 100%; height: 400px; border: 1px solid rebeccapurple;"><div class="son" style="width: 100px; height: 100px;background: palegreen;"></div></div>
</body>

注: 行高如果设置为当前父div的高度(400px)的话,有固定高度的子div并不会居中显示的,问题出在浏览器默认将其当做文本居中的,即把它当做了一段文本(chrome默认font-size:16px;hight:21px)进行居中,没把它当做高度100px进行居中。所以需要对父div的

line-height
进行调整。以
font-size:0
(对应的字体高度为0)为例子,则需要line-height增加一个子div的高度(400px 100px;)。

方法三(绝对定位

理念

利用定位属性(top、left、right、bottom)百分比的模式。若为100%,则代表偏移的长度为父div的高度(宽度)的100%。

步骤

  • 父div标记下定位(position:relative|absolute|fixed);子div绝对定位(position:absolute
  • 子div上下居中:
    top:50%;margin-top:-h/2;
    或是
    bottom:50%;margin-bottom:-h/2;
  • 子div左右居中:
    left:50%;margin-left:-w/2
    或是
    right:50%;margin-right:-w/2

例子

<style>* {margin: 0; padding: 0; box-sizing: border-box;}.father {position: relative;}.son {position: absolute;bottom:50%;margin-bottom: -50px;left: 50%;margin-left: -50px;}
</style>
<body><div class="father" style="width: 100%; height: 400px; border: 1px solid rebeccapurple;"><div class="son" style="width: 100px; height: 100px;background: palegreen;"></div></div>
</body>

方法四(绝对定位)

理念:

定位属性top和bottom(或是left和right)值分别设置为0,但子div有固定高度(宽度),并不能达到上下(左右)间距为0,此时给子div设置margin:auto会使它居中显示。

步骤:

  • 父div标记下定位(position:relative|absolute|fixed|sticky);子div绝对定位(position:absolute
  • 子div上下居中:
    top:0;bottom:0;margin-top:auto;margin-bottom:auto
  • 子div左右居中:
    left:0;right:0;margin-left:auto;margin-right:auto

例子

<style>* {margin: 0; padding: 0; box-sizing: border-box;}.father {position: relative;}.son {position: absolute; top: 0; bottom:0; left: 0; right: 0; margin: auto}
</style>
<body><div class="father" style="width: 100%; height: 400px; border: 1px solid rebeccapurple;"><div class="son" style="width: 100px; height: 100px;background: palegreen;"></div></div>
</body>

方法五(flex)

理念

弹性盒子中只要给弹性子元素设置 margin: auto; 可以使得弹性子元素上下左右居中。

例子

<style>* {margin: 0; padding: 0; box-sizing: border-box;}.father {display: flex;}.son {margin: auto}
</style>
<body><div class="father" style="width: 100%; height: 400px; border: 1px solid rebeccapurple;"><div class="son" style="width: 100px; height: 100px;background: palegreen;"></div></div>
</body>

flex兼容性,以及存在的已知问题

方法六(相对定位)

理念

利用定位属性(top、left、right、bottom)百分比的模式。若为100%,则代表偏移的长度为父div的高度(宽度)的100%。

步骤

  • 父div标记下定位(position:relative|absolute|fixed);子div相对定位(position:relative
  • 子div上下居中:
    top:50%;margin-top:-h/2;
    或是
    bottom:-50%;margin-top:-h/2;
  • 子div左右居中:
    left:50%;margin-left:-w/2
    或是
    right:-50%;margin-left:-w/2

例子

<style>* {margin: 0; padding: 0; box-sizing: border-box;}.father {position: relative;}.son {position: relative; top:50%;margin-top:-50px;left:50%;margin-left:-50px}
</style>
<body><div class="father" style="width: 100%; height: 400px; border: 1px solid rebeccapurple;"><div class="son" style="width: 100px; height: 100px;background: palegreen;"></div></div>
</body>

注:

  • 与绝对定位不同的是,定位属性相对的点是自身元素的左上角。(所以bottom是负值,和方法三绝对定位写法有不一样的地方)
  • 如果有同级元素,可能会受到影响。
  • 如果子div是浮动元素,也有居中效果。

结尾

方法二和方法三兼容性要比其它好些。最简单的是弹性盒子。

补充

margin负值可以用2D转换代替。优点是不用计算子div的宽高。

margin-top: -h/2
=>
transform: translateY(-50%)

margin-bottom: -h/2
=>
transform: translateY(50%)

margin-left: -h/2
=>
transform: translateX(-50%)

margin-right: -h/2
=>
transform: translateX(50%)

参考资料

Can I use
css-vertical-center-solution
CSS实现垂直居中的5种方法--前端观察

相关指导

盼先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能性Java集合

如今&#xff0c;在功能上大肆宣传&#xff0c;因此至少在Java集合方面&#xff0c;我将简要介绍一下其中的功能。 我个人喜欢标准 集合API&#xff0c;但在某些情况下可能会很尴尬并添加其他详细信息。 在Java 8的更高版本中&#xff0c;这应该不是问题。 在那里&#xff0c;…

python绘制帕累托图

python绘制帕累托图代码 1 import pandas as pd2 import matplotlib.pyplot as plt3 plt.rcParams[font.sans-serif][SimHei]#表示可以显示中文4 plt.rcParams[axes.unicode_minus]False#表示可以正常显示正负号5 datapd.read_csv(catering_dish_profit.csv,index_coltype)6 pr…

currentStyle、getComputedStyle 获取样式

style.height 获取的是行间的样式 currentStyle.height、getComputedStyle(elem,null).height 获取的是 div 的 content 的宽高&#xff0c; clientHeight 获取的是 contentpadding&#xff0c; offsetHeight 获取的是contentpaddingborder。 <script> window.onload…

html5 测评游戏,暗黑之王评测:HTML5游戏铸就最华丽ARPG冒险

由白鹭时代(Egret Technology)与比悦科技联手推出的重度大型HTML5游戏《暗黑之王》&#xff0c;一款典型的ARPG手游&#xff0c;其HTML5版本推出以来&#xff0c;获得了来自业界、玩家和媒体的大量关注。其丰富的游戏内容和玩法&#xff0c;加上卓越的游戏性能表现&#xff0c;…

搞定flex布局

这几种方式的搭配使用可以轻松搞定 PC 端页面的常见需求&#xff0c;比如实现水平居中可以使用 margin: 0 auto&#xff0c;实现水平垂直同时居中可以如下设置&#xff1a;.dad {position: relative; } .son {position: absolute;margin: auto;top: 0;right: 0;bottom: 0;left…

Java基础5一数组的常见应用算法

常用算法 1.冒泡排序: 原理&#xff1a;比较两个相邻的元素&#xff0c;将值大的元素交换至右端 示例: public static void bubbleSort(int[] a) {int n a.length;//总共进行n-1轮的比较for (int i 1; i < n; i) {for (int j 0; j < n - i; j) {if (a[j] > a[j 1]…

使用Xtend构建Vaadin UI

今天&#xff0c;我决定向Xtend打个招呼。 我希望学习一些新的编程语言。 选择一个标准的清单并不多。 它必须是在JVM上运行的编程语言&#xff0c; 如果我不需要学习用于建筑应用的全新生态系统&#xff0c;那就太好了。 我已经检查了几个选项。 JVM的编程语言列表已不多了…

python 浏览器显示本地文件夹_浏览器读取本地文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问&#xf…

p15页

给你一个n*n的01矩阵&#xff0c;只能够将0变成1&#xff0c;使得每个元素上下左右之和均是偶数&#xff0c; 比如 0 0 0 0 1 0 1 0 0>>>>1 0 1 0 0 0 0 1 0 一个转变了3步 多实例T 然后一个n&#xff08;n<15&#xff09; 表示n*n的矩阵 …

html 登陆sql server,jsp实现注册与登录页面+sqlsever2008

//index.jspString path request.getContextPath();String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/";%>登陆用户登陆用户名&#xff1a;密 码:注册新用户//Logon.jspString path req…

百度前端学院-基础学院-第四课

今天是第四天&#xff0c;进度可以&#xff0c;表扬一下自己。 今天的课程目标是&#xff1a;掌握 CSS 稍微复杂的一些选择器&#xff0c;还有背景&#xff0c;边框等一些 CSS 样式属性。 CSS背景&#xff1a; 背景色&#xff1a;background-color:gray; 背景图&#xff1a…

JUnit测试方法订购

直到4.10版为止的Junit都使用反射API返回的测试类中测试方法的顺序作为测试方法执行的顺序– Class.getMethods&#xff08;&#xff09; 。 引用getMethods&#xff08;&#xff09;api的Javadoc&#xff1a; 返回的数组中的元素未排序&#xff0c;并且没有任何特定顺序。 …

html中padding和margin的区别和用法与存在的bug消除

关于margin&#xff1a;在需要border外侧添加距离时。空白处不需要背景时。相连的两个部分的地方需要加外边的边距时使用。 关于padding&#xff1a;在需要border内侧添加距离时。空白处需要背景时。相连的两个部分的地方需要加内部的边距时使用。 IE6中双边距Bug&#xff1a; …

python发微信提醒天气冷了注意保暖_2019天气变冷的朋友圈说说 注意保暖的微信问候语...

1.天冷了&#xff0c;注意添加衣物&#xff0c;别着凉。可你还是着凉了。看你难受的样子&#xff0c;我的心&#xff0c;唉&#xff0c;只有一句话能表达&#xff1a;小样&#xff0c;你也有今天&#xff01;为了不让我得逞&#xff0c;你要注意身体哦。2.天气变凉要注意&#…

Fiddler抓包使用教程-QuickExec

转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/73468287 本文出自【赵彦军的博客】 在 Fiddler 中自带了一个 QuickExec 命令行&#xff0c;用户可以直接输入并快速执行脚本命令。 常见命令 help 打开官方的使用页面介绍&#xff0c;所有的命令…

自己整理的css3动画库,附下载链接

动画调用语法 animation: bounceIn 0.3s ease 0.2s 1 both; 按顺序解释参数&#xff1a; 动画名称 如&#xff1a;bounceIn 一周期所用时间 如&#xff1a;0.3s 速度曲线 如&#xff1a;ease 值 描述 linear 动画从头到尾的速度是相同的。 ease 默认。动画以低速开始&#xff0…

带有Spring的REST的ETag

1.概述 本文将重点介绍ETags-Spring支持&#xff0c;RESTful API的集成测试以及带有curl的使用场景。 这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web服务的系列文章的第9篇。 REST with Spring系列&#xff1a; 第1部分 – 使用Spring…

html5与css3都要学吗,前端要学css3吗?

前端要学css3&#xff1b;HTML5、CSS3是前端工程师必须要学会。现在移动端的兴起&#xff0c;导致web前端开发的技术逐变向css3和html5转变&#xff0c;所以css3一定要学。CSS3是CSS(层叠样式表)技术的升级版本&#xff0c;于1999年开始制订&#xff0c;2001年5月23日W3C完成了…

PHP中cookie和session的区别

1、cookie数据存放在客户的浏览器上&#xff0c;session数据放在服务器上。 2、cookie不是很安全&#xff0c;别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。 3、session会在一定时间内保存在服务器上。当访问增多&#xff0c;会比较占用你服务器…

ubuntu下anaconda3+pygame

有是很无语的地方&#xff0c;网上教程一堆&#xff0c;又是要下载什么包&#xff0c;然后又是什么依赖乱七八糟的整一堆。都不知道怎么想的 试了 sudo apt-get install python-pygame 这个是行不通的&#xff01;&#xff01;&#xff01;根本没有任何卵用 害我捯饬了半天&am…