问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

css控制元素垂直居中的几种方法

发布网友 发布时间:2022-04-28 12:04

我来回答

2个回答

懂视网 时间:2022-04-28 16:26

网页CSS的垂直居中需求始终没有停过,而其困难度也始终没有让人轻松过,经过了每位开发先烈的研究后,据说CSS的垂直居中技巧已达到近十种之多,但始终鲜为人知,部分公司甚至将CSS的垂直居中技巧当成面试题,其重要性可见一斑,今天就带着大家了解一下CSS的垂直居中的多种方式吧。

1、Line-height

适用情景:单行文字垂直居中技巧

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

<div class="content">Lorem ipsam.</div>
.content{
 width: 400px;
 background: #ccc;
 line-height:100px;
 margin: auto;
}

2、Line-height + inline-block

适用情景:多对象的垂直居中技巧

既然可以使用第一种方式对行元素达成垂直居中的话,当然没有理由不能做到多行啊~但是你需要将多个元素或多行元素当成一个行元素来看待,所以我们必须要将这些数据多包一层,并将其设定为inline-block,并在该inline-block对象的外层对象使用inline-block来代替height的设置,如此便可以达到垂直居中的目的了,从使你的数据是包含了标题跟内容在内也可以正常的垂直居中了。

<div class="box box2">
 <div class="content">
 立马来看Amos实际完成的 <a href="http://csscoke.com/2015/07/31/nth-child_rwd_album/">
 CSS3精美相册效果 </a>
 效果吧!別忘了拖拉一下窗口看看 RWD 效果喔! </div>
</div>
h2{
 text-align: center;
}
.box{
 width: 500px;
 border: 1px solid #f00;
 margin: auto;
 line-height: 200px;
 text-align: center;
}
.box2 .content{
 display: inline-block;
 height: auto;
 line-height:1;
 width: 400px;
 background: #ccc;
}

3、:before + inline-block

适用情景:多对象的CSS垂直居中技巧

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

<h2>3.:before + inline-block</h2>
<div class="box box3">
 <div class="content">
 立马来看Amos实际完成的 <a href="http://csscoke.com/2015/07/31/nth-child_rwd_album/">
 CSS3精美相册效果 </a>
 效果吧!別忘了拖拉一下窗口看看 RWD 效果喔! </div>
</div>
h2{
 text-align: center;
}
.box{
 width: 500px;
 height: 250px;
 border: 1px solid #f00;
 margin: auto;
 text-align: center;
}
.box::before{
 content:'';
 display: inline-block;
 height: 100%;
 width: 0;
 vertical-align: middle;
}
.box .content{
 width: 400px;
 background: #ccc;
 display: inline-block;
 vertical-align: middle;
}

4、absolute + margin 负值

适用情景:多行文字的垂直居中技巧

谁说绝对定位要少用?Amos认为没有少用多用的问题,重点在于你是否有妥善运用才是重点,绝对定位在这个例子中会设置top:50%来抓取空间高度的50%,接着在将居中元素的margin-top设定为负一半的高度,这样就能让元素居中了,此方法可是自古以来流传多年的居中方式呢?

<h2>4.absolute + margin 負值</h2>
<div class="box box4">
 <div class="content">
 立马来看Amos实际完成的 <a href="http://csscoke.com/2015/07/31/nth-child_rwd_album/">
 CSS3精美相册效果 </a>
 效果吧!別忘了拖拉一下窗口看看 RWD 效果喔! </div>
</div>
h2{
 text-align: center;
}
.box{
 width: 500px;
 height: 250px;
 border: 1px solid #f00;
 margin: auto;
 position: relative;
}
.box4 .content{
 width: 400px;
 background: #ccc;
 height: 70px;
 position: absolute;
 top:50%;
 left: 50%;
 margin-left: -200px;
 margin-top: -35px;
}

5、absolute + margin auto

适用情景:多行文字的垂直居中技巧

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

<h2>5.absolute + translate(-50%, -50%)</h2>
<div class="box box5">
 <div class="content">
 立马来看Amos实际完成的 <a href="http://csscoke.com/2015/07/31/nth-child_rwd_album/">
 CSS3精美相册效果 </a>
 效果吧!別忘了拖拉一下窗口看看 RWD 效果喔! </div>
</div>
h2{
 text-align: center;
}
.box{
 width: 500px;
 height: 250px;
 border: 1px solid #f00;
 margin: auto;
 position: relative;
}
.content{
 width: 400px;
 background: #ccc;
 height: 70px;
 position: absolute;
 top: 0;
 right: 0;
 bottom: 0;
 left: 0;
 margin: auto;
}

6、Display:table-cell

适用情景:多行文字的垂直居中技巧

这一招我想有点年纪的开发者应该都有看过,当然像我这么嫩的开发者当然是第一次看到啦,这一招的原理在于使用 CSS display属性将div设置成表格的单元格,这样就能利用支持存储单元格对齐的vertical-align属性来将信息垂直居中

<h2>19.display: table-cell</h2>
<div class="box box19">
 <div class="content">
 立马来看Amos实际完成的 <a href="http://csscoke.com/2015/07/31/nth-child_rwd_album/">
 CSS3精美相册效果 </a>
 效果吧!別忘了拖拉一下窗口看看 RWD 效果喔! </div>
</div>
h2{
 text-align: center;
}
.box{
 width: 500px;
 height: 250px;
 border: 1px solid #f00;
 margin: auto;
 text-align: center;
 display: table-cell;
 vertical-align: middle;
}
.content{
 width: 400px;
 background: #ccc;
 margin: auto;
}

7、padding

适用情景:多行文字的垂直居中技巧

什么!这也算垂直居中技巧,连我奶奶都知道这方式吧

对的,这的确也算是一种垂直居中的方式,不可讳言的这方式真的是简单过头了,以至于有些开发者认为这种方式都不能算是一种垂直居中的技巧,但同样的你无法反驳的是,我的数据的确垂直居中啦,好啦,就当我硬凹吧,你说的对,好吧

<h2>22.padding</h2>
<div class="box box22">
 <div class="content">
 立马来看Amos实际完成的 <a href="http://csscoke.com/2015/07/31/nth-child_rwd_album/">
 CSS3精美相册效果 </a>
 效果吧!別忘了拖拉一下窗口看看 RWD 效果喔! </div>
</div>
h2{
 text-align: center;
}
.box{
 width: 500px;
 border: 1px solid #f00;
 margin: auto;
 height: auto;
 padding: 50px 0;
}
.content{
 width: 400px;
 background: #ccc;
 margin: auto;
}

总结:以上给大家介绍了7种CSS垂直居中技巧,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对PHP中文网的支持!

热心网友 时间:2022-04-28 13:34

css:margin,position配合right,left,还有vertical-align,如果字体,配合line-height,但是具体情况,需要具体调整参数,
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 小程序微信多开的方法有谁知道?想了解。 微信小程序还可以同时开好几家店,怎么做到的 小程序微信多开简单不?听一听各位的介绍。 一个多开微信小程序游戏怎么多开账号 品质好的比熊具备什么条件 成年比熊犬一般多重? 比熊4个月的标准体重 比熊可以长到多大 两个月比熊一般多少斤 比熊成犬标准体重是多少 柠檬视频为什么不能全屏 诺基亚手机我的助理里有一个柠檬视频,怎么删除? 柠檬视频国家限制吗? 苹果手机怎么删掉柠檬视频 抖音百货刚开始如何直播 美团商家怎样取消会员红包活动 CSS2+DIV问题,DIV背景是否可以用三张图片拼合? 苹果的ID密码彻底找不回来了怎么办?我想注销,结果发下需要关闭查找我的IPHONE,还是需要密码,该怎么办 注销苹果id需要密码吗? 苹果平板注销id时需要密码,但又忘记了密码怎么办 苹果手机上的企业级信任用了一次之后就找不到了。 苹果x ios13.1有设备管理,但是没有描述文件,企业app无法信任安装,求解决! 13pro没有企业qq 我的苹果手机设置通用里怎么没有描述文件呢 为什么 苹果系统的信任不见了呢 邮政app个人征信下载后保存在哪里 【邮储银行】您申请的【邮你贷】已审批通过,贷款金额56000元,怎么在中邮钱包APP领呢 邮政app有个贷款。意向申请期限是什么意思 css实现文字垂直居中的代码第1/2页 电话号码变更通知单怎么写啊? 电话号码变更通知单怎么写? 我想变更短信提醒的电话号码 银行卡现在不在身上 带着身份证可以办理吗?卡密码也忘了 改号通知是什么? 电话号码怎么变更通知短信? 怎么实现CSS垂直居中呢?? 微信怎么开情侣位置 大众新朗逸1.6l玻璃水怎么喷出来? 朗逸2015款玻璃水怎么放出来 朗逸如何更换玻璃水 大众新朗逸1.6l玻璃水怎么喷出来