实现CSS垂直居中的两种方法

本文介绍并演示了两种实现网页元素垂直居中的方法,包括利用行高定位和绝对定位,同时解释了每种方法的适用场景及局限性。通过实例代码展示如何将文字或元素精确地垂直居中于页面或容器内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   方法一:利用行高(line-height)定位

line-height通常是用于调节一段文字的行与行之间的距离,或者说两行文字之间的距离,如果行高是500px,那么每一行中的文字距离本行的顶部就是250px,如果将文字的行高设为500px,并且外面的容器的高度也为500px,同样可以实现垂直居中,但是用它来实现垂直居中,也是有缺点的,就是如果内容过多,文字就会跑到下一行,那么内容就不可能垂直居中了。

HTML代码:
  1. <h1>Hi, I'm<span>Vertically Aligned</span> Within the H1</h1>
复制代码

CSS代码:
  1. body {
  2.          margin: 0;
  3.          padding: 0;
  4.          background: #1d1d1d;
  5.          font-size: 10px;
  6.          font-family: Verdana, Arial, Helvetica, sans-serif;
  7. }
  8. h1 {
  9.          font: 3em Georgia, "Times New Roman", Times, serif;
  10.          color: #fff;
  11.          height: 500px;
  12.          line-height: 500px;
  13.          text-align:center;
  14.          border: 10px solid #999;
  15. }
  16. h1 span {
  17.          font-weight: bold;
  18.          font-size:1.5em;
  19.          color: #fff000;
  20. }
  21. p {
  22.          font-size: 1.3em;
  23.          color: #999;
  24. }
  25. strong {
  26.          color: #fff;
  27. }
复制代码




方法二:利用绝对定位


先来看看效果,查看演示
这个方法有个缺点我必须指出,就是外面的块状元素,必须指定高度,所以如果你在里面放动态的内容的话,后果会很糟糕滴~


HTML代码:
  1. <div class="vert">
  2.         <h1>Hi, I'm<span>Vertically Aligned</span></h1>
  3.         <p>Abigo sudo mara paulatim odio, accumsan luptatum nibh nibh refero metuo opes ut fatua. Acsi et fere similis <strong>Using</strong> augue <strong>absolute</strong> validus. Regula <strong>positioning</strong> eu jus vel, indoles fere iaceo ea similis. Velit praemitto nulla vel luctus secundum. </p>
  4. </div>
复制代码

CSS代码:

这种用绝对定位来实现的垂直居中,取决与元素的宽度和高度,你可以用下面这两个公式来计算元素的左边距和上边距

元素的宽度/2 = 负左边距
元素的高度/2 = 负上边距

在这个例子中,我们就是这么计算的
  1. .vert {
  2.         width: 580px;
  3.         height: 190px;
  4.         position: absolute;
  5.         top: 50%;
  6.         left: 50%;
  7.         margin: -95px 0 0 -290px;
  8. }
复制代码

完整CSS代码
  1. body {
  2.         margin: 0;
  3.         padding: 0;
  4.         background: #1d1d1d;
  5.         font-size: 10px;
  6.         font-family: Verdana, Arial, Helvetica, sans-serif;
  7. }
  8. h1 {
  9.         font: 4em Georgia, "Times New Roman", Times, serif;
  10.         color: #fff;
  11.         border-bottom: 5px dotted #999;
  12.         margin: 0;
  13.         padding: 0 0 10px;
  14. }
  15. h1 span {
  16.         font-weight: bold;
  17.         display:block;
  18.         font-size:1.5em;
  19.         color: #fff000;
  20. }
  21. p {
  22.         font-size: 1.3em;
  23.         color: #999;
  24. }
  25. strong {
  26.         color: #fff;
  27. }
  28. .vert {
  29.         width: 580px;
  30.         height: 190px;
  31.         position: absolute;
  32.         top: 50%;
  33.         left: 50%;
  34.         margin: -95px 0 0 -290px;
  35. }
复制代码




问题延伸


如果元素的外面还有一个父级元素,如果才能让元素垂直居中于父级元素内部?比如下面的代码,多了一个父级元素
  1. <div class="container">
  2.          <div class="vert">
  3.           <h1>Hi, I'm Nested &<span>Vertically Aligned</span></h1>
  4.           <p>Abigo sudo mara paulatim odio, accumsan luptatum nibh nibh refero metuo opes ut fatua. Acsi et fere similis <strong>Using</strong> augue <strong>absolute</strong> validus. Regula <strong>positioning</strong> eu jus vel, indoles fere iaceo ea similis. Velit praemitto nulla vel luctus secundum. </p>
  5.          </div>
  6. </div>
这时候,就必须在定义父级元素的CSS代码中加入position: relative;才能够使内部元素垂直居中于父级内部,代码如下:
  1. .container {
  2.         position: relative;
  3.         height: 500px;
  4.         width: 800px;
  5.         border: 10px solid #999;
  6.         background: #000;
  7.         margin: 20px;
  8. }

 

原文地址:http://www.w3cfuns.com/forum.php?mod=viewthread&tid=453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值