让绝对定位的元素,实现居中的三种办法

一、绝对定位元素的居中实现

如果要问如何CSS实现绝对定位元素的居中效果,很多人心里已经有答案了。

兼容性不错的主流用法是:1,先向右,向下移动百分之50,然后在利用margin减去自身宽度的一半(这个一定不能忘了减去哦,负值)

.element {

width: 600px; height: 400px;

position: absolute; left: 50%; top: 50%;

margin-top: -200px; /* 高度的一半 /

margin-left: -300px; / 宽度的一半 /

但,这种方法有一个很明显的不足,就是需要提前知道元素的尺寸。否则margin负值的调整无法精确。此时,往往要借助JS获得。

二、绝对定位元素的居中实现

CSS3的兴起,使得有了更好的解决方法,就是使用transform代替margin. transform中translate偏移的百分比值是相对于自身大小的,于是,我们可以:利用transform来实现,就解决了margin减半的问题。

.element {

width: 600px; height: 400px;

position: absolute; left: 50%; top: 50%;

transform: translate(-50%, -50%); /* 50%为自身尺寸的一半 */

于是乎,无论绝对定位元素的尺寸是多少,其都是水平垂直居中显示的。

然,问题很明显,兼容性不好。IE10+以及其他现代浏览器才支持, IE9(-ms-), IE10+以及其他现代浏览器才支持。中国盛行的IE8浏览器被忽略是有些不适宜的(手机web开发可忽略)。

实际上,绝对定位元素的居中实现还有另外一种方法,可以说是权衡了上面的尺寸自适应以及兼容性的一个方案,其实现的核心是margin:auto.

在微信开发中我们在处理transform的时候最好再添加一个-webkit-transform:translate(-50%, -50%); 因为X5内核的webkit版本比较低,所以需要兼容处理

三、margin:auto实现绝对定位元素的居中

首先,我们来看下CSS代码:

.element {

width: 600px; height: 400px;

position: absolute; left: 0; top: 0; right: 0; bottom: 0;

margin: auto; /* 有了这个就自动居中了 */

代码两个关键点:

上下左右均0位置定位;

margin: auto

于是,就居中了。上面代码的width: 600px height: 400px仅是示意,你修改为其他尺寸,或者不设置尺寸(需要是图片这种自身包含尺寸的元素),都是居中显示的。很有意思的~~

CSS 布局 - 水平和垂直对齐

CSS 布局 - 水平和垂直对齐

元素居中

水平和垂直居中的元素

居中对齐元素

要使块元素(例如

)水平居中,请使用 margin: auto;。

设置元素的宽度将防止其延伸到容器的边缘。

然后,元素将占用指定的宽度,剩余空间将在两个外边距之间平均分配:

这个 div 元素是居中的。

实例

.center {
  margin: auto;
  width: 50%;
  border: 3px solid green;
  padding: 20px;
}

亲自试一试

注意:如果未设置 width 属性(或将其设置为 100%),则居中对齐无效。

居中对齐文本

如果仅需在元素内居中文本,请使用 text-align: center;:

这段文本是居中的。

实例

.center {
  text-align: center;
  border: 3px solid green;
}

亲自试一试

提示:有关如何对齐文本的更多例子,请参见 CSS 文本 这一章。

居中对齐图像

如需居中图像,请将左右外边距设置为 auto,并将其设置为块元素:

实例

img {
  display: block;
  margin-left: auto;
  margin-right: auto;
  width: 40%;
}

亲自试一试

左和右对齐 - 使用 position

对齐元素的一种方法是使用 position: absolute; :

这个 div 是右对齐的。

实例

.right {
  position: absolute;
  right: 0px;
  width: 300px;
  border: 3px solid #73AD21;
  padding: 20px;
}

亲自试一试

注意:绝对定位的元素将从正常流中删除,并可能出现元素重叠。

左和右对齐 - 使用 float

对齐元素的另一种方法是使用 float 属性:

实例

.right {
  float: right;
  width: 300px;
  border: 3px solid #73AD21;
  padding: 10px;
}

亲自试一试

注意:如果一个元素比包含它的元素高,并且它是浮动的,它将溢出其容器。您可以使用 clearfix hack 来解决此问题(请看下面的例子)。

clearfix Hack

然后我们可以向包含元素添加 overflow: auto;,来解决此问题:

实例

.clearfix {
  overflow: auto;
}

亲自试一试

垂直对齐 - 使用 padding

有很多方法可以在 CSS 中垂直对齐元素。一个简单的解决方案是使用上下内边距:

我是垂直居中的。

实例

.center {
  padding: 70px 0;
  border: 3px solid green;
}

亲自试一试

如需同时垂直和水平对齐,请使用 padding 和 text-align: center;:

我是水平和垂直居中的。

实例

.center {
  padding: 70px 0;
  border: 3px solid green;
  text-align: center;
}

亲自试一试

垂直对齐 - 使用 line-height

另一个技巧是使用其值等于 height 属性值的 line-height 属性:

我是水平和垂直居中的。

实例

.center {
  line-height: 200px;
  height: 200px;
  border: 3px solid green;
  text-align: center;
}
/* 如果有多行文本,请添加如下代码:*/
.center p {
  line-height: 1.5;
  display: inline-block;
  vertical-align: middle;
}

亲自试一试

垂直对齐 - 使用 position 和 transform

如果您的选择不是 padding 和 line-height,则另一种解决方案是使用 position 和 transform 属性:

我是水平和垂直居中的。

实例

.center { 
  height: 200px;
  position: relative;
  border: 3px solid green; 
}
.center p {
  margin: 0;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

亲自试一试

提示:您将在 2D 转换 这一章中学习有关 transform 属性的更多知识。

垂直对齐 - 使用 Flexbox

您还可以使用 flexbox 将内容居中。请注意,IE10 以及更早的版本不支持 flexbox:

我是水平和垂直居中的。

实例

.center {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 200px;
  border: 3px solid green; 
}

亲自试一试

提示:您将在我的 CSS Flexbox 这一章中学到更多关于 Flexbox 的知识。

CSS 参考手册CSS 实例CSS 测验CSS 课外书

W3School 简体中文版提供的内容仅用于培训和测试,不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。版权所有,保留一切权利。

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://news.xiuzhanwang.com/post/2124.html

发表评论

评论列表

还没有评论,快来说点什么吧~

友情链接: