CSS布局对齐方式--水平居中、垂直居中、水平垂直居中

    前言:在网页布局中,经常遇到需要使元素居中对齐的时候,居中对齐的方式有:水平居中、垂直居中和水平垂直居中。这次,借此回顾总结一下,并在此记录下相关内容。

一、水平居中:

    (1)行内元素的水平居中

            如果被设置的元素为文本、图片等行内元素时,在父元素中设置text-align:center实现行内元素水平居中,将子元素的设置为display:inline-block,使子元素变成行内元素;

<div class="parent" style="background-color: gray;">
    <div class="child" style="background-color: light-blue;">demo</div>
</div>
<style>
.parent {
    text-align: center;
}
.child {
    display: inline-block;
}
</style>

    (2)块状元素的水平居中(定宽)

        当被设置元素为定宽块级元素时用text-align:center;就不起作用了。可以通过设置“margin: 0 auto;”来实现居中的。

<div class="parent" style="background-color: gray;">
    <div class="child" style="background-color: lightblue;">demo</div>
</div>
.child {
    width: 200px;
    margin: 0 auto;
}

    (3)块状元素的水平居中(不定定宽)

        在实际工作中,我们会遇到需要为“不定宽度的块级元素”设置居中,如网页上的分页导航,因为分页的数量是不确定的,所以,不能通过设置宽度来限制它的弹性。

       可以直接给补丁款的块级元素设置text-align:center;来实现,也可以给父元素加text-align:center;来实现居中效果。

      当不定宽块级元素的宽度不要占一行时,可以设置display为inline类型或inline-block(设置为行内元素显示或行内块元素)。

<div class="container">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
    </ul>
</div>
.container {
    text-align: center;
    background: beige;
}
.container ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: inline-block;
}
.container li {
    margin-right: 8px;
    display: inline-block;
}

二、垂直居中

      和水平居中一样,垂直居中,首先需设定两个条件即父元素是盒子容器且高度已经设定。

    (1)子元素是行内元素,高度是由其内容撑开的。

            这种情况下,需要通过设定父元素的line-height为其高度来使得子元素垂直居中。

<div class="wrap line-height">
    <span class="span">111111</span>
</div>
.wrap {
    width: 200px;
    height: 300px;
    line-height: 300px;
    border: 2px solid #ccc;
}
.span {
    background: red;
}

  

    (2)子元素是块级元素但子元素高度没有设定,在这种情况下,实际上是不知道子元素的高度的,无法通过计算得到padding或margin来调整。

       可以通过给父元素设定display:table-cell;vertical-align:middle;来解决。

<div class="wrap">
    <div class="non-height">111111</div>
</div>
.wrap {
    width: 200px;
    height: 300px;
    border: 2px solid #ccc;
    display: table-cell;
    vertical-align: middle;
}
.non-height {
    background: green;
}

    (3)子元素是块级元素且高度已经设定

        计算子元素的margin-top或margin-bottom,计算方法为父(元素高度-子元素高度)/ 2;

<div class="wrap">
    <div class="div1">111111</div>
</div>
.wrap {
    width: 200px;
    height: 300px;
    border: 2px solid #ccc;
}
.div1 {
    width: 100px;
    height: 100px;
    margin-top: 100px;
    background: darkblue;
}

三、水平垂直居中

    (1)水平对齐+行高

            text-align + line-height实现单行文本水平垂直居中

<style>
    .test {
        text-align: center;
        line-height: 100px;
}
</style>
<div class="test" style="background-color: lightblue;width: 200px;"></div>

    (2)水平+垂直对齐

        ①text-align + vertical-align 在父元素设置text-align和vertical-align,并将父元素设置为table-cell元素,子元素设置为inline-block元素。

<style>
.parent {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
}
.child {
    display: inline-block;
}
</style>
<div class="parent" style="background-color: gray; width: 200px; height:100px;>
    <div class="child" style="background-color: lightblue;">测试文字</div>
</div>

        ②若子元素是图像,可不使用table-cell,而是其父元素用行高代替高度,且字体大小设为0。子元素本身设置vertical-align:middle;

<style>
.parent {
    text-align: center;
    line-height: 100px;
    font-size: 0;
}
.child {
    vertical-align: middle;
}
</style>
<div class="parent" style="background-color: gray; width: 200px;">
    <img class="child" src="images/1.png" width="50%" alt="test">
</div>

    (3)相对+绝对定位

        使用absolute,利用绝对定位元素的盒模型特性,在偏移属性为确定值的基础上,设置margin: auto;

<style>
.parent {
    position: relative;
}
.child {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    width: 80px;
    margin: auto;
}
</style>
<div class="parent" style="background-color: lightgray;width: 200px; height: 100px;>
    <div class="child" style="background-color: lightblue;">测试文字</div>
</div>

PS:01、补充《三》中的水平垂直居中的方式(2018/08/29)

     translate()函数可以在不知道自身宽高的情况下,利用它进行水平垂直居中。但是,有兼容性问题,支持IE9+的游览器。

使用translate函数,配合left,top属性,可以让目标元素始终保持水平垂直居中,当游览器窗口发生变化时,也能一直保持水平垂直居中。

<div class="wrap">
   不知道宽高,可以水平垂直居中
</div>
.wrap {
    padding: 10px;
    background: green;
    color: #fff;
    border-radius: 5px;
    position: absolute;
    top: 50%;
    left: 50%;  /*定位margin-left:50%的位置*/
    -webkit-transform: translate(-50%,-50%); /*Safari,Chrome*/
    -moz-transform: translate(-50%,-50%);  /*IE9+*/
    transform: translate(-50%,-50%); /*使元素本身向左移动宽度的一半*/
    /*transform使元素在当前位置分别往x轴,y轴正向平移自身宽度的一半距离。*/
}

02、补充《三》中的水平垂直居中的方式(2018/11/29)

       场景:使用背景图片属性,使图片在父元素的盒子中始终居中,但是,背景图片的尺寸大小不固定。

      关键:background-position:center center;(background-position:50% 50%;)属性。

<div class="index-imgBlock">
    <div class="index-image"></div>
</div>
.index-image {
    height: 268px;/*选取三张图片中最大高度的尺寸设定*/
    width: 100%;
    max-width: 484px; /*选取三张图片中的最大宽度的尺寸设定*/
    background: url(images/403.png);       /*403图片尺寸为484*206*/
    /*background: url(images/404.png);*/   /*403图片尺寸为428*268*/
    /*background: url(images/500.png);*/   /*500图片尺寸为475*236*/
    background-position: center center;
    border: 1px solid #333333;
}

 

background-position属性默认值为0% 0%,即背景图像的左上角与对象背景区域的左上角对齐。使用background-position:center center;/background-position:50% 50%;这样就可以使背景图像的中心,与背景区域的中心对齐,即背景图像位于对象的中央位置。

参考博客:CSS布局(六)对齐方式  点击打开链接  http://www.cnblogs.com/chaixiaozhi/p/8490725.html 

 版权声明:本文为博主原创文章,未经博主允许不得转载。
              
 

 

 

  • 32
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CSS水平垂直居中有以下几种方式:1.使用绝对定位和负边距;2.使用Flexbox布局;3.使用Grid布局;4.使用表格布局;5.使用绝对定位和transform;6.使用相对定位和margin;7.使用text-align属性。 ### 回答2: CSS中有多种方式可以实现水平垂直居中,以下是其中几种常见的方法: 1. 使用flexbox布局:将父元素的display属性设置为flex,同时使用align-items和justify-content属性将子元素垂直和水平居中。 2. 使用绝对定位和transform属性:将父元素的position属性设置为relative,子元素的position属性设置为absolute,并使用transform属性将子元素向中心偏移。 3. 使用绝对定位和负margin:将父元素的position属性设置为relative,子元素的position属性设置为absolute,并使用负margin将子元素向中心偏移。 4. 使用table和table-cell属性:将父元素的display属性设置为table,子元素的display属性设置为table-cell,并使用vertical-align和text-align属性将子元素垂直和水平居中。 这些方法中,flexbox布局是目前最常用和最方便的方式,它提供了更大的灵活性和更简洁的代码。但是其他方法在一些特殊场景下可能更适用。需要根据具体情况选择最合适的方式来实现水平垂直居中。 ### 回答3: CSS水平垂直居中有以下几种方式: 1. 使用flexbox布局:使用父容器设置display为flex,并使用align-items: center和justify-content: center属性来实现水平和垂直居中。 2. 使用绝对定位:使用绝对定位和transform属性实现水平垂直居中。需要将居中元素的left和top属性设置为50%,然后使用transform: translate(-50%, -50%)将元素向左上角偏移自身宽高的一半。 3. 使用表格布局:将居中元素放在一个表格中,并将表格的display属性设置为table,居中元素的display设为table-cell。然后使用vertical-align: middle属性实现垂直居中。 4. 使用文本对齐:通过设置居中元素的父容器display为table-cell,并使用text-align: center和vertical-align: middle属性实现水平和垂直居中。 5. 使用grid布局:使用grid布局的父容器设置为display为grid,并使用justify-items: center和align-items: center属性实现水平和垂直居中。 总结:以上是一些常见的CSS水平垂直居中的方法,每种方法适用于不同的场景和要求。可以根据具体的设计需求选择合适的方法来实现居中效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值