等高的行级div却不在同一条水平线上

本文详细介绍了使用CSS实现元素垂直对齐的两种有效方法:一是利用inline-block结合vertical-align属性,二是采用flex布局并设置align-items属性。文章通过具体代码示例展示了如何应用这两种方法,并讨论了它们相对于传统定位和浮动的优势。
原因
  1. 基线没有对齐
  2. 其中有的div单独设置了对准方式
  3. 其中有的div设置定位方式(fixed|absolute)
  4. 其中有的div设置浮动
思路
  1. div通过inline-block转换行级后,添加vertical-align属性指定对准方式
  2. div通过弹性盒子flex转换子节点行级后,父添加align-items属性指定对齐方式
方案1

CSS: 

.bank-box .bank-change .bank-icon {
    width: 1.5rem;
    height: 1.5rem;
    background-image: url(../images/change.png);
    background-size: cover;
    display: inline-block;
}

页面:

.bank-box .bank-change .bank-icon {
    width: 1.5rem;
    height: 1.5rem;
    background-image: url(../images/change.png);
    background-size: cover;
    display: inline-block;
    vertical-align: top;
}

前后效果可自行对比

方案2
// 父级
.bank-box .bank-change {
    display: flex;
    align-items: center; // 垂直对齐方式
    // justify-content: center // 水平对齐方式
}

// 子级
.bank-box .bank-change .bank-icon {
    width: 1.5rem;
    height: 1.5rem;
    background-image: url(../images/change.png);
    background-size: cover;
    // align-self: center; // 你也可以单独指定某个子级的垂直对齐方式
    // justify-self: center; // 你也可以单独指定某个子级的水平对齐方式
}

效果如下

总结

除了上诉两种方法外,你还可以通过浮动、定位、设置行高等方式来实现垂直对齐。

但这样做可能会影响你的布局:浮动记得要在合适的节点及时清除clear:float,不然会出现很多奇奇怪怪的布局问题。

定位要记得控制层级,还要尽量控制在父节点内position: relative,还要注意显示权重z-index。

所以我更推荐上述两种方式,其中以弹性盒子的方式最为推荐。

相较于inline-block,弹性盒子只需在父节点设置即可,而且有更多、更灵活的子节点控制,这里不做赘述。

是的,你说得非常正确: ✅ **InnoDB 的锁实际上是加在索引结构上的**,而不是“直接”加在数据本身。这是理解 InnoDB 锁机制的关键点之一。 --- ### 🔍 详细解释:为什么锁是“加在索引上”的? InnoDB 是索引组织表(Index-Organized Table),即数据是按照主键索引的 B+ 树结构存储的。因此: - **聚簇索引(Clustered Index)**:存储了完整的数据; - **二索引(Secondary Index)**:只存索引列和主键值,查找数据需要回表; 当执如下语句时: ```sql UPDATE t SET age = 25 WHERE id = 10; ``` - `id` 是主键 → InnoDB 会通过聚簇索引快速定位到该; - 然后在对应的索引记录上加上 **X锁(排他锁)**; - 这个锁其实是加在聚簇索引的某个节点上的。 > ✅ 所以说:“锁是加在索引记录上的”。 --- ### 🚨 如果没有索引怎么办? 假设你这样写: ```sql UPDATE t SET age = 25 WHERE name = 'Tom'; ``` 而 `name` 字段**没有索引**: 1. InnoDB 必须进全表扫描(遍历聚簇索引的所有叶子节点); 2. 对每一条记录判断 `name = 'Tom'` 是否成立; 3. 如果成立,则对该**聚簇索引上的记录加锁**(X锁); 4. 因此,虽然你是想“按件更新”,但实际是对所有扫描过的、符合件的逐一加锁; 5. 更严重的是,在 RR 隔离别下,还会尝试加 **间隙锁(Gap Lock)** 来防止幻读,但由于无索引,这些锁无法高效管理; > ❗结果就是:大量被加锁,甚至整个表的大部分都被锁定,**看起来像表锁**。 但这仍然不是真正的“表锁”,而是: > “在聚簇索引上对多个记录加了锁 + 间隙锁”的集合为。 --- ### ⚠️ 特别注意:即使是二索引,也能加锁! 例如: ```sql UPDATE t SET age = 25 WHERE name = 'Tom'; -- name 有索引 ``` - InnoDB 先在二索引中查找 `name='Tom'` 的目; - 找到后,去聚簇索引中回表获取完整; - 然后分别在: - **二索引记录上加锁**(用于查询阶段) - **聚簇索引记录上加锁**(用于修改数据) > 所以:**不仅聚簇索引可以加锁,二索引也可以加锁!** --- ### 总结一句话: ✅ **InnoDB 的锁确实是加在索引记录上的(包括聚簇索引和二索引)**, ❌ 没有索引时并不会“自动升为表锁”,而是被迫扫描聚簇索引并对每一逐个判断并加锁,导致性能急剧下降,表现类似表锁。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值