前言
今天在开发当中偶然遇到一个问题,如下图,这里引入一个
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
标签使用的时候也出现过类似的情况)
于是解决办法可以从一下两点入手:
- 改变
display
属性
- 会出现以上问题的
display
属性有:inline-block
inline-flex
inline-table
inline-grid
等 - 不会出现以上问题的
display
属性有:block
flex
grid
table
contents
等
- 不改变
display
属性
- 将
inline-block
元素的父元素font-size
设置为0