CSS中实现块级元素⽔平居中的N种⽅法
CSS中实现块级元素⽔平居中的N种⽅法:
CSS中的居中可分为⽔平居中和垂直居中。
⽔平居中分为⾏内元素居中和块状元素居中两种情况,⽽块状元素⼜分为定宽块状元素居中和不定宽块状元素居中。
下⾯详细介绍这⼏种情况。
⼀、⽔平居中
1、⾏内元素居中
顾名思义,⾏内元素居中是只针对⾏内元素的,⽐如⽂本(text)、图⽚(img)、按钮等⾏内元素,
可通过给⽗元素设置 text-align:center 来实现。
另外,如果块状元素属性display 被设置为inline时,也是可以使⽤这种⽅法。
但有个⾸要条件是⼦元素必须没有被float影响,否则⼀切都是⽆⽤功。
<style>
.div1{
text-align: center;
}
</style>
<body>
<div class="div1">Hello world</div>
</body>
2、块状元素居中
(1)、定宽块状元素居中
满⾜定宽(块状元素的宽度width为固定值)和块状两个条件的元素可以通过设置“左右margin”值为“auto”来实现居中。
<style>
.div1{
width: 200px;
border: 1px solid red;
margin: 0 auto;
}
</style>
<body>
<div class="div1">Hello world</div>
</body>
(2)、不定宽块状元素居中
在实际⼯作中我们会遇到需要为“不定宽度的块状元素”设置居中,⽐如⽹页上的分页导航,因为分页的数量是不确定的,所以我们不能通过设置宽度来限制它的弹性。(不定宽块状元素:块状元素的宽度width不固定。)
有三种⽅法可以对不定宽块状元素进⾏居中:
⽅法1:
将要显⽰的元素加⼊到 table 标签当中,然后为 table 标签设置“左右margin”值为“auto”来实现居中; 或使⽤ display : table;然后设该元素“左右margin”值为“auto”来实现居中。后⾯的display:table; ⽅法会更简洁。
为什么加⼊table标签? 是利⽤table标签的长度⾃适应性—即不定义其长度也不默认⽗元素body的长度(table其长度根据其内⽂本长度决
</style>
<body>
<div>
<table>
<tbody>
<tr>
<td>
<ul>
<li>Hello world</li>
<li>Hello world</li>
</ul>
</td>
</tr>
</tbody>
</table>
</div>
</body>
或者:
<style>
.wrap{
background:#ccc;
display:table;
margin:0 auto;
}
</style>
<body>
<div class="wrap">
Hello world
</div>
</body>
⽅法2:
改变块级元素的 display 为 inline 类型(设置为 ⾏内元素 显⽰),然后使⽤ text-align:center 来实现居中效果。
这种⽅法相⽐第⼀种⽅法的优势是不⽤增加⽆语义标签,但也存在着⼀些问题:它将块状元素的 display 类型改为 inline,变成了⾏内元素,所以少了⼀些功能,⽐如设定长度值(变成inline-block就可以设置宽⾼)。
.container ul{
list-style: none;
margin: 0;
padding: 0;
/* 怎么这⼀句⽤不⽤都是⼀样效果的? */
display: inline;
}
</style>
<body>
<div class="container">
<ul>
<li>Hello world</li>
<li>Hello world</li>
</ul>
</div>
</body>
⽅法3:
通过给⽗元素设置 float,然后给⽗元素设置 position:relative 和 left:50%,⼦元素设置 position:relative 和 left: -50% 来实现⽔平居中。
<style>
.wrap{
float:left;
position:relative;
left:50%;
clear:both;
}
.wrap-center{
background:#ccc;
position:relative;
left:-50%;
}
</style>
<body>
<div class="wrap">
<div class="wrap-center">Hello world</div>
</div>
</body>
先设置⽗元素wrap清除浮动,然后左浮动。定位让wrap向右偏移50%。然后定义⼦元素相对于⽗元素
向左偏移50%。脱离⽗元素。加个边框就可以明⽩⼀些了。另外⽤绝对定位也是可以的。
⼆、垂直居中
垂直居中可分为⽗元素⾼度确定的单⾏⽂本,以及⽗元素⾼度确定的多⾏⽂本。
1、⽗元素⾼度确定的单⾏⽂本的竖直居中的⽅法是通过设置⽗元素的 height 和 line-height ⾼度⼀致来实现的。(height: 该元素的⾼
度,line-height: 顾名思义,⾏⾼,指在⽂本中,⾏与⾏之间的 基线间的距离 )。
margin:0;
height:100px;
line-height:100px;
background:#ccc;
}
</style>
<body>
<div class="wrap">
<h2>Hello world</h2>
</div>
</body>
2、⽗元素⾼度确定的多⾏⽂本
有两种⽅法:
⽅法1:
使⽤插⼊ table (包括tbody、tr、td)标签,同时设置 vertical-align:middle。
<style>
.wrap{
height:300px;
background:#ccc;
vertical-align:middle;  /* td 标签默认情况下就默认设置了 vertical-align 为 middle,可以不需要显式地设置 */    }
</style>
<body>
<table>
<tbody>
<tr>
<td class="wrap">
<div>
<p>Hello world</p>
<p>Hello world</p>
<p>Hello world</p>
</div>
</td>
</tr>
</tbody>
</table>
</body>
或者:
<style>
.
wrap{
background:#ccc;
display:table;
vertical-align:middle;
}
</style>
<body>
<div class="wrap">
<p>Hello world</p>
<p>Hello world</p>
<p>Hello world</p>
</div>
⽅法2:
设置块级元素的 display 为 table-cell(设置为表格单元显⽰),激活 vertical-align 属性。但这种⽅法兼容性⽐较差, IE6、7 并不⽀持这个样式。
<style>
css设置文字垂直居中
.wrap{
height:300px;
background:#ccc;
display:table-cell;/*IE8以上及Chrome、Firefox*/
vertical-align:middle;/*IE8以上及Chrome、Firefox*/
}
</style>
<body>
<div class="wrap">
<p>Hello world</p>
<p>Hello world</p>
<p>Hello world</p>
</div>
</body>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。