使div垂直居中的方法,div中的div怎么垂直居中

http://www.itjxue.com  2023-01-22 10:00  来源:未知  点击次数: 

div垂直居中的几种方式

垂直居中方式总结起来有两种。

第一种:已知容器和内容元素宽度高度情况下,根据具体的定位不同,用margin或者left,top,righ,bottom等方式来居中。

第二种:不知道容器和自身宽度高度情况。用弹性容器布局来实现完美的居中。

百度知道不支持代码,所以不能用实际案例加以说明,要怪就怪百度好了。

如何让div垂直居中(23种方法总结)

开篇序言:之前在华南理工大学计算机研究所面试,被一个老师抓着这个问题问了一下午 当时回答的很窘迫,大概只说出七八种 后面发现也有小伙伴遇到过这个面试题 所以今日来份总结

绝对定位在这个例子中会设置top:50%来抓取空间高度的50%,接着在将居中元素的margin-top设定为负一半的高度,这样就能让元素居中了,这种方式比较常见

又一个绝对定位的垂直居中的方案,这个方式比较特别一点,当元素设置为绝对定位后,假设它是抓不到整体可运用的空间范围,所以margin:auto会失效,但当你设置了top:0;bottom:0;时,绝对定位元素就抓到了可运用的空间了,这时你的margin:auto就生效了(神奇吧),如果你的绝对定位元素需要水平居中于父层,那你同样可以设定left:0;right:0;来让绝对定位元素取得空间可运用范围,再让marign-left与margin-right设定为auto即可居中。但此方式的缺点是你的定位元素必须有固定的宽高(百分比也算)才能正常居中。

我们用绝对定位时的top与right设置元素的上方跟左方各自设为50%,再利用translate(-50%,-50%)位移居中元素自身宽与高的50%就能达成居中的目的(疑惑点:再手机端ios中这个不太管用[微信公众号平台])

设定父层display:flex以及设定次轴(cross axis)属性align-items:center ,这个方式的优点是此层不需要设定高度即可自动居中

Flex有多种方式可以让你把数据居中,适用Flex-grow的延展特性来达成,这个例子中Amos适用了flex-direction:column直式排法,搭配:before伪元素适用flex-grow伸展值能够取得剩下所有空间的特性,把它设定成一半的剩余空间就能做到把内容数据准确的推到垂直中间位置,算是个传统技法的延伸方式。

继续用Flex来居中,由于Flex元素对空间解读的特殊性,我们只要在父层元素设定display:flex,接着在需要垂直居中的元素上设定margin:auto,即可自动居中

对flex次轴cross axis 的个别对齐方式只要对单一子层元素设定align-self:center就能达成垂直居中的目的

它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。

align-items属性设置单元格内容的垂直位置(上中下)。align-items不仅是Flex可用,连CSS Grid也拥有此属性可使用,但在Flex中align-items是针对次轴cross axis作对齐,而在CSS Grid中则是针对Y轴做对齐。

CSS Grid的align-content跟Flex的align-content有点差异,CSS Grid对于空间的解释会跟Flex有一些些的落差,所以导致align-content在Flex中仅能针对多行元素起作用,但在Grid中就没这个问题,所以我们可以很开心的使用align-content来对子元素做垂直居中

基本上就是对grid Y轴的个别对齐方式,只要对单一子层元素设置为align-self:center就能达成垂直居中

place-items这属性不知道有多少人用过,此属性是align-items与justify-items的缩写,简单的说就是水平与垂直的对齐方式,想当然的,设定center就能居中

place-content这属性有多少人用过,此属性是align-content与justify-content的缩写,简单的说就是水平与垂直的对齐方式,想当然的,设置center就能居中

继续用Grid来居中,由于Grid元素对空间解读的特殊性,我们只要在父层元素设定display:grid,接着在需要垂直居中的元素上设置margin:auto即可自动居中。

display属性将div设置成表格的单元格,这样就能利用支持存储单元格对齐的vertical-align属性来将信息垂直居中(此方法是在然也教育公司学到的参考了后端人员的写法)

常见于单行文字的应用,像是按钮这一类对象,或者是下拉框、导航此类元素最常见到的方式了。此方式的原理是在于将单行文字的行高设定后,文字会位于行高的垂直中间位置,利用此原理就能轻松达成垂直居中的需求

多行文本居中

:before 伪类元素搭配 inline-block 属性的写法应该是很传统的垂直居中的技巧了,此方式的好处在于子元素居中可以不需要特别设定高度,我们将利用:before伪类元素设定为100%高的inline-block,再搭配上将需要居中的子元素同样设置成inline-block性质后,就能使用vertical-align:middle来达到垂直居中的目的了,此方式在以往其实是个非常棒的垂直居中解决方案,唯独需要特别处理掉inline-block元素之间的4-5px空间这个小缺陷,但也很实用了。

在正常的状况下,align-content 仅能对次轴多行flex item做居中,但是当我今天子层元素不确定有多少个时,且有时可能会有单个的情况出现时,此技巧就能用到了(当然你也能有其他解法),既然是多行子元素才能用,那我们就为单个子组件多加两个兄弟吧,使用:before以及:after 来让子元素增加到多个,这样就能使用flex的align-content属性来居中

Cale是计算机英文单词calculator的缩写,这个由微软提出的css 方法,从此我们再也不用在那边绞尽脑汁的数学计算了,或是想办法用js来动态计算,我们可以很轻松的利用calc()这个方法,来将百分比及时且动态的计算出实际要的是什么高度,真可谓是划时代的一个方法啊,但这个方法需要注意的是大量使用的话,网页性能会是比较差的,所以请谨慎使用。

这个技巧是利用了top:50%的招式,让你的元素上方能产生固定百分比的距离,接着让要居中的元素本身使用tanslateY的百分比来达成垂直居中的需求,translate是一个很棒的属性,由于translate的百分比单位是利用元素自身的尺寸作为100%,这样让我们要利用元素自身宽高做事变得方便很多。

这个方式应该是比较少见到的有人使用的了,这个想法是被老友Paul所激发的,write-mode这个css属性的功能基本上跟垂直居中是八竿子打不着,它的用途是改变文字书写的方向从横变竖,且支持度从很早期的IE5就有支持了,但当时Amos很少使用,一来是网页多是横书较多,另外当时除了IE浏览器意外,其他浏览器的支持度都不是很好,也就很少使用了。

使用write-mode将一整个文字容器变成直书,接着将此容器利用text-align:center来达到垂直居中的目的,白话一点的解说就是,你把原本横排的文字变成竖排,所以原本横排用到的水平对齐方式,就变成了控制直排的中间了,原理就是这么简单。但要特别注意的是浏览器对此语法的支持度来说,需要拆开写法才行,不然某些浏览器的语法不同,可能会让你的网页在某些浏览器上看起来无效,这会是最需要注意到的

文末结尾: 暂时只能想到这么多了 其实也就几大类,margin grid布局 弹性布局flex,文本布局line-height和一些优点生僻calc,Write-mode,这23点只不过是把这些拆分成的,欢迎其他小伙伴补充以及期待在技术交流平台上看到其他更好的补充

文章参考资料有:前端开发公众号

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 阮一峰技术博客

怎么设置div中的内容垂直居中

有以下三种方法:

1、设置div的height和line-height值设置为相同的数值,只需要一个div即可。

2、设置父级div样式的display:table,并设置子div样式的display:table-cell、vertical-align:middle,此时需要一个父级div和一个子级div。

3、设置父级div样式为display:box、box-pack:center、box-orient:vertical,记得要在前面加上浏览器前缀,例如chrome浏览器为-webkit-box-pack:center、-webkit-box-orient:vertical,需要一个父级div和一个子级div。

如何让div中的内容垂直居中

以下是让div中的内容垂直居中的具体操作方法:

1、首先我们准备好一个空的html结构的文档。

2、接下来我们要准备的是准备一个div用来放内容了,这里为了显示特意给div设置了边框。

3、接下来我们就在div中添加内容,如下图所示,运行后你会发现内容偏向于左上角。

4、下面我们给div设置水平居中,如下图所示,并且设置行高为div的高度,你会发现它水平垂直居中了。

怎样让div的内容垂直居中显示

虽然Div布局已经基本上取代了表格布局,但表格布局和Div布局仍然各有千秋,互有长处。比如表格布局中的垂直居中就是Div布局的一大弱项,不过好在千变万化的CSS可以灵活运用,可以制作出准垂直居中效果,勉强过关。

要让div中的内容垂直居中,无非有以下几种方法,等我一一列举:

一、行高(line-height)法

如果要垂直居中的只有一行或几个文字,那它的制作最为简单,只要让文字的行高和容器的高度相同即可,比如:

p { height:30px; line-height:30px; width:100px; overflow:hidden; }

这段代码可以达到让文字在段落中垂直居中的效果。

二、内边距(padding)法

另一种方法和行高法很相似,它同样适合一行或几行文字垂直居中,原理就是利用padding将内容垂直居中,比如:

p { padding:30px; }

这段代码的效果和line-height法差不多。

三、模拟表格法

模拟表格法其实就是用CSS中对元素的声明让块元素像表格一样显示,用到的CSS属性有display、vertical-align等。 先看下面的Html代码:

div id="box" div id="content"居中显示/div /div

参照以上Html代码,让最外面名为box的Div呈表格样式显示,然后再让box中名为content的Div呈单元格显示,并利用vertical-align:middle让其垂直居中,这样就模拟出来和表格一样的显示方式,CSS代码如下:

#wrap

{ height:400px; display:table; } #content { vertical-align:middle;

display:table-cell; border:1px solid #FF0099; background:#000;

width:400px; }

但这种方法有一个弊端,由于IE浏览器对高度理解会产生错误,所以这种方法仅对Firefox有效,对IE无效,既然这样,我们就需要找出对IE的修正方法,于是有了另外一种方法。

四、定位法

顾名思义,定位法是利用CSS定位属性position对元素进行定位的方法,也属于模拟方法,不过它对IE的支持还是不错的。 它的Html代码为:

div id="box" div id="sub" div id="content"垂直居中/div /div /div

这段代码比上一种方法中多出了一个名为sub的Div,它的作用是用来定位,原理就是:首先让box出于相对定位,sub相对box出于相对定位,位于box垂直方向的50%,再让content中的真正内容出于sub垂直方向的-50%,从而制作出content在box中垂直居中的效果,它们的CSS代码如下:

#wrap

{ border:1px solid #000; background:#F00; width:400px; height:400px;

position:relative; } #subwrap { position:absolute; top:50%; } #content {

border:1px solid #000; position:relative; top:-50%; color:#FFF; }

这段代码无论是在IE中还是Firefox中,都能正常居中了

(责任编辑:IT教学网)

更多

推荐人物新闻文章