css:两个行内块元素和图片垂直居中对齐

目录

两个行内块元素垂直居中对齐

先看一段代码:

html 复制代码
<style>
.box {
    width: 200px;
    height: 200px;
    line-height: 200px;
    font-size: 20px;
    text-align: center;
    display: inline-block;
    background-color: green;
  }
</style>

<div class="box"></div>
<div class="box">box</div>

显示效果

发现一个很奇怪的现象:我们本来期待的是两个框对齐,表现却是错位的

原因是:

一个inline-block元素,如果里面没有inline内联元素,或者overflow不是visible,则该元素的基线就是其margin底边缘,否则,其基线就是元素里面最后一行内联元素的基线。

所以第一个框的底部和后一个元素中的文字基线对齐了,

如果两个元素都有文本,则是对齐的

如果两个元素都没有文本,同样是对齐的

尝试增加对齐属性

css 复制代码
.middle {
  vertical-align: middle;
}

在第一个元素上增加

html 复制代码
<div class="box middle"></div>
<div class="box">box</div>

发现还是没有对齐,还是有一点点错位

尝试在第二个元素上增加

html 复制代码
<div class="box"></div>
<div class="box middle">box</div>

发现并没有居中对齐,有种失效的感觉

解决办法

让第一个盒子对齐方式改为顶部或底部对齐

css 复制代码
.top {
  vertical-align: top;
}
html 复制代码
<div class="box top"></div>
<div class="box">box</div>

表现如下

图片垂直居中问题

html 复制代码
<style>
.box {
   background-color: green;
 }
</style>

<div class="box">
 <img class="image" src="./mm.jpg" alt="" />
</div>

图片没有居中显示,底部多出了一个间隙

实现图片垂直居中对齐

方案一:修改图片元素为块级元素

css 复制代码
.image {
  display: block; 
}

方案二:图片元素居中对齐

css 复制代码
.image {
  vertical-align: middle;
}

方案三:父级元素行高改为0

css 复制代码
.box {
    line-height: 0;
}

方案四:父级元素字体大小改为0

css 复制代码
.box {
    font-size: 0;
}

图片和文字垂直居中对齐

一个很常见的需求,用户头像和用户名并排显示

html 复制代码
<style>
  .box {
    background-color: green;
  }

  .image {
    border-radius: 50%;
    width: 30px;
    height: 30px;
    object-fit: cover;
  }

  .text {
    background-color: red;
    color: #fff;
  }
</style>

<div class="box">
  <img class="image" src="./mm.jpg" alt="" />
  <span class="text">我是一段文字</span>
</div>

可以看到,默认情况下并没有实现垂直居中对齐

改造如下

html 复制代码
<style>
 .box {
   background-color: green;
   
 }
 .image {
   vertical-align: middle;
   border-radius: 50%;
   width: 30px;
   height: 30px;
   object-fit: cover;
 }

 .text {
   background-color: red;
   color: #fff;
   font-size: 12px;
   vertical-align: middle;
 }
</style>

<div class="box">
 <img class="image" src="./mm.jpg" alt="" />
 <span class="text">我是一段文字</span>
</div>

实现效果如下

参考文章

  1. CSS深入理解vertical-align和line-height的基友关系
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端