一:对于行内元素采用text-align:center;的方式
二:采用margin:0 auto;来实现水平居中显示
三:用table实现
四;块级的元素但是通过转换成行内元素来实现块级元素的水平居中显示
五:父子元素都采用相对定位,父元素left:50%;子元素left:-50%;相对自己的长度减回50%,这样实现向右偏移后拉回多的部分
六:采用CSS3的flexbox,display:flex;
七:用父元素的 display:relative;直接采用position:absolute;left:0;right:0;margin:auto来实现水平以居中
下面是讲解的具体的代码:
- <!DOCTYPE html>
- <!--
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
- -->
- <html>
- <head>
- <title>css的水平居中</title>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width">
- <style type="text/css">
- #page{
- 100%;
- color: white;
- }
- .he{
- 100%;
- height: 100px;
- background: #625050;
- text-align: center;
- line-height: 100px;
- }
- .bo{
- 100%;
- background: #6aa087;
- }
- .fo{
- height: 100px;
- background: #2f5d34;
- }
- .content{
- height: 100px;
- border: 2px solid #fff;
- }
- .content1{
- background: #66a05c;
- text-align: center;
- }
- .content2{
- background: #8a5841;
- text-align: center;
- }
- .content2Bo{
- height:50px;
- 60%;
- border: 2px solid red;
- line-height: 50px;
- margin: 0 auto;
- }
- .content3{
- background: #2f5d34;
- }
- table{
- margin: 0 auto;
- }
- .content4{
- background: #8a5841;
- text-align: center;
- }
- .contentBo4{
- display: inline;
- }
- ul li{
- list-style-type: none;
- }
- .content5{
- float: left;
- position: relative;
- left: 50%;
- }
- .contentBo5{
- position: relative;
- left: -50%;
- background: #231b40;
- }
- .content6{
- 100%;
- text-align: center;
- background: #9ca05c;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .content7{
- position: relative;
- }
- .contentBo7{
- position: absolute;
- left: 0;
- right: 0;
- 80%;
- border: 2px solid red;
- margin: 0 auto;
- text-align: center;
- }
- </style>
- </head>
- <body>
- <div id="page">
- <div class="he">
- <h1>下面是对元素水平居中对齐的几个例子以及说明</h1>
- </div>
- <div class="bo">
- <div class="content content1">
- 这是内容区一:实现对行内元素的水平居中显示 采用text-align:center;的方式。
- </div>
- <div class="content content2">
- <div class="content2Bo">
- 这是内容区二:红色区域部分采用margin:0 auto;来实现水平居中显示,当然要写好元素的宽度。
- </div>
- </div>
- <div class="content content3">
- <table><tbody><tr><td>
- 这是内容区三:用table实现。
- </td></tr></tbody></table>
- </div>
- <div class="content content4">
- <ul class="contentBo4">
- <li>这是第一行</li>
- <li>这是第二行</li>
- <li>这是内容区四:本来是contentBo4的块级的元素但是通过转换成行内元素来实现块级元素的水平居中显示。</li>
- </ul>
- </div>
- <div class="content5">
- <div class="content contentBo5">
- 这是内容区五:父子元素都采用相对定位,父元素left:50%;子元素left:-50%;相对自己的长度减回50%,这样实现向右偏移后拉回多的部分。
- </div>
- </div>
- <div class="content content6">
- 这是内容区六:采用css3的flexbox,display:flex;
- </div>
- <div class="content content7">
- <div class="contentBo7">
- 这是内容区七:用父元素的 display:relative;直接采用position:absolute;left:0;right:0;margin:auto来实现水平以居中。
- </div>
- </div>
- </div>
- <div class="fo">
- <pre> 总结下:其实实现水平居中只有一下几种思路:
- 1:对于最简单的行内元素的居中采用text-align:center;设置即可。
- 2:对于最普通的水平居中采用绝对定位后设置left:50%;后再采用各种方式去实现自身水平差的补回。
- 3:对于普通的元素对齐还可以采用绝对定位后left:0;right:0;加上元素的宽度,在此基础之上就可以采用margin:auto;实现水平对齐了。
- 4:用css3的Flexbox属性
- 5:在元素外嵌套table实现,但是这样会有很多层嵌套
- 6:marin:0 auto;方便的实现已知宽度的水平居中
- </pre>
- </div>
- </div>
- </body>
- </html>