CSS之“绝对定位”的盒子使用margin:0px auto;不能实现水平居中的解决方案
程序员文章站
2023-12-25 20:28:15
...
在盒子实现水平居中的布局中,我们经常直接使用margin:0px auto;来实现居中,在很多时候的确可以一句这样的代码就实现了,但在绝对定位的盒子中,这是不起作用的。
1.根据代码测试是否真如上面所说:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>水平居中</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.container {
position: absolute;
width: 200px;
height: 200px;
background-color: pink;
margin: 0px auto;
}
</style>
</head>
<body>
<div class="container"></div>
</body>
</html>
效果图:
2.那我再来试试相对定位是否可行:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>水平居中</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.container {
position: relative;
width: 200px;
height: 200px;
background-color: pink;
margin: 0px auto;
}
</style>
</head>
<body>
<div class="container"></div>
</body>
</html>
嗯,没错,只有在绝对定位时,我们使用margin:0px auto;才不能起作用。
3.既然绝对定位不能使用margin:0px auto;实现水平居中,那我们使用什么方法呢?
- left:50%: 让绝对定位盒子向右移动父元素(必需带定位)宽度的一半
- margin-left: 让绝对定位盒子再向左移动自身宽度一半
没错,我们用这两句代码代替margin:0px auto;即可实现绝对定位盒子水平居中。
第一步:left:50%;
第二步:margin-left:-100px;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>水平居中</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.container {
position: absolute;
width: 200px;
height: 200px;
background-color: pink;
left: 50%;
margin-left: -100px;
}
</style>
</head>
<body>
<div class="container"></div>
</body>
</html>
实现了居中。
为什么我那里使用的是margin-left:-100px呢?负号是往相反方向移动,而100px是因为我设置的盒子宽度是200px,取一半。
其实第二句代码可以用其它代码代替:transform:translate(-50%);它的优点就是不用计算自身宽度的一半。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>水平居中</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.container {
position: absolute;
width: 200px;
height: 200px;
background-color: pink;
left: 50%;
transform: translate(-50%, 0);
}
</style>
</head>
<body>
<div class="container"></div>
</body>
</html>
效果:
小结:我们这里两种方法实现水平居中都是利用了同样的思想
先将盒子向右移动带有定位的父元素宽度的一半,再往回移动自身宽度的一半