发现之前写过的又忘了。
之前在百度前端学院的时候写过居中。【任务】 【自己写的例子】 【代码】
水平居中
非块状元素
居中可以直接父亲节点设置text-align,使用的前提是父节点是block,子元素是inline,类似h1里面的文本这种情况也算。
//css
.parent{
text-align:center;
}
h1{
text-align:center;
}
//html
<div class="parent">
<span class="child">center</span>
</div>
<h1>title</h1>
不知道为什么移动端不能直接用 text-align mdn
当被设置元素为块状元素时用 text-align:center 就不起作用了,这时也分两种情况:定宽块状元素和不定宽块状元素。
定宽块状元素
满足定宽和块状两个条件的元素是可以通过设置“左右margin”值为“auto”来实现居中的,这种情况下,元素不能是浮动的。我们来看个例子就是设置 div 这个块状元素水平居中:
//css
.child{
margin-left:auto;
margin-right:auto;
}
//或者
//css
.child{
margin: 0 auto;
}
//html
<div class="parent">
<div>center</div>
</div>
还有一种是:
//css
.child{
width:@width;
left:50%;
position:relative;
margin-left:@width / 2;
}
.parent{
position:relative;
}
//html
<div class="parent">
<div class="child">center</div>
</div>
不定宽度的块状元素
有三种方法居中(这三种方法目前使用的都比多):
- 加入 table 标签
- 设置 display;inline 方法
- 设置 position:relative 和 left:50%;
方法三:通过给父元素设置 float,然后给父元素设置 position:relative 和 left:50%,子元素设置 position:relative 和 left:-50% 来实现水平居中。
代码如下:
<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>
垂直居中
line-height
父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height 高度一致来实现的。如下代码:
<div class="container">
hi!
</div>
//css代码:
<style>
.container{
height:100px;
line-height:100px;
}
</style>
flex的方式
.parent{
display: flex;
align-items: center;
}
垂直居中
#parent {
display: table;
}
#child {
display: table-cell;vertical-align: middle;
}
在 chrome、firefox 及 IE8 以上的浏览器下可以设置块级元素的 display 为 table-cell,激活 vertical-align 属性,但注意 IE6、7 并不支持这个样式。
有一个有趣的现象就是当为元素(不论之前是什么类型元素,display:none 除外)设置以下 2 个句之一:
position : absolute
float : left 或 float:right
元素会自动变为以 display:inline-block 的方式显示,当然就可以设置元素的 width 和 height 了且默认宽度不占满父元素。
vertical-align: text-top;
p里面不能嵌套 ul
当然还有一个布局方式就是flex布局,可以作为参考。
参考资料
- HTML和CSS高级指南之二——定位详解
- 居中方案,应该是最全的了吧