元素水平居中的实现

在网页实现中,经常会遇到水平居中的需求。例如要求一个标题水平居中,这时只需要设置css属性text-align:center即可。代码如下所示:

<div class="wrap">
        <h3>标题居中对齐</h3>
</div>
  .wrap{
     background: #808080;
     width: 200px;
     height: 100px;
     padding: 20px;
  }

.wrap h3{
     text-align: center;
     color: #12226a;
  }    

效果图如下:

如果是要求图片居中呢,同样可以使用text-align:center来实现,代码如下所示:

    <div class="wrap">
            <img alt="cat" src="../images/cat.png"/>
    </div>
    .wrap{
         background: #808080;
         width: 400px;
         height: 300px;
         padding: 20px;
         text-align: center;
     }

效果图如下:

文本和图片都是行内元素,它们都可以通过简单的设置包含元素的text-align属性来实现水平居中对齐。但对于块级元素,text-align属性就不再起作用了。如果块级元素的宽度确定的话,我们可以使用margin-left:auto和margin-right:auto来实现水平居中,代码如下所示:

      <div class="wrap">
            <div class="fixed-width-block"></div>
       </div>
            .wrap{
                background: #808080;
                width: 400px;
                height: 200px;
                padding: 20px;
            }

            .fixed-width-block{
                background: #0d4d72;
                width: 100px;
                height: 100px;
                margin-left: auto;
                margin-right: auto;
            }

效果图如下所示:

事实上,前端开发人员经常使用margin:0 auto的方法使页面相对于浏览器居中对齐。

上面我们讲到了不同类型的元素的居中对齐方法,这些方法都比较简单,只需要简单的设置相应的css属性就可以实现。现在,如果我们碰到了这样的一个需求,有一个分页模块,我们页数的列表是水平居中的,因为页数是不固定的,所以块级元素ul的宽度也是不确定的,无法使用margin-left:auto和margin-right:auto来实现。参考行内元素的对齐方法,我们可以将块元素设置成行内元素,然后再通过设置text-align属性将它居中对齐。代码如下所示:

       <div class="wrap">
            <ul class="auto-width-block">
                <li>1</li>
            </ul>
           <ul class="auto-width-block">
                <li>1</li>
                <li>2</li>
                <li>3</li>
            </ul>
           <ul class="auto-width-block">
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
            </ul>
       </div>
            .wrap{
                background: #808080;
                width: 400px;
                height: 200px;
                padding: 20px;
            }

            ul{
                padding: 0;
            }

            .auto-width-block{
                text-align: center;
            }
            .auto-width-block li{
                display: inline;
                color: YellowGreen;
            }

效果图如下所示:

这种方法可以实现不固定宽度的块元素的水平居中,但是由于将块元素改成了行内元素,而行内元素比起块元素缺少一些功能,在某些应用场景下,该方法并不适用。除了这种方法之外,还有一种方法就是通过定位的方式去实现,将父元素和子元素都设置成相对定位,然后父元素的left设置成50%,float设置成left,子元素的left设置成-50%,代码如下:

            .wrap{
                background: #808080;
                width: 400px;
                height: 200px;
                padding: 20px;
            }

            ul{
                padding: 0;
            }

            .auto-width-block{
                position: relative;
                left: 50%;
                float: left;
                clear: both;
            }

            .auto-width-block li{
                display: inline;
                color: YellowGreen;
                padding: 0 5px;
                position: relative;
                left: -50%;
            }

该方法保留了块级元素的属性,但是引入了相对定位,会带来一定的副作用。

除了以上的方法之外,还有一种方法就是继续利用margin-left和margin-right,那就是因为table元素,table元素的特别之处在于它本身不是块级元素,如果不给它设置宽度的话,它的宽度将由内部元素“撑起”。所以即使不设置它的宽度,我们仍然可以使用margin的方法来使其居中,不过这样做的缺点就是引入了无语义的标签table,代码如下所示:

       <div class="wrap">
           <table><tr><td>
                <ul class="auto-width-block">
                    <li>1</li>
                </ul>
            </td></tr></table>
           <table><tr><td>
               <ul class="auto-width-block">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                </ul>
            </td></tr></table>
            <table><tr><td>
                <ul class="auto-width-block">
                    <li>1</li>
                    <li>2</li>
                    <li>3</li>
                    <li>4</li>
                    <li>5</li>
                </ul>
            </td></tr></table>
       </div>
            .wrap{
                background: #808080;
                width: 400px;
                height: 200px;
                padding: 20px;
            }

            ul{
                padding: 0;
            }

            .wrap table{
                margin-left: auto;
                margin-right:auto;
            }

            .auto-width-block li{
                display: inline;
                color: YellowGreen;
            }

上面提到了三种方法都可以实现不固定宽度的块级元素的水平居中,且它们之间各有利弊,开发人员可以根据实际场景选择不同的方法去实现。

时间: 2024-12-20 14:01:26

元素水平居中的实现的相关文章

css让浮动元素水平居中

对于定宽的非浮动元素我们可以用 margin:0 auto; 进行水平居中. 对于不定宽的浮动元素我们也有一个常用的技巧解决它的水平居中问题.如下: HTML 代码: <div class="box"> <p>我是浮动的</p> <p>我也是居中的</p> </div> CSS 代码: .box{ float:left; position:relative; left:50%; } p{ float:left; p

网页元素居中攻略记_(1)元素水平居中

行内元素水平居中 方案 行内元素包裹在一个属性display为block的父层元素中,父块text-align:center即可实现 代码实现 index.html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>行内元素水平居中</title> <style type="text/css

六种实现元素水平居中

转载自:https://www.w3cplus.com/css/elements-horizontally-center-with-css.html 居中效果在CSS中很是普通的效果,平时大家所看到的居中效果主要分为三大类:水平居中.垂直居中和水平垂直居中.而其中水平居中相对于后两者来说要简单得多.早期总结了一下互联网上有关于水平垂直居中的几种实现方案,比如说<CSS制作水平垂直居中对齐>中介绍了八中实现水平垂直的方案,而在<CSS制作图片水平垂直居中>一文介绍了四种实现图片垂直居

元素水平居中的几个方法

1.行内元素的居中, 例如想设置文本.图片等行内元素水平居中时,可以通过父元素设置 text-align:center 来实现,即给需要设置的元素添加一个父元素的容器,然后设置这个父元素(容器)的text-align属性即可.方法简单,原理也很容易理解,需要注意的是只能针对行内元素: <!-- <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&g

如何让绝对定位的元素水平居中

如何让绝对定位的元素水平居中:本章节介绍一下如何让一个绝对定位的元素实现水平居中效果,希望能够给需要的朋友带来一定的帮助.如果一个块级元素没有采用绝对定位,那么使用margin:0px auto就可以实现此效果,但是对于采用绝对定位的元素并不适用,下面就介绍一下如何实现此效果,代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="au

css 使元素水平居中

css使元素水平居中 1.对于行内元素的水平居中 给父元素设置text-align:center <div style="text-align:center;">居中显示</div> 2.定宽块状元素水平居中 <div style="width:200px;margin:20px auto;";>居中显示</div> 注:对于以上情况可以灵活应用 可以将元素设置 display:inline ,将其变为行内元素,再按照

inline-block元素水平居中问题

今天做项目的时候碰到了不固定元素个数,需要水平居中的问题,原来的确定宽度下margin:0 auto等方法木有用了.想起来之前看过display:inline-block的文章, 果断用这个. 之前很少用这个属性..印象里麻烦比较多..好了不多说了,上代码. 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <titl

css如何让浮动元素水平居中

对于定宽的非浮动元素我们可以在CSS中用 margin:0 auto 进行水平居中,对于不定宽的浮动元素我们也有一个常用的技巧解决它的水平居中问题.解决水平居中问题有很多种方法,下面先给大家分享一下三种方法,希望能帮助到大家. 方法一: 1.HTML 部分: <div class="box"> <p>我是浮动的</p> <p>我也是居中的</p></div> 2.CSS 部分: .box{ float:left;

元素水平居中和垂直居中的几种简单方法

一.如何使元素在水平方向上居中 1. 使用text-align:center. 在父级元素的CSS样式设置text-align:center.把内部嵌套一个div把它当作文本来对待,不过这个方法有时候是不管用的. 2.在需要居中的元素设置margin:0 auto.     这句CSS的意思为:设置margin-left和margin-right为自动适应父级元素宽度.所以可以使元素水平居中,不过记得设置其width. 二.如何使元素在垂直方向上居中 1.使图片在垂直方向上居中. div{bac

css确定元素水平居中和垂直居中

---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当然是因为不同类别元素的性质不同.所以我们先来了解下html的元素类别. 一.HTML元素分类 1)内联(inline)元素: <a>--锚点 <abbr>--缩写 <acronym>--首字母缩写(HTML5不支持,请使用<abbr>代替) <b>-