一种CSS完全居中的神奇方法
来源:互联网 发布:1100lu千百最新域名 编辑:程序博客网 时间:2024/04/28 12:42
如题,本文介绍一种神奇的CSS完全居中法。
当然这种方法其实早在几年前就已经被提出,现在也应该是一种非常普遍的技巧了,然而到目前为止在搜索居中法时仍然有大部分文章并没有提到过这种方法,遂感奇怪,自己测试了一番并在此mark一下。
我们都知道margin:auto;样式可以做到水平居中,而不能垂直居中,但是现在,请注意!只需要申明元素高度,并附加以下样式,即可完全居中:
.absolute_center{position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}先说这种方法的好处:
- 跨浏览器,兼容性好(无需hack,可兼顾IE8~IE10)
- 无特殊标记,样式更精简
- 自适应布局,可以使用百分比和最大最小高宽等样式
- 居中时不考虑元素的padding值(也不需要使用box-sizing样式)
- 布局块可以自由调节大小
- img的图像也可以使用
- 必须声明元素高度
- 推荐设置overflow:auto;样式避免元素溢出,显示不正常的问题
- 这种方法在Windows Phone上不起作用
下面附上我测试的结果:
居中:
效果:
html:
<div class="container"> <div class="inner_box absolute_center"> <p class="absolute_center">容器內居中</p> </div></div>css:
.container{position: relative;height: 300px;width: 500px;background-color: #1B6540;margin-bottom: 20px;}.inner_box{width: 200px;height: 100px;background-color: #4FA46B;}.absolute_center{position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;}.inner_box p{text-align: center;color: #fff;height: 40px;line-height: 40px;}
接下来就是在此基础上通过添加额外样式来达到不同效果:
在可视区域内居中:
也就是在浏览器可视区域居中,只需要附上如下代码:
.absolute_center.is_fixed{position: fixed;z-index: 999;}
偏移:
效果:
css代码:
.absolute_center.offset{left:auto;right: 0;}同理,上左下都一样。
我理解的原理:
其实如果理解了使用position:absolute;和top:0;right:0;left:0;bottom:0;样式填满父元素的原理,再来理解这个应该没什么问题,道理都一样。在没有设置宽高的情况下浏览器在解析样式时会将该元素的宽高拉伸为父元素宽高大小,从而符合top:0;right:0;left:0;bottom:0;的要求;而如果设置了宽高,那么浏览器只有通过改变margin值来变相达到top:0;right:0;left:0;bottom:0;的要求,憋问我为什么不是改变padding值- -。显然这里设置left:auto;right:0;之后上下margin会被拉伸,左右不需要。
带溢出内容:
.absolute_center.is_overflow{overflow: auto;}
大小可调整:
.absolute_center.is_resizable{resize: both;min-width: 20%; max-width: 80%; min-height: 20%; max-height: 80%; overflow: auto;}完全居中法是目前唯一能够支持resize:both;的居中方法,这里你也可以通过设置transition来调整大小变化的时间和效果。
虽然完全居中法看起来很强大,是解决剧中问题的好方法,但是也有许多解决不同需求的方法,比如常用的负margin值法、transform法、麻烦的table-cell法、inline-block法、以及神奇时尚的flexbox法,这里就不再详细介绍这些方法,有需求的童鞋可以自行百度~
最后的建议:
各项技术都有各自的好处,该方法固然强大,但具体选择什么方法还需要看具体的需求,取决于你所支持的浏览器、现有标签结构等等,“完全居中”法简单方便,迅速及时。以前使用负Margin值的地方,都可以使用Absolute居中。无需繁琐的数学计算,无需额外标签,而且可以随时改变大小。如果要照顾到浏览器兼容性的话,可以尝试table-cell和inline-block技术,如果想尝试新鲜事物的话,可以使用Flexbox,并享受这种高级技术带来的好处。
更多内容请查看:如何只用CSS做到完全居中以及how-to-center-anything-with-css
- 一种CSS完全居中的神奇方法
- 【CSS】居中的CSS:完全指南
- Css 居中的方法
- css 完全居中
- CSS居中完全指南
- CSS:多个DIV在同一行居中显示的一种实现方法
- CSS:多个DIV在同一行居中显示的一种实现方法
- css - 一种让超大banner图片不拉伸、全屏宽、居中显示的方法
- css背景图片居中的方法
- CSS居中的常用方法
- css 水平居中的方法
- css图片居中的方法
- CSS设置居中的方法
- css垂直居中的方法
- css实现居中的方法
- css图片居中的方法
- css垂直居中的方法
- css水平居中的方法
- 作业1
- Android中内容观察者的使用---- ContentObserver类详解
- ArchSummit北京2015 移动应用架构趋势纪要
- solr4.9--》dataimport导入数据类型转换问题
- 最后一个
- 一种CSS完全居中的神奇方法
- java对象与byte[]数组之间的相互转化,压缩解压缩操作
- 15电气1班麻天骄
- ORMLite的几个关键注解的使用说明
- 百度地图的集成定位与路径规划
- lintcode: Word Ladder
- iOS开发之 【_NSArrayM objectAtIndex:】:index 0 beyond bounds for empty array
- Java基础09 类数据与类方法
- 4.2016物电学院 电气工程及其自动化专业 辛雅松 15050341033