如下图所示布局:将图片水平、垂直居中。
提供2种实现方案
首先,了解一下vertical-align,此处参考MDN
vertical-align是 用来指定行内块元素(inline-block)或表格单元格(table-cell)元素的垂直对齐方式
比较常见的4种用法:
- vertical-align: top;
- vertical-align: middle;
- vertical-align: baseline;
- vertical-align: bottom;
方案一:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.box{
width: 300px;
height: 300px;
margin: 50px auto;
background-color: gray;
text-align: center;
}
/*先用辅助标签span将高度撑开 */
.box span{
display: inline-block;
height: 100%;
width: 1px;
background-color: red;
vertical-align: middle;
}
/*图片垂直居中*/
.box img{
vertical-align: middle;
}
</style>
</head>
<body>
<div class="box">
x<img src="./mz3.jpg" alt=""><span></span>
</div>
</body>
</html>
效果如下:
方案二:
前面方案加span的主要原因是撑开一个高度,其实我们可以直接用给父元素加line-height来撑开,实现如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.box{
width: 300px;
height: 300px;
line-height: 300px;/*通过文字行高撑开300px的高度*/
font-size: 30px;/*文字大小无所谓,这里只是方便显示x*/
margin: 50px auto;
background-color: gray;
text-align: center;
}
.box img{
vertical-align: middle;/*与x的中线对齐*/
}
</style>
</head>
<body>
<div class="box">
x<img src="./mz3.jpg" alt="">
</div>
</body>
</html>
效果如下:
类似应用还有实现登录、注册时,在前面加"*"星号提示为必填项,原理类似:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{padding: 0;margin: 0;}
b{font-weight: normal;}
div{
width: 500px;
margin: 0 auto;
height: 50px;
line-height: 50px;/*直接line-height'*'无法垂直居中*/
text-align: center;
background-color: pink;
margin-bottom: 10px;
}
div span{
color: red;
font-weight: bolder;
margin-right: 8px;
}
.box2 span{
display: inline-block;
height: 30px;
line-height: 33px;
vertical-align: middle;
}
</style>
</head>
<body>
<div class="box1">
<span>*</span>直接line-height无法实现星号垂直居中
</div>
<div class="box2">
<span>*</span>你好,世界X
</div>
</body>
</html>
效果如下: