关于inline-block高度带来的bug及解决方案

本文记录了一位开发者在处理input标签隐藏时遇到的难题。当使用v-show或v-if并试图通过CSS隐藏input,却发现无法消除其占用的空间。经过排查,问题出在行内盒模型上。解决方案包括修改display属性或调整父元素的font-size。这一问题涉及前端开发中的CSS样式和盒模型理解。
摘要由CSDN通过智能技术生成

前言

今天在开发当中偶然遇到一个问题,如下图,这里引入一个 input标签,利用input的focus来实现时间线的定位。
在 v-show 和 v-if 为 false 时不能正常的调用focus方法来实现时间线的定位,所有要通过css样式来将input标签从页面内“隐藏”,同时不能通过display:none的方式来实现
于是就尝试,将input的宽 高 内外边距设置为0,于是问题就出现了。。。下图中红框位置的高度莫名其妙被撑开了。

在这里插入图片描述
在这里插入图片描述


寻找问题的根源

1. input标签默认样式中的影响因素

在排除掉了宽、高、内外边距的影响之后,又分别做了如下尝试:

  • line-height为0
  • outline为0
  • border为none
  • font-size为0

经过以上尝试后,问题并没有得到解决,莫名多出来的高度依然顽固的存在。

2. 排除elementUI对input标签的影响

为了排除,是不是elementUI对input的样式有什么影响,于是新建了一个html文件,开始了我的尝试。
代码如下:

<div class="my-div">
    <input type="text"><div class="my-child">
    </div>
</div>
.my-div{
	height: 800px;
	width: 800px;
   	background-color: cadetblue;
 }
.my-child{
   	height: 600px;
   	width: 600px;
   	background-color: pink;
 }
input{
 	height: 0;
    width: 0;
    border: none;
    line-height: 0;
    outline: none;
    font-size: 0;
}

依然没有起到效果,这个时候心态已经有点小崩了。。。
在这里插入图片描述
图片红框中的白块 就是input高度依然存在的证明。


解决方法

偶然间发现,将input的display改为block可以解决问题,这时候我才发现出现问题的原因,并不在input标签本身,而是在于行内盒模型起到了影响。(不禁让我想起了img标签使用的时候也出现过类似的情况)
于是解决办法可以从一下两点入手:

  1. 改变 display 属性
  • 会出现以上问题的display属性有:inline-block inline-flex inline-table inline-grid
  • 不会出现以上问题的display属性有:block flex grid table contents
  1. 不改变 display 属性
  • inline-block 元素的父元素 font-size 设置为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值