小码哥的IT人生

CSS 布局 - 水平和垂直对齐 详解

css3基础 2022-05-23 12:04:39小码哥的IT人生shichen

CSS 布局 - 水平和垂直对齐

元素居中

水平和垂直居中的元素

居中对齐元素

要使块元素(例如 <div> )水平居中,请使用 margin: auto;

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

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

这个 div 元素是居中的。

示例代码:

.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; :

这个 div 是右对齐的。

示例代码:

.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

如需同时垂直和水平对齐,请使用 paddingtext-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

如果您的选择不是 paddingline-height,则另一种解决方案是使用 positiontransform 属性:

我是水平和垂直居中的。

示例代码:

.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 的知识。

版权所有 © 小码哥的IT人生
Copyright © phpcodeweb All Rights Reserved
ICP备案号:苏ICP备17019232号-2  

苏公网安备 32030202000762号

© 2021-2024