CSS 布局 - 水平和垂直对齐 详解
CSS 布局 - 水平和垂直对齐
元素居中
居中对齐元素
要使块元素(例如 <div> )水平居中,请使用 margin: auto;
。
设置元素的宽度将防止其延伸到容器的边缘。
然后,元素将占用指定的宽度,剩余空间将在两个外边距之间平均分配:
示例代码:
.center {
margin: auto;
width: 50%;
border: 3px solid green;
padding: 20px;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
margin: auto;
width: 60%;
border: 3px solid #73AD21;
padding: 10px;
}
</style>
</head>
<body>
<h1>居中对齐元素</h1>
<p>要使块元素(例如 div)水平居中,请使用 margin: auto;</p>
<div class="center">
<p>Hello World!</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
注意:如果未设置 width
属性(或将其设置为 100%),则居中对齐无效。
居中对齐文本
如果仅需在元素内居中文本,请使用 text-align: center;
:
示例代码:
.center {
text-align: center;
border: 3px solid green;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
text-align: center;
border: 3px solid green;
}
</style>
</head>
<body>
<h2>居中文本</h2>
<div class="center">
<p>这段文本是居中的。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
提示:有关如何对齐文本的更多例子,请参见 CSS 文本 这一章。
居中对齐图像
如需居中图像,请将左右外边距设置为 auto
,并将其设置为块元素:
示例代码:
img {
display: block;
margin-left: auto;
margin-right: auto;
width: 40%;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
img {
display: block;
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<h1>居中图像</h1>
<p>要使图像居中,请将左右外边距设置为 auto,并使其成为一个块元素。</p>
<img src="/i/photo/tulip.jpg" alt="Tulip" style="width:40%" />
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
左和右对齐 - 使用 position
对齐元素的一种方法是使用 position: absolute;
:
示例代码:
.right {
position: absolute;
right: 0px;
width: 300px;
border: 3px solid #73AD21;
padding: 20px;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.right {
position: absolute;
right: 0px;
width: 300px;
border: 3px solid #73AD21;
padding: 10px;
}
</style>
</head>
<body>
<h1>右对齐</h1>
<p>如何用 position 属性将元素右对齐的例子:</p>
<div class="right">
<p>在我更年轻,更脆弱的岁月中,父亲给了我一些建议,从那以后我就一直在思考。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
注意:绝对定位的元素将从正常流中删除,并可能出现元素重叠。
左和右对齐 - 使用 float
对齐元素的另一种方法是使用 float
属性:
示例代码:
.right {
float: right;
width: 300px;
border: 3px solid #73AD21;
padding: 10px;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.right {
float: right;
width: 300px;
border: 3px solid #73AD21;
padding: 10px;
}
</style>
</head>
<body>
<h1>右对齐</h1>
<p>如何使用 float 属性将元素右对齐的例子:</p>
<div class="right">
<p>在我更年轻,更脆弱的岁月中,父亲给了我一些建议,从那以后我就一直在思考。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
注意:如果一个元素比包含它的元素高,并且它是浮动的,它将溢出其容器。您可以使用 clearfix hack 来解决此问题(请看下面的例子)。
clearfix Hack
然后我们可以向包含元素添加 overflow: auto;
,来解决此问题:
示例代码:
.clearfix {
overflow: auto;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
div {
border: 3px solid #4CAF50;
padding: 5px;
}
.img1 {
float: right;
}
.clearfix {
overflow: auto;
}
.img2 {
float: right;
}
</style>
</head>
<body>
<h1>Clearfix</h1>
<p>在本例中,图像高于包含它的元素,然而它被浮动了,所以它会在容器之外溢出:</p>
<div>
<img class="img1" src="/i/logo/w3logo-3.png" alt="phpcodeweb" width="180" height="167">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum...
</div>
<p style="clear:right">请为包含元素添加一个带有 overflow: auto; 的 clearfix 类,以解决此问题:</p>
<div class="clearfix">
<img class="img2" src="/i/logo/w3logo-3.png" alt="phpcodeweb" width="180" height="167">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum...
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
垂直对齐 - 使用 padding
有很多方法可以在 CSS 中垂直对齐元素。一个简单的解决方案是使用上下内边距:
示例代码:
.center {
padding: 70px 0;
border: 3px solid green;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
padding: 70px 0;
border: 3px solid green;
}
</style>
</head>
<body>
<h1>垂直居中</h1>
<p>在此例中,我们使用 padding 属性将 div 元素垂直居中:</p>
<div class="center">
<p>我是垂直居中的。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
如需同时垂直和水平对齐,请使用 padding
和 text-align: center;
:
示例代码:
.center {
padding: 70px 0;
border: 3px solid green;
text-align: center;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
padding: 70px 0;
border: 3px solid green;
text-align: center;
}
</style>
</head>
<body>
<h1>居中</h1>
<p>在此例中,我们使用 padding 和 text-align 将 div 元素垂直和水平居中:</p>
<div class="center">
<p>我是垂直和水平居中。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
垂直对齐 - 使用 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;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.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;
}
</style>
</head>
<body>
<h1>居中</h1>
<p>在此例中,我们使用 line-height 属性,其值等于 height 属性,以使 div 元素居中:</p>
<div class="center">
<p>我是垂直和水平居中。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
垂直对齐 - 使用 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%);
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
height: 200px;
position: relative;
border: 3px solid green;
}
.center p {
margin: 0;
position: absolute;
top: 50%;
left: 50%;
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<h1>居中</h1>
<p>在此例中,我们使用 position 和 transform 属性将 div 元素垂直和水平居中:</p>
<div class="center">
<p>我是垂直和水平居中。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
提示:您将在 2D 转换 这一章中学习有关 transform 属性的更多知识。
垂直对齐 - 使用 Flexbox
您还可以使用 flexbox 将内容居中。请注意,IE10 以及更早的版本不支持 flexbox:
示例代码:
.center {
display: flex;
justify-content: center;
align-items: center;
height: 200px;
border: 3px solid green;
}
完整实例【亲自试一试】:
<!DOCTYPE html>
<html>
<head>
<style>
.center {
display: flex;
justify-content: center;
align-items: center;
height: 200px;
border: 3px solid green;
}
</style>
</head>
<body>
<h1>弹性框</h1>
<p>同时将 justify-content 和 align-items 属性设置为 <em>center</em> 的容器将使项目在中心(在两个轴上)对齐。</p>
<div class="center">
<p>我同时在水平和垂直方向对齐。</p>
</div>
</body>
</html>
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html
提示:您将在我的 CSS Flexbox 这一章中学到更多关于 Flexbox 的知识。