元素主要分为块级元素和行内元素,因此对元素进行水平居中也分这两种状况来讨论,另外块级元素的实现比较复杂,将分状况讨论。css
经常使用行内元素为a
/img
/input
/span
等,标签内的HTML文本也属于此类。对于此类状况,水平居中是经过给父元素设置 text-align:center
来实现的。
HTML结构:html
<body> <div class="txtCenter"> Hello World!!! </div> </body>
CSS样式:spa
<style> div.txtCenter{ text-align:center; } </style>
经常使用块级元素为div
/table
/ul
/dl
/form
/h1
/p
等。根据应用场景不一样又分为定宽块级与不定宽块级两种状况,分别讨论。code
知足**定宽**和**块状**两个条件的元素是能够经过设置**“左右margin
”值为“auto
”**来实现居中的。
HTML结构:orm
<body> <div> Hello World!!! </div> </body>
CSS样式:htm
<style> div{ border:1px solid red;/*为了显示居中效果明显为 div 设置了边框*/ width:500px;/*定宽*/ margin:20px auto;/* margin-left 与 margin-right 设置为 auto */ } </style>
咱们常常会遇到不定宽度块级元素的使用,如分页导航,由于分页的数目不定,因此不能用宽度限制住。此时对元素进行水平居中主要有三种方式:input
加入 table
标签it
设置 display;inline
方法io
设置 position:relative
和 left:50%;
table
table
标签第一步:为须要设置的居中的元素外面加入一个 table 标签 ( 包括 <tbody>
、<tr>
、<td>
)。
第二步:为这个 table
设置“左右 margin:auto
”(这个和定宽块状元素的方法同样)。
HTML结构:
<div> <table> <tbody> <tr><td> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </td></tr> </tbody> </table> </div>
CSS样式:
<style> table{ margin:0 auto; } ul{list-style:none;margin:0;padding:0;} li{float:left;display:inline;margin-right:8px;} </style>
**这种方法的缺点是增长了无语义的HTML标签,增长了嵌套深度
display;inline
方法改变块级元素的 dispaly
为 inline
类型,而后使用 text-align:center
来实现居中效果。
HTML结构:
<body> <div class="container"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </div> </body>
CSS样式:
<style> .container{ text-align:center; } .container ul{ list-style:none; margin:0; padding:0; display:inline; } .container li{ margin-right:8px; display:inline; } </style>
这种方法的缺点是将块级元素的display设置为inline,因而少了不少功能,好比盒子模型
position:relative
和 left:50%;
经过给父元素设置 float
,而后给父元素设置 position:relative
和 left:50%
,子元素设置 position:relative
和 left:-50%
来实现水平居中。
HTML结构:
<body> <div class="container"> <ul> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> </div> </body>
CSS样式:
<style> .container{ float:left; position:relative; left:50% } .container ul{ list-style:none; margin:0; padding:0; position:relative; left:-50%; } .container li{float:left;display:inline;margin-right:8px;} </style>
这种方法能够保留块状元素仍以 display:block
的形式显示,优势不添加无语议表标签,不增长嵌套深度,但它的缺点是设置了 position:relative
,带来了必定的反作用。
三种方式各有利弊,根据实际状况相应选用。