元素水平居中N种方法

元素主要分为块级元素和行内元素,所以对元素进行水平居中也分这两种情况来讨论。

一. 行内元素

常用行内元素为a/img/input/span 等,标签内的HTML文本也属于此类。对于此类情况,水平居中是通过给父元素设置 text-align:center来实现的。

这种方法可以让 inline/inline-block/inline-table/inline/flex 等类型的元素实现居中。

html结构:

<body>
  <div class="txtCenter">
    Hello World!!!
  </div>
</body>

css样式:

<style>
  div.txtCenter{
    text-align:center;
  }
</style>

二、块级元素

块级元素宽度固定
html部分:

<body>
    <div class="pagination">
        <ul>
          <li><a href="#">Prev</a></li>
          <li><a href="#">1</a></li>
          <li><a href="#">2</a></li>
          <li><a href="#">3</a></li>
          <li><a href="#">4</a></li>
          <li><a href="#">5</a></li>
          <li><a href="#">Next</a></li>
        </ul>
    </div>
</body>

css样式部分:

/* 分页容器上定义一个宽度,然后配合margin的左右值为“auto”实现 */

 .pagination{
    width: 293px;
    margin-left: auto;
    margin-right: auto;
}
.pagination li{
    line-height: 25px;
    list-style: none;
    display: inline-block;
    margin:0 5px;
}

.pagination a{
    display: block;
    color: #f2f2f2;
    padding:0 10px;
    border-radius: 2px;
    background:#2f3032;
    text-decoration: none;
}
.pagination a:hover{
    text-decoration: none;
    background: #c87100
} 

html部分:

<body>
    <div class="main">
        <h1>MAIN</h1>
    </div>
</body>

css样式部分:

*{
    padding:0;
    margin:0;
}
body{
    background: palevioletred;
}
/* 下面是第一种方法
div使用绝对布局,设置margin:auto;并设置top、left、right、bottom的值相等即可,不一定要都是0。 */
/* .main{
    text-align: center; 
    background-color: #fff;
    width: 300px;
    height: 350px;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin:auto;
} */

/* 下面是第二种方法
仍然是绝对布局,让left和top都是50%,这在水平方向上让div的最左与屏幕的最左相距50%,垂直方向上一样,所以再用transform向左(上)平移它自己宽度(高度)的50%,也就达到居中效果了*/
/* .main{
    text-align: center;
    background-color: #fff;
    border-radius: 20px;
    width: 300px;
    height: 350px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
} */

/* 下面是第三种方法
仍然是绝对布局,让left和top都是50%,这在水平方向上让div的最左与屏幕的最左相距50%,垂直方向上一样,所以再用calc()计算*/
.main{
    text-align: center;
    background-color: #fff;
    border-radius: 20px;
    width: 300px;
    height: 350px;
    position: absolute;
    top: calc(50% - 350px/2);
    left: calc(50% - 300px/2);
}

块级元素宽度不固定
html部分:

<body>
    <div class="pagination">
        <ul>
          <li><a href="#">Prev</a></li>
          <li><a href="#">1</a></li>
          <li><a href="#">2</a></li>
          <li><a href="#">3</a></li>
          <li><a href="#">4</a></li>
          <li><a href="#">5</a></li>
          <li><a href="#">Next</a></li>
        </ul>
    </div>
</body>

css样式部分:

* {
    padding: 0;
    margin: 0;
}

/* 下面是第二种方法:inline-block实现水平居中方法 */

/* .pagination{
    text-align: center;
}
.pagination li{
    line-height: 25px;
    list-style: none;
    display: inline-block;
    margin:0 5px;
}

.pagination a{
    display: block;
    color: #f2f2f2;
    padding:0 10px;
    border-radius: 2px;
    background:#2f3032;
    text-decoration: none;
}
.pagination a:hover{
    text-decoration: none;
    background: #c87100
} */

/* 关键点:子元素设置display:inline-block;父元素设置text-align:center;
缺点:使用了inline-block解决了水平居中的问题,但分页项与分页项由回车符带来了空白间距 */

/* 下面是第三种方法:浮动实现水平居中的方法 */

/* .pagination{
    width: 100%;
}
.pagination ul{
    position: relative;
    float: left;
    left:50%;
    
    clear: both;
    text-align: center;
}
.pagination li{
    position: relative;
    float: left;
    right:50%;
    line-height: 25px;
    list-style: none;
    margin:0 10px;
}

.pagination a{
    display: block;
    color: #f2f2f2;
    padding:0 10px;
    border-radius: 2px;
    background:#2f3032;
    text-decoration: none;
}
.pagination a:hover{
    text-decoration: none;
    background: #c87100
} */

/* 总结:使用了浮动配合position定位实现。
没有浮动的div是一个块元素,其默认的宽度就是100%,如果div设置了浮动之后,他的内容有多宽度就会撑开有多大的容器(除显式设置元素宽度值之外),这是我们实现让分页导航居中的关键所在。同时元素设置position:relative;它的定位是相对自己大小来定的,比如:left:50%;是相对其宽度的50%向左边移动。
缺点:实现原理较复杂
*/

/* 下面是第四种方法:绝对定位实现水平居中,这个方法无法自适应设备宽度 */

/* .pagination{
    position: relative;
   width: 100%;
}
.pagination ul{
    position: absolute;
     left: 50%;
}
.pagination li{
    position: relative;
    float: left;
    right:50%;
    line-height: 25px;
    list-style: none;
    margin:0 10px;
}

.pagination a{
    display: block;
    color: #f2f2f2;
    padding:0 10px;
    border-radius: 2px;
    background:#2f3032;
    text-decoration: none;
}
.pagination a:hover{
    text-decoration: none;
    background: #c87100
} */

/* 下面是第五种方法:CSS3的flex实现水平居中方法 ,CSS3的flex是一个很强大的功能,她能让我们的布局变得更加灵活与方便,唯一的就是目前浏览器的兼容性较差*/

/* .pagination{
    display: flex;
    justify-content:center;
}
.pagination li{
    float: left;
    line-height: 25px;
    list-style: none;
    margin:0 10px;
}

.pagination a{
    display: block;
    color: #f2f2f2;
    padding:0 10px;
    border-radius: 2px;
    background:#2f3032;
    text-decoration: none;
}
.pagination a:hover{
    text-decoration: none;
    background: #c87100
} */

/* 下面是第六种方法:CSS3的fit-content实现水平居中方法,“fit-content”是CSS中给“width”属性新加的一个属性值,他配合margin可以轻松的实现水平居中的效果*/

.pagination {
    width: fit-content;
    margin-left: auto;
    margin-right: auto;
}

.pagination li {
    float: left;
    line-height: 25px;
    list-style: none;
    margin: 0 10px;
}

.pagination a {
    display: block;
    color: #f2f2f2;
    padding: 0 10px;
    border-radius: 2px;
    background: #2f3032;
    text-decoration: none;
}

.pagination a:hover {
    text-decoration: none;
    background: #c87100
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值