前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSS中关于元素居中的方法总结(超全)

CSS中关于元素居中的方法总结(超全)

作者头像
用户9914333
发布2022-07-21 19:32:51
2.2K0
发布2022-07-21 19:32:51
举报
文章被收录于专栏:bug收集bug收集

CSS中关于元素居中的方法

css中一个很重要的问题,就是关于元素的居中,包括水平居中,垂直居中,本文就是为大家总结了:css中对于行内元素与块级元素不同的居中方法.

行内元素

水平居中:

代码语言:javascript
复制
text-align:center;

垂直居中:

1. 单行文本

height 与line-height 的高度相同时,可以实现垂直居中

2. 多行文本

方法1:

代码语言:javascript
复制
vertical-align:middle;

注:vertical-align 作用单元格时,才生效,所以一般会结合dispaly:table-cell;

一起使用才有效果

示例:

代码语言:javascript
复制
p{
    border: 1px solid red;
    height: 100px;
    display:table-cell;
    vertical-align:middle;
}

方法2:

代码语言:javascript
复制
 <style>
     p{
        height: 200px;
        line-height: 200px;
        border: 1px solid red;
        font-size: 16px;
    }
    p span{
        display: inline-block;
        vertical-align: middle;
        line-height: 1;
    }
</style>
代码语言:javascript
复制
<p>
      <span> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa dignissimos earum eligendi iusto, nam qui quia quidem vel veritatis vitae.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa dignissimos earum eligendi iusto, nam qui quia quidem vel veritatis vitae.
          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa dignissimos earum eligendi iusto, nam qui quia quidem vel veritatis vitae.
      </span>
  </p>

样式重点分析:

1. 父级的标签,高度和行高一致

p{

height: 200px;

line-height: 200px;

border: 1px solid red;

font-size: 16px;

}

2. 子标签, 设置为行内块级元素,垂直居中,且单独设置行高

注:line-hight:1 ; 这里的1指与父级的字体大小相同,你可以可以直接写具体的px

p span{

display: inline-block;

vertical-align: middle;

line-height: 1;

}

块级元素

1. 水平居中

方法1:常规方法 - 定宽元素

代码语言:javascript
复制
html部分:
<div class="container">
  <div class="center"></div>
</container>
 
CSS部分:
.container{
  background: beige;
  height: 1000px;
}
/*居中*/
.center{
  width:300px;
  height:300px;
  margin:auto;
  background: aqua;
}

此方法缺点:内层元素必须设定(固定)宽度

方法2:不定宽元素 - 绝对定位

思路:

1.外层绝对定位,内层相对定位,外层的外层相对定位

2.外层左浮动,内层左浮动

3.外层右移50%,内层左移50%

代码:

代码语言:javascript
复制
样式部分:
<style>
    *{
        margin: 0;
        padding: 0;
    }
    ul li{
        list-style-type: none;
        border: 1px solid red;
    }
    .container{
        position: relative;
       /* 外层的外层相对定位 */
    }
    nav  ul:after{
        content: "";
        display: block;
        clear: both;
    }
    .pages3 {
        position: absolute;
       /*外层绝对定位*/
        float: left;
        left: 50%;
    }
    .pages3 li{
        float: left;
        position: relative;
        /*内层相对定位*/
        right: 50%;
    }
    .pages3 li:not(:first-child){
        margin-left:5px;
    }
</style>
html部分:
<header class="container">
    <nav>
        <ul class="pages3">
            <li>项目1</li>
            <li>项目2</li>
            <li>项目3</li>
        </ul>
    </nav>
</header>

分析:

此方法有left:50%, 在margin-left:负的宽度的一半,只是宽度不确定,

所以就采用了position:relative; , right:50%; 而right:50%,

其实就是向左移动宽度的一半,

这里的百分比是以父级的宽度计算的

2. 垂直居中

方法1:

设置父元素相对定位,子元素position: absolute;top: 50%;同时margin-top值为-(子元素高度的一半),因为设置top值时是相对于盒子顶部,所以想要居中还要往上移动半个盒子的高度才能实现。

IE版本都可以兼容

代码如下:

代码语言:javascript
复制
<style>
      .out{
        width: 500px;
        height: 500px;
        background-color: skyblue;  
        position: relative;      
      }
      .in{
        width: 100px;
        height: 100px;
        background-color: salmon;
        position: absolute;
        top: 50%;
        margin-top: -50px;
      }
</style>
html代码:
<div class="out">
    <div class="in"></div>
</div>

方法2:

和上一种方法原理差不多,都是利用相对定位和绝对定位,有点不同是子元素内加上了transform:translateY(-50%);和margin-top: -50px;

代码如下:

代码语言:javascript
复制
<style>
      .out{
        width: 500px;
        height: 500px;
        background-color: skyblue;
        position: relative;
      }
      .in{
        width: 100px;
        height: 100px;
        background-color: salmon;
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
      }
</style>

方法3:

设置父元素为相对定位,子元素为绝对定位,同时设置子元素的top,bottom,left,right值为0,最后设置margin:auto;这能实现块元素的垂直+水平居中,看代码:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style>
      .out{
        width: 500px;
        height: 500px;
        background-color: skyblue;
        position: relative;
      }
      .in{
        width: 100px;
        height: 100px;
        background-color: salmon;
          position: absolute;
          top: 0;
          bottom: 0;
          left: 0;
          right: 0;
          margin: auto;
      }
</style>
  </head>
  <body>
    <div class="out">
      <div class="in"></div>
    </div>
  </body>
</html>

总结

还可以通过flex来实现,水平居中和垂直,因为比较简单本文就没有介绍.

参考文章:

https://www.cnblogs.com/goloving/p/7657544.html

https://blog.csdn.net/zhang_yu_ling/article/details/90272623

https://blog.csdn.net/Simon9124/article/details/78935788

—— E N D ——

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档