zoukankan      html  css  js  c++  java
  • CSS line-height应用

    一、固定高度的容器,单行文本垂直居中

    代码如下:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title>单行文本垂直居中</title>
     6         <style>
     7         div {
     8             width:200px;
     9             height:80px;
    10             background-color:cyan;
    11             line-height:80px; 
    12         }
    13         </style>
    14     </head>
    15     <body>
    16         <div>
    17             <p>单行文本垂直居中</p>
    18         </div>
    19     </body>
    20 </html>
    View Code

    页面效果:

    二、固定高度的容器,图像水平垂直居中

    代码如下:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title>图像水平垂直居中</title>
     6         <style>
     7             div {
     8                 width:350px;
     9                 height:200px;
    10                 background-color: cyan;
    11                 text-align: center;
    12                 line-height: 200px;
    13             }
    14             
    15             img {
    16                 vertical-align: middle;
    17             }
    18         </style>
    19     </head>
    20     <body>
    21         <div>
    22             <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" 
    23             alt="A picture" style="175px;height:100px" />
    24         </div>
    25     </body>
    26 </html>
    View Code

    页面效果:

    其实现原理,我们可以有两种方式解读。

    第一种方式,先让隐藏文本节点垂直居中,然后图像与它垂直居中对齐。

    (关于“隐藏文本节点”这个概念,出自张旭鑫大大,感兴趣的朋友可以去查看作者的文章;本博下一篇博文“CSS line-height与vertical-align:baseline”中也有相关说明。)

    下面来看这段代码:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title>图像水平垂直居中</title>
     6         <style>
     7             div {
     8                 width:350px;
     9                 height:200px;
    10                 background-color: cyan;
    11                 text-align: center;
    12                 line-height: 200px;
    13             }
    14             
    15             span {
    16                 background-color: red;
    17             }
    18         </style>
    19     </head>
    20     <body>
    21         <div>
    22             <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" 
    23             alt="A picture" style="175px;height:100px" />
    24             <span>xxx</span>
    25         </div>
    26     </body>
    27 </html>
    View Code

    其页面效果为:

    我们知道<img>元素后面有一个隐藏文本节点,在这里,我们将它显现出来,xxx;

    根据div {height:200px; line-height:200px;} 的设置,xxx作为div中的单行文本被垂直居中了;

    此时vertical-align为默认值baseline,所以图像的底边与文本的基线对齐。

    如果我们进一步设置img {vertical-align:middle;},就能得到图像垂直居中;如图:

    然后我们在html中删掉帮助我们理解的本来是隐藏的 xxx ,就能得到图像水平垂直居中的结果。

    第二种方式,先让图像与隐藏文本节点垂直居中对齐,再逐渐扩大行高,由行高撑开隐藏文本的高度,直到行高等于容器的高度,实现垂直居中。

    请看如下代码:

     1 <!DOCTYPE html>
     2  <html>
     3      <head>
     4          <meta charset="utf-8">
     5          <title>图像水平垂直居中</title>
     6          <style>
     7              div {
     8                  width:350px;
     9                  height:200px;
    10                  line-height: normal;
    11                  background-color: cyan;
    12                  text-align: center;
    13              }
    14 
    15              img {
    16                  vertical-align:middle;
    17              }
    18 
    19              span {
    20                  display: inline-block;
    21                  background-color: red;
    22              }
    23          </style>
    24      </head>
    25      <body>
    26          <div>
    27              <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" alt="A picture" style="175px;height:100px" />
    28              <span>xxx</span>
    29          </div>
    30      </body>
    31  </html>
    View Code

    其初始页面效果:

    上图为line-height:normal时的页面效果,下面我们逐渐增大line-height的值,来看看页面的变化。

    (我们将span元素设置为display:inline-block,这样就能直观地看到line-height的变化过程。)

    当line-height的值为80px时,其页面效果:

    因为图像的height值为100px;所以当line-height的值小于100px时,图像是不会移动的。

    当line-height的值为150px时,其页面效果:

    当line-height的值为200px时,其页面效果:

    此时line-height与height的值相等,这就是我们想要的效果。

    同时,这也是line-height等于height时单行文本能够垂直居中的直观体现。

    不过我们还可以继续增加line-height的值,看看有什么变化。

    当line-height的值为400px时,其页面效果:

    由于容器的高度是200px,而我们的文本行高是400px;从图像上看出,以xxx内容区的中点为界,上下的高度都是200px。

    也就是说,行高被内容区的中点均分

    从这个角度来看待行高,就很容易理解单行文本有行高

    这也就能解释为什么height与line-height相等时文本会垂直居中;比如height为200px,line-height为200px,因为行高被内容区的中点均分,以内容区中点为界,上面100px,下面100px,文本自然就在容器的中间。

    但是要注意,只是文本内容区垂直居中了,内容区的中点与文本的中点并不是一个点,文本只是近似垂直居中。

    而vertical-align:middle,只是让图像的中点与文本的中点对齐,所以,图像也只是近似居中。

    那么,怎么才能做到图像完美垂直居中呢?

    如果只有图像,没有文本,设置font-size值为0,内容区的中点与文本的中点重合在一起,自然就能完美垂直居中。

    如果既有图像,又有文本,把图像和文本都设置vertical-align:middle,让它们相互居中对齐,图像的中点就会与内容区的中点对齐,从而完美垂直居中。

    然而,文本该怎么完美垂直居中呢?我也不知道。。。

    三、高度不固定的容器,图像水平垂直居中

    根据第二种解释,在高度不固定的容器中,让图像与隐藏文本节点垂直居中对齐,再逐渐扩大行高,由行高撑开隐藏文本的高度,随着行高的增加,当行高大于图像的高度时,就能实现图像在不定高容器中的垂直居中。

    代码如下:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title>图像水平垂直居中</title>
     6         <style>
     7             div {
     8                 background-color: cyan;
     9                 text-align: center;
    10                 line-height: normal;
    11             }
    12             
    13             img {
    14                 vertical-align:middle;
    15             }
    16         </style>
    17     </head>
    18     <body>
    19         <div>
    20             <img src="http://a.hiphotos.baidu.com/zhidao/pic/item/72f082025aafa40fa38bfc55a964034f79f019ec.jpg" 
    21             alt="A picture" style="175px;height:100px">
    22         </div>
    23     </body>
    24 </html>
    View Code

    页面效果:

    然后我们改变line-height的值为150px,由隐藏文本节点撑开父容器的高度,得到如下效果:

    四、多行文本水平垂直居中

    代码如下:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="utf-8">
     5         <title>多行文本水平垂直居中</title>
     6         <style>
     7             div.box {
     8                 width:500px;
     9                 height:300px;
    10                 background-color: cyan;
    11                 text-align: center;
    12                 line-height: 300px;
    13             }
    14 
    15             div.container {
    16                 display:inline-block;
    17                 vertical-align: middle;
    18                 line-height: 1.5;
    19                 width: 380px;
    20                 text-align: left;
    21             }
    22         </style>
    23     </head>
    24     <body>
    25         <div class="box">
    26             <div class="container">
    27                 <ul>
    28                     <li>多行文本水平垂直居中的原理与图像一样;</li>
    29                     <li>将文本用一个容器封装起来,把它当成图像看待;</li>
    30                     <li>设置display属性值为inline-block;</li>
    31                     <li>设置line-height属性值;</li>
    32                     <li>设置width属性值;</li>
    33                     <li>设置text-align属性值。</li>
    34                 </ul>
    35             </div>
    36         </div>
    37     </body>
    38 </html>
    View Code

    页面效果:

    总结:

    关于垂直居中,关键是让容器的height值与line-height值相等!

  • 相关阅读:
    有赞移动Crash平台建设
    软件测试创新之路
    手把手教你用Python实现智能推荐算法
    接口测试--参数实现MD5加密签名规则
    重置一发LCT模板
    LOJ #2131. 「NOI2015」寿司晚宴
    LOJ #3119「CTS2019 | CTSC2019」随机立方体 (容斥)
    2019牛客暑期多校训练营(第九场)
    20190815模拟赛
    zhengrui集训笔记2
  • 原文地址:https://www.cnblogs.com/cc156676/p/5674583.html
Copyright © 2011-2022 走看看