第 204 题:如何实现元素的水平垂直居中?
在 HTML 中分为块级元素和内联元素,两者实现居中的方法都 一样,并且块级元素中还要区分定宽高和不定宽高的情况
水平居中
行内元素水平居中
父元素设置 text-align: center
<div class="container">
<p>我是内联元素</p>
</div>
<style>
.container{
width: 100%;
height: 100px;
background-color: darkseagreen;
/* 父元素是块级元素,直接设置text-align属性 */
text-align: center;
}
</style>
块级元素水平居中(定宽)
通过设置要居中元素的外边距来实现:margin: 0 auto
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
<style>
.father {
background-color: red;
width: 500px;
height: 500px;
}
.son {
background-color: sandybrown;
width: 100px;
height: 100px;
/* 块级定宽,margin: 0 auto; */
margin: 0 auto;
}
</style>
块级元素水平居中(不定宽)
子元素设置display: inline,父元素设置text-aling: center(在设置了display: inline后会将该元素显示为行内元素,而inline不能设置宽高和上下外边距,但是可以左右外边距)
<body>
<div class="father">
<div class="son">1111111</div>
</div>
</body>
<style>
.father {
background-color: red;
width: 500px;
height: 500px;
text-align: center;
}
.son {
display: inlines;
background-color: blue;
}
</style>
使用定位属性实现,父元素设置 position: relative;,子元素设置 position: absolute;、left: 50%;、margin-left: -元素宽度一半
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
<style>
.father {
background-color: red;
width: 500px;
height: 500px;
position: relative;
}
.son {
width: 100px;
height: 100px;
position: absolute;
background-color: blue;
left: 50%;
/* 自己宽度的一半 */
margin-left: -50px;
}
</style>
使用 flex 布局实现水平居中在父元素设置 display: flex;、justify-content: center;
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
<style>
.father {
background-color: red;
width: 500px;
height: 500px;
display: flex;
justify-content: center;
}
.son {
width: 100px;
height: 100px;
background-color: blue;
}
</style>
垂直居中
行内元素垂直居中
设置子元素的行高即可实现,若行内元素文本出现换行则需要给父元素添加 display: table-cell;、vertical-align: middle;
<!-- HTML -->
<div class="container">
<p>单行行内元素</p>
</div>
<!--CSS-->
<style>
.container{
width: 500px;
height: 200px;
background-color: darkseagreen;
<!-- 行内元素换行时添加display: table-cell; vertical-align: middle; -->
}
.container p{
line-height: 200px;
}
</style>
块级元素垂直居中(定高)
定宽时,使用定位实现垂直居中。父元素设置 position: relative;,子元素设置 display:absolute;、left: 50%;、margin-top: -一半高度
<!-- HTML -->
<div class="container">
<div></div>
</div>
<!-- CSS -->
<style>
.container{
width: 500px;
height: 200px;
background-color: darkseagreen;
position: relative;
}
.container div{
width: 50px;
height: 50px;
background-color: rosybrown;
position: absolute;
top: 50%;
margin-top: -25px;
}
</style>
块级元素垂直居中(不定高)
需要使用到 transform: translateY(-50%);
<!-- HTML -->
<div class="container">
<div>不定高度</div>
</div>
<!-- CSS -->
<style>
.container{
width: 500px;
height: 200px;
background-color: darkseagreen;
position: relative;
}
.container div{
width: 50px;
background-color: rosybrown;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
</style>
使用 flex 实现垂直居中
<!-- HTML -->
<div class="container">
<div>不定高度</div>
</div>
<!-- CSS -->
<style>
.container{
width: 500px;
height: 200px;
background-color: darkseagreen;
display: flex;
align-items: center;
}
.container div{
width: 50px;
background-color: rosybrown;
}
</style>
水平垂直居中
利用定位实现水平垂直居中,父元素设置 position: relative;,子元素设置 position: absolute;
<!-- HTML -->
<div class="container">
<div></div>
</div>
<!-- CSS -->
<style>
.container{
width: 500px;
height: 200px;
background-color: darkseagreen;
position: relative;
}
.container div{
width: 50px;
height: 50px;
background-color: rosybrown;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
}
</style>
利用 flexbox 实现水平垂直居中,父元素设置 position: relative;,子元素设置 position: absolute;
<!-- HTML -->
<div class="container">
<div></div>
</div>
<!-- CSS -->
<style>
.container{
width: 500px;
height: 200px;
background-color: darkseagreen;
display: flex;
justify-content: center;
align-items: center;
}
.container div{
width: 50px;
height: 50px;
background-color: rosybrown;
}
</style>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
水平居中
1. 行内元素
若是行内元素,给其父元素设置
text-align:center
即可实现行内元素水平居中2. 块级元素
2.1 宽高固定
当宽高固定时,以下 html 示例:
以下四种方式显示效果均为:
方式一:margin:0 auto
方式二:absolute + margin-left
方式三:absolute + calc
方式四:absolute + left + right + margin-left
2.2 宽高不定
当宽高不定时,以下测试示例:
以下三种方式显示效果均为:
方式一:使用 CSS3 中新增的 transform 属性
方式二:flex 布局
方式三:width: fit-content
fit-content
是 CSS3中 给width
属性新加的一个属性值,它配合margin
可以轻松实现水平居中垂直居中
1. 行内元素
代码示例:
方式一:line-height(单行文本)
当多行时会样式错乱,需要用到
vertical-align: middle
布局方式二:display: table-cell + vertical-align (多行文本)
可用 vertical-align 属性, 而
vertical-align
只有在父层为td
或者th
时, 才会生效,对于其他块级元素, 例如div
、p
等,默认情况是不支持的。为了使用
vertical-align
,我们需要设置父元素display:table
, 子元素display:table-cell; vertical-align:middle;
方式三:display: inline-block + vertical-align 隐式幽灵节点
设置幽灵节点的高度以及幽灵节点的基线(通过
line-height
),来设置幽灵节点的x-height
, 是span
的中线与幽灵节点的中线对齐,同样也可以使vertical-align: middle;
居中方式四:display: grid 布局
效果如上
方式五:writing-mode 布局
writing-mode
属性定义了文本在水平或垂直方向上如何排布。效果如上
2. 块级元素
参照 水平居中的块级元素布局 ,同样把对水平方向的转换为垂直方向的
2.1 宽高固定
示例代码:
以下几种方式显示效果均为:
方式一:absolute + margin-top
方式二:absolute + calc
方式三:absolute + left + right + top + bottom
2.2 宽高不定
当宽高不定时,以下测试示例:
以下两种方式显示效果均为:
方式一:使用 CSS3 中新增的 transform 属性
需要设定 parent 为相对定位(
position: relative
)方式二:flex 布局
原文