1、margin大法之水平居中
在水平方向使用需要实现居中时,可对子元素设置:
margin: 0 auto;
但是并不推荐在任意一个地方都这样写,除非确定对上下 margin 的设置不会影响到布局,否则建议这样写:
margin-left: auto;
margin-right: auto;
这种方式通常用来居中电脑端有固定宽度的版心。
2、 margin大法之水平且垂直居中
这种方式主要依赖定位(position)实现,但也靠关键的margin起效,所以我把它归为margin大法中了。使用方式是:
- 给父级样式设置:
postion: relative;
- 给子元素设置:
position: absolut;
- 将子元素的top/right/bottom/left设置为:0;
- 在子元素上设置:
margin: auto;
/* 示例代码 */
.father {
position: relative;
}
.son {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: 0;
}
3、position和transform的结合实现居中
- 给父级样式设置:
postion: relative;
- 给子元素设置:
position: absolut;
- 对子元素设置left/top: 50%;
- 对子元素设置:
transform: translate(-50%,-50%);
/* 示例代码 */
.father {
position: relative;
}
.son {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
top、left是父级坐标原点来移动的,transform的translate是以子元素本身的坐标原点来移动的。如果不用translate,可以自己根据子元素的宽高算好偏移量来设置margin-top/margin-left,但这样做比较麻烦。
4、 弹性布局(flex)实现居中
css3中提供了一种响应式布局的方案:弹性盒子。他可以适应不同屏幕的大小和不同的设备类型。同时,它也提供了更加有效地方式来对容器的子元素进行排列和对齐,以及分配剩余空白空间等。在移动端的使用场景居多。
.father {
display: flex;
justify-content: center;
align-items: center;
}
5、总结
- 除了方法3,其余方法不依赖子元素的计算;
- 使用 postion 时,有个口诀“子绝父相”;
- 这些方法都具有自适应性,我们不用特别关心父元素的宽高即可让子元素居中。
- 效果相同的情况,用代码量小的。
以上内容演示请看 —> 代码演示