我们在实际工作中常会遇到需要设置水平居中的场景,比如为了美观,文章的标题一般都是水平居中显示的。
这里我们又得分两种情况:行内元素 还是 块状元素 ,块状元素又分为定宽块状元素,以及不定宽块状元素 ;
1 . 行内元素居中
如果被设置的元素为文本 , 图片等行内元素时 , 水平居中就是通过给父元素设置 : text-align:center来实现的 ;
示例 :
html代码:
<body> <div class="txtCenter">我想要在父容器中水平居中显示。</div> </body>css代码:
<style> .txtCenter{ text-align:center; } </style>
2 . 块元素居中
对于块元素的居中 , 又可以分为定宽块元素和不定宽块元素两种情况 , 接下来我们来分别了解一下 :
⑴ . 定宽块元素居中
定宽块元素就是元素的width属性有固定值 , 满足定宽和块元素两个条件的元素可以通过设置左右margin值为'auto'来实现水平居中(上下margin值随意) ;
示例 :
html代码:
<body> <div>我是定宽块状元素,哈哈,我要水平居中显示。</div> </body>css代码:
<style> div{ border:1px solid red;/*为了显示居中效果明显为 div 设置了边框*/ width:200px;/*定宽*/ margin:20px auto;/* margin-left 与 margin-right 设置为 auto */ } </style>
⑵ . 不定宽块元素居中
在实际工作中我们会遇到需要为“不定宽度的块状元素”设置居中,比如网页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度来限制它的弹性。(不定宽块状元素:块状元素的宽度width不固定。)
① . 加入table标签
利用table标签的长度自适应性---即不定义其长度也不默认父元素body的长度(table其长度根据其内文本长度决定),因此可以看做一个定宽度块元素,然后再利用定宽度块状居中的margin的方法,使其水平居中。
第一步 :
为需要设置的居中的元素外面加入一个 table 标签 ( 包括 <tbody>、<tr>、<td> ) ;
第二步 :
为这个 table 设置“左右 margin 居中”(这个和定宽块状元素的方法一样)。
示例 :
html代码:
<div> <table> <tbody> <tr><td> <ul> <li>我是第一行文本</li> <li>我是第二行文本</li> <li>我是第三行文本</li> </ul> </td></tr> </tbody> </table> </div>css代码:
<style> table{ border:1px solid; margin:0 auto; } </style>
② . 设置 display: inline 与第一种类似,显示类型设为行内元素,进行不定宽元素的属性设置 ;
示例 :
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; } /* margin:0;padding:0(消除文本与div边框之间的间隙)*/ .container ul{ list-style:none; margin:0; padding:0; display:inline; } /* margin-right:8px(设置li文本之间的间隔)*/ .container li{ margin-right:8px; display:inline; } </style>
③ . 通过给父元素设置 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>
3 . 垂直居中
我们在实际工作中也会遇到需要设置垂直居中的场景,比如好多报纸的文章标题在左右一侧时,常常会设置为垂直居中,为了用户体验性好 ;
这里我们又得分两种情况:父元素高度确定的单行文本,以及父元素高度确定的多行文本 ;
⑴ . 父元素高度确定的单行文本
父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height 高度一致来实现的。(height: 该元素的高度,line-height: 顾名思义,行高(行间距),指在文本中,行与行之间的 基线间的距离 )。
示例 :
html代码:
<div class="container"> hi,imooc! </div>css代码:
<style> .container{ height:100px; line-height:100px; background:#999; } </style>
⑵ . 父元素高度确定的多行文本
父元素高度确定的多行文本、图片等的竖直居中的方法有两种:
① . 使用插入 table (包括tbody、tr、td)标签,同时设置 vertical-align:middle ;
css 中有一个用于竖直居中的属性 vertical-align,在父元素设置此样式时,会对inline-block类型的子元素都有用 ;
示例 :
html代码:
<body> <table><tbody><tr><td class="wrap"> <div> <p>看我是否可以居中。</p> </div> </td></tr></tbody></table> </body>css代码:
table td{height:500px;background:#ccc}
② . 在 chrome、firefox 及 IE8 以上的浏览器下可以设置块级元素的 display 为 table-cell(设置为表格单元显示),激活 vertical-align 属性,但注意 IE6、7 并不支持这个样式, 兼容性比较差 ;
示例 :
html代码:
<div class="container"> <div> <p>看我是否可以居中。</p> <p>看我是否可以居中。</p> <p>看我是否可以居中。</p> </div> </div>css代码:
<style> .container{ height:300px; background:#ccc; display:table-cell;/*IE8以上及Chrome、Firefox*/ vertical-align:middle;/*IE8以上及Chrome、Firefox*/ } </style>
特别注意 :
这种方法的好处是不用添加多余的无意义的标签,但缺点也很明显,它的兼容性不是很好,不兼容 IE6、7而且这样修改display的block变成了table-cell,破坏了原有的块状元素的性质 ;